【AI冬季挑战赛】智能停车场 置顶
h****3 · h****3 发布于2020-01-02 13:05 浏览:2037 回复:3

【摘要】

利用百度智能云中图像识别分类下的车牌识别对车牌进行识别,利用语音合成播报识别出来的车牌号以及收费情况。

【项目背景】

去年暑假,我们学校新增了车牌识别系统,大大提升了车辆进出校门口的效率,也减轻了门卫的工作量。Mind+ 软件中最近更新了 AI 图像识别功能,我们可以利用这个功能来制作一个智能停车场。

【原理分析】

一般的智能停车场管理系统由控制室、出入口自动道闸、电子显示屏、高清车牌识别摄像机、补光灯、地感线圈等组成。当车辆经过出入口时,车牌识别摄像机会拍摄识别进出车辆的车牌号并将其显示在电子显示屏上。验证通过后抬杆放行。车辆行驶过去以后会自动落杆。

这里可能比较陌生的是地感线圈,也就是车辆检测线圈。具体的功能下图有介绍。

因此当车辆经过第一个地感线圈并停车时,摄像机会捕获车牌信息进行识别。

以我校校门口为例,最上面的图片是入口,这里有两个车牌识别摄像机。这是因为我校门卫传达室处在一个 Y 型路口交叉处,两个方向都有可能有车驶入。具体使用情景如下:

当教职工车辆驶入,捕获车牌号,显示在侧边 LED 显示屏上,语音播报车牌号,显示屏第二行显示“授权车辆”,抬杆放行;(教职工车牌号已录入系统)

当外来车辆驶入,捕获车牌号,显示在侧边 LED 显示屏上,语音播报车牌号,并提示“此车未授权,显示屏第二行显示“此车未授权”,须人工确认后手动抬杆放行。

可以看到,我们的校门口共用一个出入口,因此共用了一个道闸。

【方案构思】

经过原理分析,可以理清具体的操作逻辑。首先检测是否有车辆经过,如果有车辆,则拍照识别车牌号,视情况是否放行。这里我们可以使用超声波传感器检测出入口是否有车辆经过。因为要拍照识别,所以还需要一个电脑摄像头。道闸抬杆我们要用到 180° 舵机。关于主控,我们选择掌控板,因为自带 OLED 显示屏,可以直接显示车牌号,相对而言比较方便。

材料清单

 
1掌控板编程入门学习主控板 含USB线   链接
1x  micro:bit掌控I/O扩展板   链接
1x  URM09-I²C超声波测距传感器   链接
1x  DMS-MG90 金属9g舵机 (1.8Kg)   链接
1x  罗技C270电脑摄像头   链接

我们假设要制作的智能停车场是这样的运行方式:

1.停车场对外开放,但是车位有限。所有外来车辆必须按指定车位停车,不得随意乱停。

2.半小时(30 秒)内停车免费,超过半小时(30 秒)部分每小时(分钟)收费 2 元,不足 1 小时(分钟)按 1 小时(分钟)计算。

