目前在许多的公共场所,如商场、学校、小区等都已采用车牌的自动识别管理,那如何自己也来实现这样的管理呢?
其实,较好的选择就是选取K230D-Zero开发板,因为它本身就具体了这样的基础,提供相应的开发基础和功能扩展能力,故使用它可以达到预期的目标。
所谓“车牌识别”,其实就是先将图像中的车牌位置找出来并加以标示,然后再识别出车牌的内容,其识别流程如图1所示。

图1 识别流程
车牌识别的程序文件为:CanMV IDE\CanMV\sdcard\examples\05-AI-Demo\licence_det_rec.py
在对车牌进行识别时,其场景如图2所示。待识别的车牌在被拍摄后,由显示屏来给摄像头提供图像的显示场所。由帧缓冲区窗口可发现,程序已用绿色矩形框标示出了车牌所在的区域。

图2 标示车牌位置
识别处理的主循环程序为:
while True:
with ScopedTiming("total",1):
img=pl.get_frame() # 获取当前帧
det_res,rec_res=lr.run(img) # 推理当前帧
lr.draw_result(pl,det_res,rec_res) # 绘制当前帧推理结果
pl.show_image() # 展示推理结果
gc.collect()
lr.licence_det.deinit()
lr.licence_rec.deinit()
pl.destroy()
此外,我们从下面的数组定义,也可看出其输出信息的范围,其内容为:
self.dict_rec = ["挂", "使", "领", "澳", "港", "皖", "沪", "津", "渝", "冀", "晋", "蒙", "辽", "吉", "黑", "苏", "浙", "京", "闽", "赣", "鲁", "豫", "鄂", "湘", "粤", "桂", "琼", "川", "贵", "云", "藏", "陕", "甘", "青", "宁", "新", "警", "学", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "_", "-"]
在完成识别处理的情况下,其识别结果会以橙色的字体标识出来,见图3所示。

图3 车牌识别
此外,由串行终端窗口还可观察到相应的输出信息,其具体形式如下:
[array([360.6, 224.3672, 87.59999, 215.2547, 95.24998, 132.8625, 367.2, 142.0383], dtype=float32), array([426.0, 345.9305, 251.5125, 339.5812, 258.075, 285.8766, 432.825, 292.2679], dtype=float32)] ['\u6d25HA0009', '\u6d25HA0009']
11.48614
其中“6d25HA0009”为牌照内容,汉字编码采用Unicode码,即牌照为“津HA0009”。
若进行计费管理,可在RTC计时的配合下来实现。即:将第一次识别到该车辆的时间作为进入时间,将第二次识别到的时间作为驶出时间,通过计算时间差*计时单价即可算出收费值。