本教程视频直播回看:
1 快速上手Ø 准备3399pro开发板一块,键盘,鼠标,显示屏 Ø git clone [url=https://github.com/zr940326/CarLicense.git]https://github.com/zr940326/CarLicense.git Ø 下载,在CarLicense打入补丁 Ø 下载附件到CarLicense目录 Ø unzip rknn_test.zip解压文件 Ø python3 train-license-digits.py train训练生成用于数字和字母识别的pb文件 Ø python3 train-license-province.py train训练生成用于省份识别的pb文件 Ø pb模型训练完成之后,进入rknn_test目录,执行python3 rknn_transfer.py转换成rknn模型
Ø 安装matplotlib - sudo dnf install freetype-devel pkg-config libpng-devel pkg-config
- pip3 install --user matplotlib
Ø 执行python3 rknn_picture.py进行车牌识别测试
识别结果如下:
2 概述一个简单的AI开发sample Ø Github开源的车牌识别,CNN模型,6个省份,10个数字, 24个字母(I和O不属于车牌) Ø 类LeNet-5,两个卷积层,两个池化层,一个全连接层,一个Softmax输出层
3 车牌定位和分割原理
3.1 HSV颜色空间介绍
3.2 原始图像
3.3 边缘提取将图像自适应阈值进行二值化处理 - if blur > 0:
- img = cv2.GaussianBlur(img, (blur, blur), 0)#图片分辨率调整
- oldimg = img
- img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
- kernel = np.ones((20, 20), np.uint8)
- img_opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
- img_opening = cv2.addWeighted(img, 1, img_opening, -1, 0);
- ret, img_thresh = cv2.threshold(img_opening, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
使用canny算子进行边缘提取 - img_edge = cv2.Canny(img_thresh, 100, 200)
3.4 轮廓查找进行闭操作,去除字符间的空洞 进行开操作,去除多余的干扰点 - kernel = np.ones((morphologyr, morphologyc), np.uint8)
- img_edge1 = cv2.morphologyEx(img_edge, cv2.MORPH_CLOSE, kernel)
- img_edge2 = cv2.morphologyEx(img_edge1, cv2.MORPH_OPEN, kernel)
3.5 颜色识别- 统计各种颜色点的数量
- H, S, V = cv2.split(card_img_hsv)
- #筛选对应颜色的图像数据,并进行二值化
- yellow_area = np.where((H > 11) & (H <= 34) & (S > 34), 1, 0)
- green_area = np.where((H > 35) & (H <= 99) & (S > 34), 1, 0)
- blue_area = np.where((H > 99) & (H <= 124) & (S > 34), 1, 0)
- black_area = np.where((H > 0) & (H <= 180) & (S > 0) & (S < 255) & (V > 0) & (V < 46), 1, 0)
- white_area = np.where((H > 0) & (H <= 180) & (S > 0) & (S < 43) & (V > 221) & (V < 225), 1, 0)
-
- #对二值化的数据进行求和,得到点的个数
- yellow = np.sum(yellow_area)
- green = np.sum(green_area)
- blue = np.sum(blue_area)
- black = np.sum(black_area)
- white = np.sum(white_area)
3.6 精确定位精确定位使用的是线扫的方式,统计行和列上对应颜色的数量,数量过少则相应的行或列进行丢弃
3.7 字符分割
4 RKNN使用解析
Rknn运行相关的源码集中在rknn_test下,目录结构如下所示: rknn_test/ |-- lpr_digits_predict.rknn //转换之后用于数字和字母预测的rknn模型 |-- lpr_locate.py //车牌定位分割算法 |-- lpr_province_predict.rknn //转换之后用于省份预测的rknn模型 |-- predict-lpr-pb.py //使用TensorFlow和pb模型进行车牌识别 |-- rknn_picture.py //使用RKNN和rknn模型进行车牌识别 |-- rknn_transfer.py //将pb模型转换成rknn模型 `-- 京Q73Y60.jpg //测试用的图片 RKNN使用部分可以参考中文手势识别的帖子和查看源码,都有比较详细的注释,这里不再赘述。
|