19024| 3
|
[M10教程] 【行空板】用Python玩转开源硬件-第11课:AI行人交通电子眼 |
本帖最后由 JIAJIA 于 2023-3-10 14:05 编辑 AI行人交通电子眼 “斑马线上的电子警察”在很久之前就正式上岗了,主要用于抓拍不礼让行人的机动车辆。当然驾驶员都表示愿意主动礼让行人,也有驾驶员说出了自己的顾虑,比如有时行人过马路不管不顾,打电话、看手机、闯红灯。遇到这种情况,如何才能保证机动车辆和行人都能够有序通过呢? 接下来,就使用行空板、人体红外运动传感器、USB摄像头制作一款AI行人交通电子眼。AI行人交通电子眼作为监督行人过斑马线的“电子警察”,24小时监管过马路的行人,帮助行人文明出行。 任务目标 行空板上每隔30s切换一次显示方式,在红灯情况下,如果斑马线上的人体红外传感器检测到有行人时,就对行人进行抓拍,并将抓拍照片显示在行空板上。 知识点 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.指令学习 挑战自我 仔细观察生活中的交通信号灯,不难发现,红灯时,倒计时的显示颜色是红色的;黄灯时,倒计时的显示颜色是黄色的;绿灯时,倒计时的显示颜色是绿色的。接下来,大家修改一下程序,让倒计时的显示颜色,与交通信号灯的颜色保持一致。 提示:使用更新颜色指令,在对应函数下,更新倒计时对象的显示颜色即可。 附件下载 第11课 AI交通行人电子眼.zip |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed