ESP32 MicroPython AI摄像头应用⑩

ESP32 MicroPython AI摄像头应用⑩

    • 1、AI摄像头应用
    • 2、移动检测(LCD显示)
    • 3、实验内容
    • 3、参考代码
    • 4、实验结果

1、AI摄像头应用

我们小车MCU支持AI(人工智能)加速,可以用于加速神经网络计算和信号处理等工作的向量指令 (vector instructions),可以实现高性能的图像识别功能。对于AI功能我们已经移植好MicroPython的库到小车固件,内置有6种模型,分别是:移动检测、人脸识别、人脸检测、猫脸检测、颜色识别、二维码识别。使用内置的模型可以快速实现AI功能开发,下面我们来认识下构建函数和使用方法。

构造函数	说明
mdAI=ai.motionDetection(threshold,displayType)	构造移动检测对象
threshold:触发检测阈值(像素值)
displayType=1显示方式 为LCD显示屏
displayType=2显示方式 为网页方式(需WEB支持)
使用方法	说明
mdAI.start()	启动移动检测
mdAI.read()	读取检测结果,返回检测到的阈值
mdAI.stop()	停止移动检测
构造函数	说明
fdAI=ai.faceDetection(displayType)	构造人脸检测对象
displayType=1显示方式 为LCD显示屏
displayType=2显示方式 为网页方式(需WEB支持)
使用方法	说明
fdAI.start()	启动人脸检测
dat=fdAI.read()	读取人检测结果,最多支持检测两个人脸信息。
没有检测到返回(0),否则返回为元组格式
dat[0]:为返回检测到的人脸数量(0~2)
dat[1],dat[2]:检测矩形左上角x、y坐标
dat[3],dat[4]:检测矩形右下角x、y坐标
dat[5],dat[6]:检测左眼x、y坐标
dat[7],dat[8]:检测右眼x、y坐标
dat[9],dat[10]:检测鼻子x、y坐标
dat[11],dat[12]:检测左嘴角x、y坐标
dat[13],dat[14]:检测右嘴角x、y坐标
检测到两个人数据依次排列下去
fdAI.stop()	停止人脸检测
构造函数	说明
frAI=faceRecognition(displayType)	构造人脸识别对象
displayType=1显示方式 为LCD显示屏
displayType=2显示方式 为网页方式(需WEB支持)
使用方法	说明
frAI.start()	启动人脸识别
frAI.enroll()	录入人脸信息,录入成功返回保存的ID编号,ID范围1~1000。录入失败返回None
frAI.delete(id=0)	删除保存的人脸信息,参数默认为0则删除最后一个ID,否则删除输入的ID。
frAI.recognize()	人脸识别结果
没有识别到返回None,否则返回元组数据
dat[0]:为识别到的人脸ID
dat[1],dat[2]:识别矩形左上角x、y坐标
dat[3],dat[4]:识别矩形右下角x、y坐标
dat[5],dat[6]:识别左眼x、y坐标
dat[7],dat[8]:识别右眼x、y坐标
dat[9],dat[10]:识别鼻子x、y坐标
dat[11],dat[12]:识别左嘴角x、y坐标
dat[13],dat[14]:识别右嘴角x、y坐标
frAI.stop()	停止人脸识别
构造函数	说明
cdAI=ai.colorDetection(color,displayType)	构造颜色识别对象
color:需要识别的颜色
ai.COLOR_RED    红色
ai.COLOR_ORANGE橙色
ai.COLOR_YELLOW黄色
ai.COLOR_CYAN   青色
ai.COLOR_BLUE   蓝色
ai.COLOR_PURPLE 紫色
ai.COLOR_PURPLE 紫色
ai.COLOR_WHITE  白色
ai.COLOR_BLACK  灰色
ai.COLOR_STUDY  学习颜色模式

