????????基于Qt和百度AI智能云實現的智能車牌識別系統,具體可實現為停車場管理系統、智能計費停車系統…等。
1.系統實現思路及框架
1.1實現思路
???????? 要實現一個車牌識別系統,有多種方法,例如用opencv圖像算法實現,或用第三方算法接口,選擇一種合適的方式。除算法部分外,還需要有用戶交互界面即UI,UI界面的實現也有多種方法,也需要多種方法對比選出適合的一種。
???????? 此外,還有很重要的一項,用哪種語言實現,如C/C++,python,java …等。
1.1.1系統功能需求
????????要做一個項目,首先要明確系統的功能有哪些,再根據功能思考該如何實現。該項目的功能有如下:
- 打開攝像頭并能實時顯示畫面;
- 車牌識別,能準確識別出攝像頭拍到的車牌號碼;
- 識別到車牌后,能顯示車牌號碼,并截下車輛圖片;
- 若是車庫或收費系統,還需要錄入/刪除車牌,計費等功能。
關于編譯語言,多種語言均可實現,這里選擇C/C++。
1.1.2界面實現
???????? UI界面的實現,本系統選擇最常用的QT庫,本系統的所有UI界面都能實現,包括各種界面顯示,如視頻顯示,文字/圖像等,還有用戶交互的部分,如按鈕,輸入框等操作控件。此外,QT庫學習入門快、網上資料教程多等也是選擇的原因之一。
1.1.3車牌識別實現
車牌識別,不選擇算法復雜的opencv,而是選用簡單調用接口的百度AI平臺。用百度AI平臺,具體算法方面不用關心,只需要按照其訪問要求來對接即可,即發送的內容要按照百度AI定義的協議要求來組織,具體要查看百度AI官方文檔,后續再具體講解。
1.2系統框架
1.2.1硬件框架
????????系統的硬件主要分為兩大部分:PC主機和ARM開發板,即需要一塊ARM-Linux開發板(帶屏幕),一個攝像頭,一臺PC主機,一根網線(開發板與PC主機連接)。
硬件框架
1.2.2軟件框架
系統的軟件框架主要分為三大部分:前臺(ARM開發板)、后臺(PC主機)、百度智能云。
前臺(ARM開發板)主要功能是采集圖像、信息顯示等;后臺(PC主機,ubuntu)主要是車牌管理(錄入/刪除車牌等)、對接百度智能云平臺;百度智能云主要是識別車牌信息。
2.系統開發環境搭建
PC主機的運行環境是在windows上運行的虛擬機ubuntu系統。
2.1 Qt開發環境
界面采用QT進行開發,主要安裝qt creator即可。
qt creator安裝程序是圖形化界面的,像在windows上安裝軟件一樣,比較簡單,不再累述。
2.2百度AI開發環境
與百度AI的通信方式是https,因此,百度AI相關的環境主要有OpenSSL庫、Curl庫和Json庫的安裝。
2.2.1 OpenSSL庫安裝
下載openssl庫:/source/index.html (openssl.org)
實驗版本:openssl-1.1.1s.tar.gz
將openssl庫源碼包放到ubuntu下,解壓出來,并進入解壓出來的目錄。
配置編譯選項:主要配置安裝路徑
$ ./config –prefix=/usr/local/openssl
編譯:
$ make
安裝:
$ sudo make install
安裝完成,可在安裝路徑下見到openssl
2.2.2?Curl庫安裝
下載curl源碼包:curl-7.88.0.tar.gz
下載地址:curl downloads
亦可用命令下載:
$ wget https://curl.se/download/curl-7.88.0.tar.gz
將源碼包放入ubuntu,解壓出來,并進入解壓出來的目錄:
配置編譯選項:指定安裝在/usr/local/curl目錄,指定openssl的路徑,
$ ./configure --prefix=/usr/local/curl --with-ssl=/usr/local/openssl
編譯
$ make
安裝
$ sudo make install
2.2.3 Jsoncpp安裝
下載jsoncpp庫:jsoncpp-master.tar.gz
open-source-parsers/jsoncpp: A C++ library for interacting with JSON. (github.com)
把源碼包放到ubuntu上,解壓出來并進入解壓出來的目錄:
執行amalgamate.py腳本,會在當前目錄生成dist目錄:
dist目錄就是我們需要的源碼文件,共有3個文件:
jsoncpp.cpp、json-forwards.h、json.h
將其包含在我們的工程源碼一起編譯即可使用json接口了。
使用時,只需包含頭文件json.h
#include "json/json.h"
3.系統實現步驟
????????整個系統的實現,分功能分模塊逐個實現,由簡入深,先表面再內部,就是說,先做界面和圖像采集及顯示的,然后調前臺和后臺之間的通信,最后再實現百度AI算法接口的調用。
3.1 Qt界面
3.1.1 界面顯示及而已
界面顯示及布局可直接在Qt creator上添加想要的控件及設定其坐標位置即可,十分的直觀快捷。
前臺界面設計如下:
注:中間大圖區域顯示攝像頭畫面,右側顯示識別出來的車牌號信息。
后臺界面設計如下:
注:中間大圖區域顯示攝像頭畫面或出入記錄表格,右側為識別結果及車牌管理相關功能。
3.1.2 攝像頭圖像采集及顯示
對攝像頭的驅動,采用的是linux系統的V4L2框架,這是linux系統內部的,不需要我們來實現,只管調用即可。
V4L2流程:申請若干個buffer,組成一個隊列,每個buffer用于存放一幀圖像,當攝像頭有圖像時便會填充到到這些buffer中,要讀取數據時實際是取出一個已填充圖像的buffer,讀完圖像又將該buffer塞入隊列中。
采集到圖像后,將送至屏幕顯示以及傳輸給后臺并由后臺發送到百度AI平臺識別,百度AI再返回識別結果,這樣圖像的流程就走完了。
圖像流程
3.2 前后臺通信
前后臺通信采用的是socket套接字TCP連接,一切數據交互都是基于TCP連接的,后臺為服務器,前臺為客戶端。
3.3?百度AI調用
3.3.1 創建百度設備
首先要在百度智能云官網上創建自己的賬號,然后創建一個人車牌識別的項目/設備,具體操作請自行了解,這里不再展開。
3.3.2 百度AI算法的調用
百度AI算法的調用是基于https協議的,向百度AI服務器使用post發送請求,帶上驗證信息、圖片數據等,百度AI處理post請求并識別圖片中的車牌號后,再返回結果。
未完待續...