【行空板】用Python玩转开源硬件-第11课:AI行人交通电子眼
本帖最后由 JIAJIA 于 2023-3-10 14:05 编辑AI行人交通电子眼
“斑马线上的电子警察”在很久之前就正式上岗了,主要用于抓拍不礼让行人的机动车辆。当然驾驶员都表示愿意主动礼让行人,也有驾驶员说出了自己的顾虑,比如有时行人过马路不管不顾,打电话、看手机、闯红灯。遇到这种情况,如何才能保证机动车辆和行人都能够有序通过呢?
接下来,就使用行空板、人体红外运动传感器、USB摄像头制作一款AI行人交通电子眼。AI行人交通电子眼作为监督行人过斑马线的“电子警察”,24小时监管过马路的行人,帮助行人文明出行。
任务目标
行空板上每隔30s切换一次显示方式,在红灯情况下,如果斑马线上的人体红外传感器检测到有行人时,就对行人进行抓拍,并将抓拍照片显示在行空板上。
https://m.bilibili.com/video/BV1eT411a7WC?spm_id_from=333.999.0.0
知识点
1. 掌握USB摄像头拍照的方法
2. 了解USB摄像头的工作原理
3. 掌握查看行空板系统文件的方法
材料清单
硬件清单:
软件使用:Mind+编程软件 x1
下载地址:https://mindplus.cc/
动手实践
AI行人交通电子眼用于在红灯时,抓拍违规过斑马线的行人,并对该行人进行拍照,将拍摄的照片显示在行空板上,接下来就从下面几个小任务来实现吧!
任务一:人体感应电子眼
人体红外运动传感器检测到有人时,就使用USB摄像头进行拍照,并将拍下的照片显示在行空板上。
任务二:设计交通信号灯
在行空板上根据倒计时实现红灯、黄灯,以及绿灯的切换。
任务三:AI行人交通电子眼
红灯时,人体红外运动传感器检测到斑马线上有行人,摄像头进行拍照并将照片显示在行空板上。
任务一:人体感应电子眼
1.硬件连接
USB 摄像头是一款插入USB端口,就能工作的免驱摄像头。将摄像头连接到行空板的USB端口,人体红外运动传感器连接到行空板的P24引脚,硬件连接成功后,使用USB线将行空板连接到计算机。
注意:关于“USB摄像头”的相关介绍,见知识园地。
2.软件准备
打开Mind+,按照下面图示完成软件准备工作。
添加OpenCV库,点击“扩展”,在官方库中找到“OpenCV”并点击,完成添加。
3.编写程序
要实现摄像头拍照,首先需要使用创建VideoCapture对象指令,创建一个名为vd的视频捕获对象。
对象创建成功后,使用VideoCapture对象vd打开视频\设备指令,打开摄像头。
开始拍照之前,需要使用VideoCapture对象是否初始化完成指令,检查摄像头是否初始化完成。
摄像头打开成功后,就判断人体红外运动传感器是否检测到有人(P24 = 1)。如果有人,使用从VideoCapture对象中抓取下一帧指令,抓拍一张摄像头中的画面。使用保存图片指令,将图片名为Mind+.png的图片保存在行空板系统文件中。
注意:查看保存到行空板的图片方法,见知识园地。
照片拍摄成功后,可以使用显示图片的方式,将摄像头拍摄的照片显示在行空板上。下面,从图片素材库中任意导入一张图片到文件系统。
使用显示图片指令与更新对象数字参数宽指令,将导入的图片.png显示在行空板上。
现在行空板上显示的是导入的图片,怎样才能将摄像头拍摄的图片显示在行空板上呢?使用更新图片指令,更新图片源为摄像头拍摄的图片Mind+.png。
4.程序运行
点击运行,程序运行成功后,触发人体红外运行传感器,行空板上实时显示摄像头拍摄的图片。
任务二:设计交通信号灯
在开始编程之前,先来分析一下,这个任务中具体要实现哪些功能?首先需要设计一个简单的界面,然后完成交通信号灯,红灯、黄灯、绿灯的显示,最后根据倒计时完成交通信号灯的切换。
1.编写程序
(1)UI界面设计
为了简化程序,这里将界面中的框以及不变的文字制作成了一张背景图,下面将背景图片,从图片素材库中导入到文件系统。
在Python主程序开始下,使用显示图片指令,将背景图片显示在行空板上。
使用填充圆形指令,先将圆形填充红色代表红灯,再将代表黄灯和绿灯的圆形填充为白色。
在红绿灯的右侧还要一个倒计时的显示,使用显示放数码管字体指令,设置显示内容为30,显示颜色为红色。
(2)切换交通信号灯
如何才能实现交通信号灯的切换呢?分别新建三个函数,红灯、绿灯、黄灯。
在红灯函数下,使用更新颜色指令,将对象名hong的颜色更新为红色,其余两个对象的颜色更新为白色。其余两个函数,使用同样的方法即可。
实现不同颜色的信号灯切换,可以在循环执行指令中通过调用红灯、绿灯函数来实现。以30s的时间为例,先调用红灯函数,等待30秒后,调用绿灯函数,等待30秒。实现红灯亮30秒后,切换为绿灯;绿灯亮30秒后,切换为红灯。
(3)实现倒计时
在实际生活中,交通信号的等待时间,会以倒计时的形式出现。接下来就将程序中的等待30秒指令,改为倒计时显示。使用for循环指令,设置变量my variable的范围为30-1,每隔1。然后使用更新文本内容参数指令,更新倒计时为变量my variable。
倒计时还剩5秒时,将红灯切换黄灯。使用条件判断指令,判断变量my variable<6?小于6时,就调用黄灯函数。
下面,大家用同样的方式,实现绿灯的倒计时显示吧!完整程序如下:
2.程序运行
点击运行,程序运行成功后,行空板上显示交通信号灯,交通信号灯会根据倒计时实现红灯—黄灯—绿灯—黄灯的切换。
任务三:AI行人交通电子眼
任务一实现了人体感应电子眼,任务二实现了根据倒计时切换交通信号灯。AI交通行人电子眼其实就是任务一和任务二的结合,将任务一的功能在任务二的调用红灯函数下来实现。
1.编写程序
这个任务的程序,在任务二的基础上进行修改。在Python主程序开始下,使用创建VideoCapture对象指令、VideoCapture对象vd打开视频\设备指令、VideoCapture对象是否初始化完成指令,检查摄像头是否初始化完成。
红灯时,人体红外运动传感器检测到有行人,摄像头拍照并将拍摄的画面显示在行空板上。说明摄像头拍照的程序需要在调用红灯函数下来实现,可是怎样才能让红灯切换程序和摄像头拍照的程序同时执行呢?使用线程启动指令,在调用红灯函数下启动线程。
在当线程启动后执行指令下,使用条件指令,判断人体红外运动传感器是否检测有人(P24 = 1?)。如果有人,就使用从VideoCapture对象中抓取下一帧指令,抓拍一张摄像头中的画面,并使用保存图片指令,将图片保存到行空板本地文件中。
要让拍下来的违规行人照片显示在行空板上,在Python主程序开始下,使用显示图片指令与更新数字参数指令,设置图片的显示位置。在线程中使用更新图片指令,更新显示图片为Mind+.png,完整程序如下:
2.程序运行
点击运行,程序运行成功后。行空板界面上根据倒计时切换红绿灯显示,当人体红外运动传感器检测到有人时,行空板的显示界面上显示摄像头中的画面。
3.试一试
上面的程序还有一点小问题,在绿灯时,人体红外运动传感器检测到有行人时,摄像头也会拍照并将照片显示在行空板上。接下来,大家修改一下程序,实现在红灯时,才启动摄像头拍照和显示的功能。
提示:在调用绿灯函数程序下,使用线程停止指令。
知识园地
1.认识USB摄像头
这节课中,用到的摄像头是一款免驱动的USB摄像头,只要将摄像头插入USB端口,就可以工作起来。
摄像头是如何工作的呢?下面简单地了解一下摄像头的工作原理。景物通过镜头生成图像并投射到摄像头内部的图像传感器上,并对图像信号进行加工处理后变成图片文件,再通过USB接口将图片传输到行空板中,最后我们可以在行空板屏幕上显示图片,也可以通过将图片文件下载到电脑上,查看图片。
2.如何查看保存到行空板的图片
在任务一和任务三中,用到了保存图片指令,使用这个指令保存的图片具体存到了什么位置呢?连接行空板10.1.2.3远程终端后,可以看到在文件系统的文件目录下,会多出一个名为行空板中的文件。
点击目录中的mindplus文件夹,然后再点击cache文件夹,找到任务1.mp文件的保存位置。点击任务1.mp,可以看到两个图片文件分别为:图片.png、Mind+.png。
其中,图片.png是我们自己导入的图片文件,也就是项目中的文件。而Mind+.png就是使用保存图片指令从摄像头中获取的图片。右击“Mind+.png”,选择“下载文件到电脑”,将图片下载到电脑上。记住保存的路径,通过电脑就可以查看摄像头拍摄的图片了。
3.如何用计算机访问行空板系统文件
(1)开启行空板文件共享
长按行空板的“Home”键进入菜单页,点击“3-应用开关”,检查文件共享服务是否开启,如果显示“已禁用”,点击文件共享选项,切换文件共享状态为“启用中”。
(2)配置电脑
方法1:在电脑桌面上,找到“此电脑”双击打开。在地址栏输入板子的网络地址,格式为\\ip地址\,使用USB线连接电脑ip地址为10.1.2.3。输入\\10.1.2.3\,按回车,打开行空板系统文件夹。
方法2:使用快捷键win+R打开运行窗口,输入网络地址\\10.1.2.3\,点击确定,打开行空板系统文件夹。
行空板系统文件夹中,分别有media、root文件夹,其中,root为行空板板载的内存空间,media为外部连接的硬盘空间(给行空板插上SD卡或者通过USB口连接硬盘后会自动挂载在这个文件夹下)。
(3)查看保存到行空板的图片
双击root文件夹,会提示输入访问账号和密码。输入对应的账号和密码后,点击确定进入行空板的root文件夹。
账号:root
密码:dfrobot
在文件夹列表中,找到mindplus文件夹,然后再点击cache文件夹,找到任务1.mp文件的保存位置。点击任务1.mp,同样可以看到两个图片文件分别为:图片.png、Mind+.png。
4.指令学习
挑战自我
仔细观察生活中的交通信号灯,不难发现,红灯时,倒计时的显示颜色是红色的;黄灯时,倒计时的显示颜色是黄色的;绿灯时,倒计时的显示颜色是绿色的。接下来,大家修改一下程序,让倒计时的显示颜色,与交通信号灯的颜色保持一致。
提示:使用更新颜色指令,在对应函数下,更新倒计时对象的显示颜色即可。
附件下载
不错不错! 谢谢分享!!! 请问能发一下opencv库的地址吗?我在用户库中搜到的好像跟教程中的不一样。谢谢!
页:
[1]