大家好,今天主要和大家分享一下,如何利用QT实现车牌识别的方法。
第一:车牌识别基本简介
很多车牌方案商都有成熟的车牌识别技术,他们是靠这个吃饭的,不开源。当然网上也有一些开 源的车牌识别算法可以参考,但是我们 Qt 教程里不是讲车牌识别算法,因为过于复杂,内容多。 所以本教程也是使用方案商提供的接口来做车牌识别,例程比较简单,百度 AI 接口车牌识别 率非常高,毕竟能让别人花钱的东西是不一样的。下面就让我们使用 Qt 来调用百度 AI 车牌识 别的接口来做个例子吧
车牌识别基本操作如下:
1、介绍百度车牌识别功能申请,及简单介绍调用流程。
2、用 Qt 编写示例程序。流程如下,将本地车牌照片(JPG),发送到百度车牌识别服务 器,然后由百度服务器返回车牌识别结果。
第二:车牌识别产品申请
在浏览器输入“百度车牌识别”搜索,击进去。
点击“技术文档”,其中您需要参阅下图的“技术文档”来查看使用手册。它里面会介绍 API 相关使用方法和领取免费的测试资源方法。
我们只需要领取车牌识别功能资源,根据百度提供的“技术文档”可以知道,在文字识别》 购买指南》免费测试资源,可以看到未实名认证的用户免费领取车牌识别功能为 200 次/月,实 名认证是 1000 次/月。根据自己所需,勺情实名认证。在快速入门》新手操作指引处,我们在 领取资源页面找到车牌识别,勾选“车牌识别”,然后点 0 元领取即可。
点击上图的文字识别控制台(蓝色字体)就可以看跳转到创建文字识别的应用了。如下图。 点击创建应用后。在文字识别应用列表中,默认会把文字识别的应用全部勾选了,如下图。接 着填上相关信息,完成创建即可。
创建完成后,查看应用的 API Key 和 Secret Key。因为下面的程序需要用到。
第三:百度车牌识别API接口
ocr 是笔者编写的车牌识别功能 demo,(ocr 原意光学字符识别即 Optical Character Recognition)。使用此程序需要修改自己应用的 client_id (API Key)和 client_secret( Secret Key)。
1 #ifndef OCR_H 2 #define OCR_H 3 4 #include <QNetworkAccessManager> 5 #include <QNetworkReply> 6 7 #include <QJsonDocument> 8 #include <QJsonParseError> 9 #include <QJsonObject> 10 #include <QJsonArray> 11 #include <QHostInfo> 12 13 #include <QFile> 14 #include <QImage> 15 16 class Ocr : public QObject 17 { 18 Q_OBJECT 19 20 public: 21 Ocr(QObject *parent = nullptr); 22 ~Ocr(); 23 24 /* 请求网络 */ 25 void requestNetwork(QString, QByteArray); 26 27 /* 获取识别结果 */ 28 void getTheResult(QString fileName); 29 void getTheResult(QImage image); 30 31 private: 32 /* 存储获取 tokenUrl 地址 */ 33 QString tokenUrl; 34 35 /* 存储 serverapi 地址 */ 36 QString serverApiUrl; 37 38 /* 最终需要访问 token 的地址 */ 39 QString accessToken; 40 41 /* 获取 token 的接口*/ 42 const QString token_org = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials &client_id=%1&client_secret=%2&"; 43 44 /* 填写网页上申请的 appkey 如 api_key ="g8eBUMSokVB1BHGmgxxxxxx" */ 45 const QString api_key = "填写自己的 APP KEY"; 46 47 /* 填写网页上申请的 APP SECRET 如 secret_key="94dc99566550d87f8fa8ece112xxxxx" */ 48 const QString secret_key = "填写自己的 APP SECRET"; 49 50 /* 百度服务器 API 接口,发送图片可返回识别结果 */ 51 const QString server_api = "https://aip.baidubce.com/rest/2.0/ocr/v1/license_plate?access_token=%1 "; 52 53 /* 网络管理 */ 54 QNetworkAccessManager *networkAccessManager; 55 56 /* 处理 Json 数据 */ 57 QString getJsonValue(QByteArray ba, QString key); 58 59 /* 处理 Json 数据 */ 60 QString getJsonValue(QByteArray ba, QString key1, QString key2); 61 62 public slots: 63 64 /* 准备读取响应返回来的数据 */ 65 void readyReadData(); 66 67 /* 响应完成处理 */ 68 void replyFinished(); 69 70 /* 开始识别 */ 71 void readyToDetection(QString); 72 void readyToDetection(QImage); 73 74 signals: 75 /* 识别到车牌,发送信号 */ 76 void ocrReadyData(QString); 77 78 }; 79 #endif // OCR_H
分析:第 45 行,请填写读者自己在网页上申请的 API Key。本例不提供开放的 API Key,请填写 自已个人申请的! 第 48 行,请填写读者在网页上申请的 Secret Key。本例不提供开放的 Secret Key,请填写 自已个人申请的! 其他地址由来在百度车牌识别的帮助文档,它已经解释的很详细,我们只要阅读它的帮助 文档可知,这里就不详细说了。发送要识别的图片到服务器,就可以返回识别的结果了。
第四:车牌识别综合测试
1、ocr 文件夹为车牌识别的应用程序,主要发送本地图片到百度车牌识别服务器上,然后返 回识别结果。
2、 Headers 文件夹为界面的头文件。
3、 Sources 文件夹为界面的源文件。
我们直接构建工程,注意:运行之前需要把项目下的 image 文件夹拷贝到可执行程序的同 级目录下。此 image 文件夹目录存放的是要识别的车牌图片,若想替换自己的图片,需要把要 识别的图片替换到 image 文件夹下的 carlpr.jpg,名字要相同。
总结,我们使用了百度车牌识别的接口来完成这个车牌识别的过程,在这里我们虽然我们 不能学到车牌识别的算法,但是我们也学会了怎么根据百度 ai 的帮助文档去调用。并不是所有 的车牌识别算法都开源,毕竟也是别人的成果,别人的成果也是要付出的。此例程仅供参考使 用。实际用到项目上请购买相关的车牌识别产品。