第四十六章 车牌识别实验
1)实验平台:正点原子DNK210开发板
2)章节摘自【正点原子】DNK210使用指南 - CanMV版 V1.0
3)购买链接:https://detail.tmall.com/item.htm?&id=782801398750
4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html
5)正点原子官方B站:https://space.bilibili.com/394620890
6)正点原子K210技术交流企鹅群:605557868
在上一章节中,介绍了利用maix.KPU模块实现了通过提取图像中人脸的特征进行人脸识别,本章将继续介绍利用maix.KPU模块实现的车牌识别。通过本章的学习,读者将学习到车牌识别应用在CanMV上的实现。
本章分为如下几个小节:
46.1 maix.KPU模块介绍
46.2 硬件设计
46.3 程序设计
46.4 运行验证
46.1 maix.KPU模块介绍
有关maix.KPU模块的介绍,请见第39.1小节《maix.KPU模块介绍》。
46.2 硬件设计
46.2.1 例程功能
46.2.2 硬件资源
本章实验内容,主要讲解maix.KPU模块的使用,无需关注硬件资源。
46.2.3 原理图
本章实验内容,主要讲解maix.KPU模块的使用,无需关注原理图。
46.3 程序设计
46.3.1 maix.KPU模块介绍
有关maix.KPU模块的介绍,请见第46.1小节《maix.KPU模块介绍》。
46.3.2 程序流程图
图46.3.2.1 人脸识别实验流程图
46.3.3 main.py代码
main.py中的脚本代码如下所示:
import lcd
import sensor
import gc
from maix import KPU
lcd.init()
sensor.reset()
sensor.set_framesize(sensor.QVGA)
sensor.set_pixformat(sensor.RGB565)
sensor.set_hmirror(False)
anchor = (8.30891522166988, 2.75630994889035, 5.18609903718768, 1.7863757404970702, 6.91480529053198,
3.825771881004435, 10.218567655549439, 3.69476690620971, 6.4088204258368195, 2.38813526350986)
names = []
# 构造并初始化车牌检测KPU对象
lp_detecter = KPU()
lp_detecter.load_kmodel('/sd/KPU/lp_detect.kmodel')
lp_detecter.init_yolo2(anchor, anchor_num=len(anchor) // 2, img_w=320, img_h=240, net_w=320, net_h=240, layer_w=20,
layer_h=15, threshold=0.7, nms_value=0.3, classes=len(names))
provinces = ['Wan', 'Hu', 'Jin', 'Yu^', 'Ji', 'Sx', 'Meng', 'Liao', 'Jl', 'Hei', 'Su', 'Zhe', 'Jing', 'Min', 'Gan',
'Lu', 'Yu', 'E^', 'Xiang', 'Yue', 'Gui^', 'Qiong', 'Cuan', 'Gui', 'Yun', 'Zang', 'Shan', 'Gan^', 'Qing', 'Ning',
'Xin']
ads = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
# 构造并初始化车牌识别KPU对象
lp_recognizer = KPU()
lp_recognizer.load_kmodel("/sd/KPU/lp_recog.kmodel")
lp_recognizer.lp_recog_load_weight_data("/sd/KPU/lp_weight.bin")
# 按指定比例扩展矩形框
def extend_box(x, y, w, h, scale):
x1 = int(x - scale * w)
x2 = int(x + w - 1 + scale * w)
y1 = int(y - scale * h)
y2 = int(y + h - 1 + scale * h)
x1 = x1 if x1 > 0 else 0
x2 = x2 if x2 0 else 0
y2 = y2 if y2
可以看到一开始是先初始化了LCD和摄像头,并分别构造并初始化了用于车牌检测和车牌号识别的KPU对象。
然后便是在一个循环中不断地获取摄像头输出的图像,首先将图像进行车牌检测,检测图像中存在的车牌,接着对车牌图像进行车牌号识别,最后将检测到的车牌位置框和识别出的车牌号码在图像上进行绘制,然后在LCD上显示图像。
46.4 运行验证
将DNK210开发板连接CanMV IDE,点击CanMV IDE上的“开始(运行脚本)”按钮后,将摄像头对准车牌,让其采集到车牌图像,可以看到LCD上显示了车牌识别的结果,图像中的被检测到的车牌均被框出,并且显示了车牌对应识别出的车牌号码,如下图所示:
图46.4.1 LCD显示车牌识别实验结果
参与评论
手机查看
返回顶部