野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1246|回复: 1

[经验\资料] 野火[鲁班猫]卡片电脑创意氛围赛 (第二期) +OpenCV车牌识别

[复制链接]
发表于 2023-11-25 16:26:04 | 显示全部楼层 |阅读模式
本帖最后由 流行科技 于 2023-11-25 16:37 编辑

一.前言
本次比赛我选择了LubanCat1_N(4+32G)WIFI的板子进行测试的。为啥要做这样一个事,首先是学习下opencv的开发,使用鲁班猫板子会更加的贴近实际,实际到项目中可能就是一个小的ARM板进行识别。其次车牌识别目前搞的人很多有很多前面的经验。本次还是以这款卡片电脑为主,很多都是在卡片电脑上完成的,同时其可以安装一些编译软件,让软件运行过程更加的直观显示出来,当然其中也会有些性能上的问题,需要进行深层次的优化。
二.实施
1.说明
首先是简要说下,目前应该是有多种技术可以在这款板子上进行图像识别,最新的应该是通过调用芯片自带的NPU进行图像学习识别操作。这个尝试了,未成功。其次python+opencv是比较方便的一种,还有就是c++方式调用,本次主要使用的一种。还可以通过调用外部的API进行图像传输后,交给服务器进行识别返回。想来还是通过本地识别会好点。目前其RKNN应该是完全可以进行的,不过现在学习感觉资料还不是很多。
2.OPENCV库交叉编译
具体步骤:目前首先还是要确定opencv交叉编译。
【鲁班猫创意大赛2期】
https://www.firebbs.cn/forum.php?mod=viewthread&tid=35889&fromuid=35390
(出处: 野火电子论坛)
我是写了一个分享的,通过上位机交叉编译OPENCV到板子上使用,其实板子上也可以编译,但过程应该是比较慢的了。
完成这步后我们得到安装文件。
野火论坛202311251617114641..png
里面就是lib库和头文件。有些需要编译的还是要自己去添加构建的。本次还选择了QT里开发,在QT里开发,就是可以通过图像转化显示出图像,不然其GTK支持的原因,很多窗口不能显示。
QT安装只需要命令既可:
  1. # 安装qt核心库# Debian10是安装的是Qt5.11.3,ubuntu20.04安装Qt5.12.8, Debian11默认安装Qt5.15.2

  2. sudo apt-get install qt5-default

  3. # 或者是使用下面命令(如果是Debian11系统)

  4. sudo apt-get install  qtbase5-dev qt5-qmake

  5. # 安装一些Qt例程

  6. sudo apt-get install qtbase5-examples



  7. # 通过apt安装Qt Creator工具,Debian10系统默认安装

  8. sudo apt install qtcreator

  9. # 下载安装一些Qt工具

  10. sudo apt install qttools5-dev-tools

复制代码

一个是基础的QT5的包,一个是桌面的qt开发工具。
野火论坛202311251617352055..png
打开qtcreator开发工具,我们安装QT55.11.3还是比较新的版本。
  1. INCLUDEPATH += $$PWD/opencv3.4.5/include



  2. LIBS += $$PWD/../../lib/libopencv_*.so

  3. -lpthread
复制代码

当我们需要添加opencv库的时候,在pro下添加上这两句话既可。
野火论坛202311251617519551..png
这样就能找到我们的库了。
3. EasyPR
这个是很老的一个开源项目了,但是不妨碍我们零基础去学习他。里面的文档介绍,包括网上现在很多文章也都有介绍其怎么使用,还有就是怎么添加自己训练模型。
我们本着拿来就用的理念。直接下载源码,然后添加到我们的工程中。
野火论坛202311251618051963..png
里面其实已经删除了很多的东西了。我们要的其实就是除了test中的东西,我们先全部加入到我们工程中。
野火论坛202311251618141092..png
源码中多了这些东西。然后还需要修改一些地方,不然调用会出错。
野火论坛202311251618248377..png
首先是这个config.h文件中的CV版本,我们是高于openCV3.2直接定义下就行了。
野火论坛202311251618335775..png
还有就是这个模型的地址要正确不然运行也会报错。
然后就是调用下测试,编写了一个简单QT程序。
野火论坛202311251618434153..png
在代码中是又调用案例的,所以我们只需要弄下界面,然后配合下即可。
野火论坛202311251618524342..png
界面加点控件显示。
  1. void MainWindow::on_pb_recognition_clicked()

  2. {

  3.     CPlateRecognize pr;



  4.     pr.setDetectType(PR_DETECT_COLOR|PR_DETECT_CMSER);



  5.     vector<CPlate> plateVec;



  6.     cv::String fileName1 = fileName.toLocal8Bit().toStdString();



  7.     Mat src = imread(fileName1);

  8.     pr.setResultShow(false);





  9.     int result = pr.plateRecognize(src,plateVec);

  10.     qDebug() << "result:"<<result;

  11.     pr.getDetectShow();

  12.     CPlate plate = plateVec.at(0);

  13.     Mat plateMat = plate.getPlateMat();

  14.     String license = plate.getPlateStr();

  15.     QString lice1 = QString::fromLocal8Bit(license.c_str());



  16.     cvtColor( plateMat, plateMat, CV_BGR2RGB );

  17.     QImage qPlateMat = QImage(plateMat.data,plateMat.cols,plateMat.rows,plateMat.step,QImage::Format_RGB888);



  18.     ui->lb_PlateMat->setPixmap(QPixmap::fromImage(qPlateMat));

  19.     ui->lb_PlatNuber->setText(lice1);



  20.     qDebug() << lice1;



  21. }



  22. void MainWindow::on_pb_open_clicked()

  23. {

  24.     fileName = QFileDialog::getOpenFileName (

  25.                 this,

  26.                 "Open Input File",

  27.                 QDir::currentPath(),

  28.     "Video((*.jpg)");//??????????????????*

  29.     if (QFile::exists(fileName))

  30.     {

  31.         QImage qimg;

  32.         qimg.load(fileName);



  33.         ui->lb_image->setPixmap(QPixmap::fromImage(qimg));

  34.     }





  35. }
复制代码

野火论坛202311251619177072..png
然后即可打开显示了。测试中发现其定位还是很准确的,虽然有时候识别不出,准确性上来说还是很准的,后期可以试着往视频识别上做。
4. 其他方式识别车牌
这里还有一种基于模板匹配的案例,这里只做为参考,因为识别速度上不太好,但是我认为作为学习来说还是很足够了。
野火论坛202311251619251653..png
其先定位车牌,然后进行一些CV处理,最后进行字符分割,然后进行模板匹配,这里最后一部是需要大量数据进行比较的,所以比较耗时,而且不太准确。
野火论坛202311251619335673..png
要准备很多的字符,每个字符下还要不同样的,然后进行匹配。
当然现在最推荐的还是用RKNN进行识别了,一个是交到专门的处理器上做可以减少CPU占用,一个是这也是发展到现在的新的技术方向。进行图形训练,然后再进行 识别。
三.演示视频
https://www.bilibili.com/video/BV1TN4y1U7i9/?vd_source=897ad85d1724aa2677a99c9a337cf2a5
四.总结
本次大赛感谢主办方野火提供板子支持,板子资料也是很丰富,性能也是很好的。对于AI识别那块RKNN这块还是要多多学习,争取在后期中用上。当然这款板子性能好,不只在这一块上,其他的方向使用也是没问题的,后续可以使用python+opencv这样开发,省去交叉编译步骤,而且python也是比较容易上手的。

回复

使用道具 举报

发表于 2023-11-27 08:40:32 | 显示全部楼层
真不错   
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-22 12:16 , Processed in 0.123941 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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