Toybrick

人工智能开发系列(2) 车牌识别开发与实现

troy

版主

积分
2346
发表于 2019-2-13 16:43:03    查看: 84014|回复: 30 | [复制链接]    打印 | 显示全部楼层

本教程视频直播回看:
1 快速上手
Ø 准备3399pro开发板一块,键盘,鼠标,显示屏
Ø 下载,在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
  1. sudo dnf install freetype-devel pkg-config libpng-devel pkg-config
  2. pip3 install --user matplotlib
复制代码
Ø 执行python3 rknn_picture.py进行车牌识别测试

识别结果如下:

2 概述
一个简单的AI开发sample
Ø Github开源的车牌识别,CNN模型,6个省份,10个数字, 24个字母(IO不属于车牌)
Ø LeNet-5,两个卷积层,两个池化层,一个全连接层,一个Softmax输出层


3 车牌定位和分割原理

3.1 HSV颜色空间介绍

3.2 原始图像

3.3 边缘提取
将图像自适应阈值进行二值化处理
  1. if blur > 0:
  2.    img = cv2.GaussianBlur(img, (blur, blur), 0)#图片分辨率调整
  3. oldimg = img
  4. img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  5. kernel = np.ones((20, 20), np.uint8)
  6. img_opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
  7. img_opening = cv2.addWeighted(img, 1, img_opening, -1, 0);
  8. ret, img_thresh = cv2.threshold(img_opening, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
复制代码

使用canny算子进行边缘提取
  1. img_edge = cv2.Canny(img_thresh, 100, 200)
复制代码



3.4 轮廓查找
进行闭操作,去除字符间的空洞
进行开操作,去除多余的干扰点
  1. kernel = np.ones((morphologyr, morphologyc), np.uint8)

  2. img_edge1 = cv2.morphologyEx(img_edge, cv2.MORPH_CLOSE, kernel)

  3. img_edge2 = cv2.morphologyEx(img_edge1, cv2.MORPH_OPEN, kernel)
复制代码


3.5 颜色识别
  1. 统计各种颜色点的数量

  2. H, S, V = cv2.split(card_img_hsv)

  3. #筛选对应颜色的图像数据,并进行二值化

  4. yellow_area = np.where((H > 11) & (H <= 34) & (S > 34), 1, 0)

  5. green_area = np.where((H > 35) & (H <= 99) & (S > 34), 1, 0)

  6. blue_area = np.where((H > 99) & (H <= 124) & (S > 34), 1, 0)

  7. black_area = np.where((H > 0) & (H <= 180) & (S > 0) & (S < 255) & (V > 0) & (V < 46), 1, 0)

  8. white_area = np.where((H > 0) & (H <= 180) & (S > 0) & (S < 43) & (V > 221) & (V < 225), 1, 0)



  9. #对二值化的数据进行求和,得到点的个数

  10. yellow = np.sum(yellow_area)

  11. green = np.sum(green_area)

  12. blue = np.sum(blue_area)

  13. black = np.sum(black_area)

  14. 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使用部分可以参考中文手势识别的帖子和查看源码,都有比较详细的注释,这里不再赘述。






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

qiaoqiang126

中级会员

积分
225
发表于 2019-2-14 15:25:44 | 显示全部楼层
整个系统在UBUNTU上可以跑通,但是在3399pro Linux下面模型可以转换成.rknn  运行rknn_picture   报错
OSError: /usr/local/lib64/python3.6/site-packages/rknn/api/lib/simulator/librknn_runtime.so: cannot open shared object file: No such file or directory
so文件是存在的,这是怎么回事?
回复

使用道具 举报

troy

版主

积分
2346
 楼主| 发表于 2019-2-14 17:04:56 | 显示全部楼层
qiaoqiang126 发表于 2019-2-14 15:25
整个系统在UBUNTU上可以跑通,但是在3399pro Linux下面模型可以转换成.rknn  运行rknn_picture   报错
OSEr ...

可以在init_runtime里面加入参数init_runtime(host='rk3399pro'),你的ToolKit版本应该是0.9.7.0,需要指定host为rk3399pro才会运行在npu之上。UBUNTU可以,是因为运行在ToolKit的模拟器上。
我的ToolKit版本是0.9.7.1 init_runtime已经取消了host参数,会自动判断。
回复

使用道具 举报

qiaoqiang126

中级会员

积分
225
发表于 2019-2-15 09:28:33 | 显示全部楼层
troy 发表于 2019-2-14 17:04
可以在init_runtime里面加入参数init_runtime(host='rk3399pro'),你的ToolKit版本应该是0.9.7.0,需要指 ...

3399pro上面怎么安装matplotlib呢?rknn_picture里面有matplotlib
回复

使用道具 举报

chuyee

中级会员

积分
352
发表于 2019-2-15 09:48:18 | 显示全部楼层
qiaoqiang126 发表于 2019-2-15 09:28
3399pro上面怎么安装matplotlib呢?rknn_picture里面有matplotlib

pip3 install
回复

使用道具 举报

chuyee

中级会员

积分
352
发表于 2019-2-15 10:49:01 | 显示全部楼层
Tested. The demo works great on TB-rk3300pro board with Linux rknn-toolkit-v0.9.8.
回复

使用道具 举报

qiaoqiang126

中级会员

积分
225
发表于 2019-2-15 11:42:22 | 显示全部楼层
pip3 install matplotlib 的时候
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-iqeppldw/matplotlib/
回复

使用道具 举报

chuyee

中级会员

积分
352
发表于 2019-2-15 15:24:13 | 显示全部楼层
qiaoqiang126 发表于 2019-2-15 11:42
pip3 install matplotlib 的时候
Command "python setup.py egg_info" failed with error code 1 in /tmp/p ...

what's the exact error? If it's related to memory, I'd suggest to create a swap file.
回复

使用道具 举报

15875649641

新手上路

积分
47
发表于 2019-5-24 08:31:49 | 显示全部楼层
版主,请问有没有测试过识别一张图片大概需要多长时间呢?
我这边有个需求是对多路高清摄像头进行RKNN识别,不知道实时性能做到多少?
回复

使用道具 举报

15875649641

新手上路

积分
47
发表于 2019-5-24 08:32:07 | 显示全部楼层
版主,请问有没有测试过识别一张图片大概需要多长时间呢?
我这边有个需求是对多路高清摄像头进行RKNN识别,不知道实时性能做到多少?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

产品中心 购买渠道 开源社区 Wiki教程 资料下载 关于Toybrick


快速回复 返回顶部 返回列表