回到顶部 回到顶部

闯红灯拍照系统 简单

头像 真_乐迪 2019.12.21 1112 1

【项目背景】

交通陋习不但直接威胁着出行安全,扰乱了正常的交通秩序,也破坏了城市的整体形象。随着文明城市创建的深入人心,文明交通必将受到全社会的推崇。借助“闯红灯拍照系统”可以宣传文明交通、安全交通法规,引导大家告别交通陋习,倡导文明出行,提升人民素质,为城市的文明建设出一份力量,人民的出行也更有安全感。

【原理分析】

当红灯亮并且有车越线行驶时,拍照识别闯红灯车辆车牌号。我们可以利用红外避障开关来检测过往车辆是否越线闯红灯。具体的流程图如下所示。左侧是红绿灯系统的流程图,右侧是抓拍系统的流程图。

project-image

材料清单

  • DFRduino UNO R3 X1 链接
  • IO 传感器扩展板 V7.1 X1 链接
  • 数字食人鱼红色LED发光模块 X1 链接
  • 数字食人鱼绿色LED发光模块 X1 链接
  • 数字食人鱼黄色LED发光模块 X1 链接
  • 3-80cm红外数字避障传感器 X1 链接
  • A-B 方口USB线 X1 链接
  • 罗技C270电脑摄像头 X1 链接

因为我们用到了麦昆来模拟行驶的车辆,所以还需要以下硬件:

材料清单

  • 麦昆: micro:bit教育机器人 V4.0 麦昆+锂电池 X1 链接
  • 掌控板 X1 链接
  • IR kit红外遥控套件 X1 链接
  • 高品质 micro USB数据线 X1 链接

步骤1 连接器材

我们需要用到红、黄、绿三色LED以及红外避障开关。将数字食人鱼红色LED发光模块连接到扩展板的4号引脚,将数字食人鱼黄色LED发光模块连接到扩展板的5号引脚,将数字食人鱼绿色LED发光模块连接到扩展板的6号引脚。红外避障开关我们连接到扩展板的2号引脚即可。具体接线可以参考下图。

project-image

连线完成后的效果如下:

project-image

步骤2 编写主程序

打开Mind+,切换到实时模式。选择左下角的“扩展”按钮,接着选择“主控板”选项卡下的“Arduino UNO”作为主控。

project-image

将“网络服务”下的“AI图像识别”加入扩展。

project-image

在舞台背景库中选择“Colorful City”作为舞台背景。

project-image

参考流程图,开始编写代码。这里遇到了一个问题。本来按照原先的设想,应该使用多线程来编写的。一个线程模拟红绿灯系统,一个线程用来抓拍闯红灯的车牌。但是老师提醒我,由于UNO性能不够,不支持多线程。后来我看到论坛里的帖子“在UNO上如何实现同时控制多个延时程序?系统运行时间”,于是有了灵感。最终代码完成如下:

project-image

由于红绿灯系统要始终运行,如果用等待几秒这样的语句,会使系统阻塞。在此期间无法执行任何其他操作。所以改用记录当前系统运行时间的方法来控制红绿灯的持续时间。红灯亮的时候打开摄像头,如果红外避障开关检测到有车辆经过,就开始拍照识别。

步骤3 创建百度智能云应用

首先打开百度AI开放平台http://ai.baidu.com,点击右上角的控制台。用百度账号登录后选择页面左侧的“文字识别”。

project-image

在新页面中选择“创建应用”按钮。

project-image

完善应用信息。默认已经帮我们勾选了文字识别的相关服务,其中包含车牌识别。

project-image

创建好后在应用列表中能看到刚才创建的应用。我们需要记录列表中的AppID、API Key和Secret Key。

project-image

回到Mind+,将上述AppID、API Key和Secret Key的值填入“切换至独立账户”指令中。

project-image

至此,闯红灯抓拍系统的代码部分已经全部完成,接下来可以设计外观了。

步骤4 制作外观

首先制作红绿灯的外观。选择一张瓦楞纸,中间折两下。在上面挖三个孔用来安放LED。背面将LED和线材用透明胶带固定。

project-image

原本想将红绿灯做成L型的,但考虑到要挂摄像头上去,估计很难固定,所以将红绿灯做成直立型。由于做好的红绿灯是三棱柱的形状,底部受力面积太小,立不住,我们要设计一个底座。在瓦楞纸中间开了一个梯形的孔,用于放置信号柱。

project-image

放上去之后是这样子的。

project-image

看上去效果还可以。但是还有一个笨重的摄像头要放上去。结果一放上去就翻了!没办法,只好想办法解决。我们的杀手锏是用泡沫板做了一个很大的底座。

project-image

最终效果就是这样。主控板没地方放,那就放在一旁吧。

project-image

步骤5 编写测试车辆代码

为了更好的控制车辆,我们使用遥控板来控制麦昆的前进与后退。因此先要测试得出遥控各个按键的码值。我们将获取到的遥控信息输出到串口中。

project-image

经过测试,得到要用到的几个按键的码值如下表所示。

project-image

编写程序控制麦昆前进、后退、左转、右转与停止。

project-image

步骤6 测试运行

我们在麦昆身上放一张模拟车牌。

project-image

测试场景是这样的。由于前方到达桌子边缘,为防止小车坠落,特意放了两个盒子作为阻挡。

project-image

经过测试,基本能够实现闯红灯拍照效果。小车停下来是因为如果开过去就撞翻纸盒掉地上了,所以暂时只能这样处理。

project-image

评论

user-avatar
  • 王尧坤

    王尧坤2020.01.14

    很好的想法,学习了

    0