displayType=1显示方式 为LCD显示屏
displayType=2显示方式 为网页方式(需WEB支持)
使用方法	说明
cdAI.start()	启动颜色识别
dat=cdAI.read()	读取识别结果
没有识别到返回(0),否则返回元组格式为矩形区域上下角坐标
dat[0]:为返回识别到数量(0~5)
dat[1],dat[2]:检测矩形左上角x、y坐标
dat[3],dat[4]:检测矩形右下角x、y坐标
检测到两个以上依次排列下去
cdAI.stop()	停止颜色识别
构造函数	说明
catAI=ai.catDetection(displayType)	构造猫脸检测对象
displayType=1显示方式 为LCD显示屏
displayType=2显示方式 为网页方式(需WEB支持)
使用方法	说明
catAI.start()	启动猫脸检测
dat=catAI.read()	读取猫脸检测结果
没有检测到返回(0),否则返回为元组格式
dat[0]1 为检测到猫脸
dat[1],dat[2]:检测矩形左上角x、y坐标
dat[3],dat[4]:检测矩形右下角x、y坐标
catAI.stop()	停止猫脸检测
构造函数	说明
crAI=ai.codeRecognition()	构造二维码识别对象
使用方法	说明
crAI.start()	启动二维码识别
crAI.read()	读取二维码识别结果
识别到则返回识别结果,否则返回None
crAI.stop()	停止二维码识别
构造函数	说明
hstream=ai.http_stream()	构造AI识别HTTP数据流对象
需要网络支持
使用方法	说明
hstream.set_ok_callable(callback)	设置网页OK按钮回调函数
callback:方法,按下OK后的回调方法
hstream.set_up_callable(callback)	设置网页上键按钮回调函数
callback:方法,按下上键后的回调方法
hstream.set_down_callable(callback)	设置网页下键按钮回调函数
callback:方法,按下下键后的回调方法
hstream.set_left_callable(callback)	设置网页左边按钮回调函数
callback:方法,按下左边键后的回调方法
hstream.set_right_callable(callback)	设置网页右边按钮回调函数
callback:方法,按下右边键后的回调方法
hstream.stream_task()	启动检测网页按钮回调

2、移动检测(LCD显示)

移动检测用于检测摄像头区域物体变化,使用移动检测可以作为物体闯入监控,下面实验我们来学习移动检测的使用。

3、实验内容

使用摄像头采集图像并在LCD显示屏显示,启动AI移动检测模型检测并读取检测到的变化像素大小,如果变化的像素超过检测阈值,图像显示会在左上角显示出绿色实心矩形。并且在调试窗口每隔100毫秒读取检测打印检测到变化像素的大小值。
在移动检测模型中,需要图像层数为两层。所以我们在构造摄像头对象的时候,参数需配置为两层图像。在代码里面,myCam = cam.OV2640(frame=2) 的fram=2表示使用2层图层作为AI移动检测。
构建AI移动检测中的参数threshold = 200表示像素变化为200个单位就触发检测结果,displayType=1表示图像在LCD显示屏显示。参数为displayType=2是表示图像在WEB网页显示,需要网络支持。

在这里插入图片描述

3、参考代码

参考代码文件可以在资料包文件夹“智能小车mpy例程\基础实验\11-AI摄像头实验\01-移动检测-LCD显示”文件夹下的main.py 下面为完整代码内容:

'''
AI摄像头实验-移动检测LCD显示
'''
from machine import Pin,Timer  #导入Pin引脚和Time定时器模块
from lcd import LCD20          #导入2.0寸LCD模块
import cam                     #导入摄像头模块
import time,network
import ai                      #导入AI模块

#颜色值定义,(R,G,B) 0~255代表颜色值
red = (255,0,0)              #红色
green = (0,255,0)            #绿色
blue = (0,0,255)             #蓝色
white = (255,255,255)        #白色
back = (0,0,0)               #黑色

#创建LCD对象 dir 显示方向为竖屏,1、3竖屏,2、4屏横
ld=LCD20()  #默认为竖屏1

# 整屏填充指定颜色
ld.fill(back)
myCam = cam.OV2640(frame=2)    #创建摄像头对象,图层为2层(移动检测需要)

#设置摄像头尺寸240X240
myCam.framesize(cam.LCD240X240) #显示屏对应的分辨率 方便显示
myCam.set_hmirror(0) #设置摄像头水平镜像关闭
'''
创建AI移动检测对象
threshold:检测深度像素点,触发图像指示
displayType: 显示方式为 1-LCD,2-WEB网页显示
'''
myAi = ai.motionDetection( threshold = 200,displayType=1) #深度200,LCD显示方式
myAi.start() #启动AI检测