为了简化操作(其实因为我只有一个摄像头^_^),我们假设出入口为同一个,车辆都从同一个出入口,相同方向驶入、驶出(好像现实中不存在这种情况O__O"…)。

【功能设计】

【制作过程】

依据前面的思路分析及功能设计,整理出整个项目的流程图如下:

 

步骤1 器材连线

 

将掌控板插入扩展板中,然后将舵机接到 P9 引脚,超声波传感器的 Trig 接到 P0,Echo 接到 P1。

完成接线后是这样子的。

 

步骤2 加载扩展

 

因为要用到 AI 图像识别,所以需要将项目切换到“实时模式”。

接着到“扩展”-->“主控板”下选择“掌控板”作为主控。

选择“扩展”-->“传感器”下面的“超声波测距传感器”。

选择“扩展”-->“执行器”下的“舵机模块”。

【温馨提示】需要使用 Mind+ 1.62 版本,之前的版本没有!!!目前新版本尚未发布,可以下载测试版,百度网盘链接:https://pan.baidu.com/s/1_Ij7VMsBO3v8FpXcsKTXYQ 提取码:uehm

因为要用到语音播报,所以需要选中“功能模块”下的“文字朗读”功能。

最后还需要选中“网络服务”下的“MQTT”和“AI 图像识别”两个模块。MQTT 用于在物联网平台记录车辆的出入信息。

 

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

 

Mind+ 内置了一个公用账户,但是公用账户有同时访问限制,因此最好还是使用自己注册的账户。首先登录百度 AI 开放平台,https://ai.baidu.com,点击页面右上角“控制台”,然后“登录”自己的百度账号。录成功后进入控制台页面,点击左边栏“人脸识别”。

在“人脸识别 - 概览”页面中点击“创建应用”。

填写应用名称,勾选需要使用的接口。这里必选的是语音合成、车牌识别。建议把所有的都勾选上。

创建好以后会有 AppID、API Key、Secret Key 三个信息,记录下来,后续编程会用到。

 

步骤4 设置背景

 

在背景库中选择“School”作为舞台背景,假设地点就在学校门口。

 

步骤5 创建变量与列表

 

依据需求,需要创建“车牌”和“时间”两个列表。“车牌”列表用于记录驶入的车牌号,车辆驶出的时候需要将列表中的车牌号清理掉,以便空出车位。“时间”列表用于记录对应车牌的驶入时间。除此以外还需要创建“车位”、“临时车牌号”、“停车费”与“停车时间”四个变量。

 

步骤6 编写主程序

 

依据流程图,在 Mind+ 角色中编写主程序。首先设置百度智能云和 MQTT 的初始化参数。将前面创建百度智能云应用获得的 AppID、API Key、Secret Key 都填入空白处。MQTT 使用 SIoT,运行 SIot 程序后将服务器地址等填入空白处。

当绿旗被点击时,需要初始化一些信息,比如设置空车位数量,清空列表,舵机复位,设置朗读语言等。之后循环检测超声波传感器前面是否有遮挡。如果有遮挡就识别车牌号。若没有车牌号或者没有文字,则跳过,继续检测。依据是否有空位与车牌的出现次数,对驶入和驶出的车辆分别进行不同的操作。如果有车位,则记录车牌信息、车牌时间,语音播报车牌号,将车牌驶入信息发送给 SIoT。然后放行,更新车位数。若没有车位,则语音播报“没车位了”,OLED 显示车位数为 0,指示灯变红色。若车辆驶出,则计算停车时长与停车费,然后将列表中该车牌的信息和驶入时间清理掉,向 SIot 发送驶出信息,接着放行,更新车位数。

 

步骤7 编写自定义函数

 

程序里调用了两个自定义函数:“车位显示”与“停车费用计算”。“车位显示”函数执行的功能是在 OLED 上显示剩余车位数。依据是否有空位,指示灯显示不同的效果。绿灯有空位,红灯没空位。

“停车费用计算”计算停车费用。计算规则是半小时(30 秒)内停车免费,超过半小时(30 秒)部分每小时(分钟)收费 2 元,不足 1 小时(分钟)按 1 小时(分钟)计算。如果按照现实情况,半小时太长了,没法测试。所以我把时间按照秒为单位,方便测试。需要注意的是,停车时间的单位是毫秒(ms),所以要注意转换单位。

 

步骤8 设计外观

 

找一个尺寸合适的纸盒,把所有元器件都放进去,然后挖空塞舵机和超声波。前面还要开窗看屏幕。

最终效果是这样的。道闸直接用纸条固定在舵机上。

 

步骤9 测试运行

 

外观搞好以后就开始综合测试了。运行效果还不错。

SIoT 上也能实时记录车辆出入信息,便于统计查询。

下面是视频演示。视频放不上来,就放链接吧。

https://v.qq.com/x/page/c3044n2fi1q.html

附件 

 

【后记】

1.关于器材选取。我一开始想用红外避障开关的。原先我在 Arduino 上用过,效果还不错。可是拿掌控板和 Micro:bit 测试了一下,貌似都没法用,指示灯常亮。后来发现可能是电压的问题。红外避障开关电压要求 5V。遂放弃该方案,改为超声波传感器。

2.舵机问题。实时模式下竟然没有舵机!!!我甚至研究了半天自己通过引脚控制舵机,但最终失败了。好在后来去下载了测试版 Mind+ 1.6.2,里面三大主控实时模式均添加了舵机。PS,百度网盘下载真慢。新版本 Mind+ 更新了一大波功能,期待正式版早日上线。

3.外观设计问题。我好像挖孔的时候操之过急了,后来显示屏的窗口好像对不上。另外实时模式要接线,摄像头放在上面的话会遮挡视线。这次超声波和摄像头没有在同一垂直方向上,所以检测的时候有些不灵敏。有机会可以用 3D 打印一个专属外壳。

4.关于车牌识别。一开始我用的是文字识别功能。文字识别读出来的车牌号是“浙J一万两千三百四十五”这种形式的,而且还会识别出车牌中间的点“·”。改成车牌识别后准确度就高很多了,而且朗读出来才像真正报车牌号的。

5.超声波测距判定条件。超声波距离判断要加一个不为 0 的条件。不然没有检测到障碍物的时候读数都是 0,然后就一直在识别车牌……

点赞  ( 7 )
收藏
评论(3)
共3条回复 最后由四****卖回复于2020-03-17 17:14
#21****7回复于2020-01-14 18:32:47

6666

0
#3沐****0回复于2020-03-17 14:35:44

棒棒的

0
#4四****卖回复于2020-03-17 17:14:29

棒棒的

0
TOP