while True:
    mValue=myAi.read() #读取检测到数据
    print(mValue)      #打印实时检测结果
    time.sleep_ms(100)

4、实验结果

编写程序后点击运行,稍等几秒钟后可以看到LCD显示屏显示图像,在软件调试界面有数据不断打印。没有物体在摄像头前面移动时,调试界面数值很小。在摄像头前面走动时,可以看到图像左上角有绿色矩形显示,查看调试界面数值打印是已经变化阈值很大,已经触发移动检测事件。根据触发数据可以判断有物体移动。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

相关代码及固件:
https://download.csdn.net/download/lu330274924/88549191

智能小车购买链接
技术支持抖音:易驱达Easy Drive Coming
淘宝官方商城:https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-18887194911.15.135014bdaKI6mV&id=715385110550

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/170415.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一文讲明 网络调试助手的基本使用 NetAssist

我 | 在这里 🕵️ 读书 | 长沙 ⭐软件工程 ⭐ 本科 🏠 工作 | 广州 ⭐ Java 全栈开发(软件工程师) 🎃 爱好 | 研究技术、旅游、阅读、运动、喜欢流行歌曲 🏷️ 标签 | 男 自律狂人 目标明确 责任心强 ✈️公…

全球地表水年度数据集JRC Yearly Water Classification History, v1.4数据集

简介: JRC Yearly Water Classification History, v1.4是一个对全球水资源进行分类的数据集,覆盖了1984年至2019年的时间范围。该数据集是由欧盟联合研究中心(JRC)开发的,使用的数据源是来自Landsat系列卫星的高分辨率…

澳洲猫罐头如何?我亲自喂养过的优质猫罐头分享

猫罐头要符合三点:营养配方完整均衡、原料新鲜优质、生产工艺科学可靠。只有具备这些特点,才是品质上乘的猫罐头。 猫罐头的三个要素,一个都不能少。配方不均衡,营养就不足;原料不新鲜,生产出来的猫罐头就…

NX二次开发UF_CAM_ask_tool_matl_db_object 函数介绍

文章作者:里海 来源网站:里海NX二次开发3000例专栏 UF_CAM_ask_tool_matl_db_object Defined in: uf_cam.h int UF_CAM_ask_tool_matl_db_object(UF_CAM_db_object_t * db_obj ) overview 概述 This function provides the database object which is…

NameServer源码解析

1 模块入口代码的功能 本节介绍入口代码的功能,阅读源码的时候,很多人喜欢根据执行逻辑,先从入口代码看起。NameServer部分入口代码主要完成命令行参数解析,初始化Controller的功能。 1.1 入口函数 首先看一下NameServer的源码目…

长期暴露于空气污染与精神障碍存在因果关系 |UK Biobank周报(11.2)

郑老师统计课程,欢迎点击报名:Nhanes公共数据库挖掘 课程 英国生物银行(UK Biobank,UKB)是英国迄今以来规模最大的有关致病或预防疾病的基因和环境因子的信息资源库。目的是探求一些特定基因、生活方式和健康状况之间的…

BUUCTF [BJDCTF2020]鸡你太美 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 得到的 flag 请包上 flag{} 提交。来源: https://github.com/BjdsecCA/BJDCTF2020 密文: 下载附件,解压得到两个.gif图片。 第一个gif图片: 第二个gif图片无法打开。…

ROS navigation栅格地图原点位置如何确定?

背景 利用ros进行导航时,生成一张栅格地图,包含gridMap.pgm和gridMap.yaml。现在想要将栅格地图及轨迹在其他应用上显示,需要确定地图的坐标系原点。 gridMap.yaml格式 image: gridMap.pgm  #文件名 resolution: 0.20000  #地图分辨率 …

第十五章---I/O(输入/输出)

15.1输入输出流 流是一组有序的数据序列,根据操作的类型,可分为输入流和输出流两种。I/O(Input/Output,(输出)流提供了一条通道程序,可以使用这条通道把源中的字节序列送到目的地。虽然 I/O 流疆盘文件存取有关,但是程序的源和目…

启动dubbo消费端过程提示No provider available for the service的问题定位与解决

文/朱季谦 某次在启动dubbo消费端时,发现无法从zookeeper注册中心获取到所依赖的消费者API,启动日志一直出现这样的异常提示 Failed to check the status of the service com.fte.zhu.api.testService. No provider available for the service com.fte…

一道简单的积分题目

题目如下图&#xff1a; 解法1&#xff1a; 解法2&#xff1a; 解法3&#xff1a; 错误做法&#xff1a; 在 x ∈ ( 0 , ∞ ) 上有 ln ⁡ x < x &#xff0c;令 f ( x ) ln ⁡ x 1 x 2 &#xff0c; g ( x ) &#xff1d; x 1 x 2 ∴ f ( x ) < g ( x ) &#x…

中贝通信-603220 三季报分析(20231120)

中贝通信-603220 基本情况 公司名称&#xff1a;中贝通信集团股份有限公司 A股简称&#xff1a;中贝通信 成立日期&#xff1a;1999-12-29 上市日期&#xff1a;2018-11-15 所属行业&#xff1a;软件和信息技术服务业 周期性&#xff1a;1 主营业务&#xff1a;通信网络技术服务…

车载毫米波雷达行业发展1——概述

1.1 毫米波雷达定义及产品演进 1.1.1 毫米波雷达定义 毫米波雷达(mmWave Radar)是指工作在毫米波波段的雷达&#xff0c;其频域介于 30&#xff5e;300GHz&#xff0c;波长1~10mm。毫米波雷达稳定性高&#xff0c;抗干扰能力强&#xff0c;可穿透雾、烟、灰尘环境&#xff0…

Microsoft Visual Studio 2019下载及安装流程记录

第一周任务&#xff1a; 1.笔记本上安装vc2019的环境 2.再把OpenCV安装上 3.根据网上的教程&#xff0c;试着写几个opencv的程序 一、安装Visual Studio 2019社区版 首先先完成安装vc2019的环境&#xff0c; 因为&#xff1a; Microsoft Visual C是用于C编程的工具集合&am…

ATTCK 十大免费 工具和资源

01 eBook: Getting Started with ATT&CK 这本免费电子书将有关威胁情报、检测和分析、对手模拟和红队以及评估和工程的博客文章中的内容汇集到一个方便的软件包中。 02 CALDERA CALDERA是一个网络安全平台&#xff0c;旨在轻松自动化对手仿真&#xff0c;协助手动红队并自…

【鸿蒙最新全套教程】<HarmonyOS第一课>1、运行Hello World

下载与安装DevEco Studio 在HarmonyOS应用开发学习之前&#xff0c;需要进行一些准备工作&#xff0c;首先需要完成开发工具DevEco Studio的下载与安装以及环境配置。 进入DevEco Studio下载官网&#xff0c;单击“立即下载”进入下载页面。 DevEco Studio提供了Windows版本和…

【推荐】智元兔AI:一款集写作、问答、绘画于一体的全能工具!

在当今技术飞速发展的时代&#xff0c;越来越多的领域开始应用人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;。其中&#xff0c;AI写作工具备受瞩目&#xff0c;备受推崇。在众多的选择中&#xff0c;智元兔AI是一款在笔者使用过程中非常有帮助的…

使ros1和ros2的bag一直互通

很多文章都是先source ros1 然后source ros2,再play bag source /opt/ros/noetic/setup.bash source /opt/ros/foxy/setup.bash ros2 bag play -s rosbag_v2 kitti_raw00.bag 但实测会出问题: 为使ros1和ros2的bag一直互通 sudo apt update sudo apt install ros-foxy-ro…

在使用tomcat运行项目时,遇到端口80被占用的情况问题解决

问题描述&#xff1a;Failed to initialize end point associated with ProtocolHandler ["http-bio-80"] java.net.BindException: Address already in use: NET_Bind <null>:80 在学习springmvc的时候&#xff0c;跟着黑马视频进行学习&#xff0c;结果&…