項目設計:基于Qt和百度AI的車牌識別系統(嵌入式ARM)

????????基于Qt和百度AI智能云實現的智能車牌識別系統,具體可實現為停車場管理系統、智能計費停車系統…等。

1.系統實現思路及框架

1.1實現思路

???????? 要實現一個車牌識別系統,有多種方法,例如用opencv圖像算法實現,或用第三方算法接口,選擇一種合適的方式。除算法部分外,還需要有用戶交互界面即UI,UI界面的實現也有多種方法,也需要多種方法對比選出適合的一種。

???????? 此外,還有很重要的一項,用哪種語言實現,如C/C++,python,java …等。

1.1.1系統功能需求

????????要做一個項目,首先要明確系統的功能有哪些,再根據功能思考該如何實現。該項目的功能有如下:

  1. 打開攝像頭并能實時顯示畫面;
  2. 車牌識別,能準確識別出攝像頭拍到的車牌號碼;
  3. 識別到車牌后,能顯示車牌號碼,并截下車輛圖片;
  4. 若是車庫或收費系統,還需要錄入/刪除車牌,計費等功能。

關于編譯語言,多種語言均可實現,這里選擇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請求并識別圖片中的車牌號后,再返回結果。

未完待續...

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/717210.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/717210.shtml
英文地址,請注明出處:http://en.pswp.cn/news/717210.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

輸出梯形 C語言

解析:這個輸出圖形的題就是一個找規律加數學計算,我們發現每行比上一行多兩個*,最后一行的*表達式為h(h-1)*2,即3*h-2,那么每一行就是一個先輸出最后一行-當前行*個數個空格&#xf…

pytorch 圖像數據集管理

目錄 1.數據集的管理說明 2.數據集Dataset類說明 3.圖像分類常用的類 ImageFolder 1.數據集的管理說明 pytorch使用Dataset來管理訓練和測試數據集,前文說過 torchvision.datasets.MNIST 這些 torchvision.datasets里面的數據集都是繼承Dataset而來&#xff0c…

【Qt】QTextEdit/QPlainTextEdit 實現 Tab 鍵多行縮進與反縮進

【Qt】QTextEdit/QPlainTextEdit 實現 Tab 鍵多行縮進與反縮進 文章目錄 I - 主要原理II - 代碼實現2.1 - 自定義類2.2 - 實現 Tab 縮進2.3 - 實現反縮進III - 參考鏈接I - 主要原理 由于 QTextEdit 和 QPlainTextEdit ,都無法實現多行選中縮進與反縮進,選中多行后,按下縮進…

[Redis]——Redis命令手冊set、list、sortedset

🌳List類型常見命令 LPUSH / RPUSH [KEY] [element] …… 向列表左側或者右側插入一個或多個元素 LPOP / RPOP [key] 刪除左邊或者右邊第一個元素 LRANGE [key] start end 返回索引start到end的元素(索引從0開始) BLPOP / BRPOP [key] [等…

【C++】類的默認成員函數(上)

🔥博客主頁: 小羊失眠啦. 🎥系列專欄:《C語言》 《數據結構》 《C》 《Linux》 《Cpolar》 ??感謝大家點贊👍收藏?評論?? 文章目錄 一、默認成員函數二、構造函數構造函數的概念及特性 三、析構函數析構函數的特性…

續簡單學生管理系統、包裝類--day18

Day18 一、刪除的思考題 思考題:刪除功能可以省略第一步嗎?不可以 有第一步判斷學生信息合法性,如果信息不合法會直接結束返回 如果沒有第一步,將會在第二步判斷是否有該學生query循環匹配查找,數據量大情況&#xff…

藍橋杯倒計時 43天 - 前綴和,單調棧

最大數組和 算法思路&#xff1a;利用前綴和化簡 for 循環將 n^2 簡化成 nn&#xff0c;以空間換時間。枚舉每個 m&#xff0c;m是刪除最小兩個數&#xff0c;那k-m就是刪除最大數&#xff0c;m<k&#xff0c;求和最大的值。暴力就是枚舉 m-O(n)&#xff0c;計算前 n-(k-m)的…

PCSA時鐘控制集成之時鐘門控級別

這一部分描述了&#xff1a; ? 時鐘門控的級別。 ? 實現最大效果的時鐘門位置。 ? 實現有效和高效時鐘門控的集成方法。 時鐘樹是由時鐘緩沖器構建的&#xff0c;這些緩沖器在時鐘源&#xff08;時鐘輸入或PLL&#xff09;與時鐘終端&#xff08;寄存器或RAM&#xff09…

ULN2003(COM的作用)

單路內部電路原理圖 三極管多級放大電路&#xff0c;最大可達到500ma&#xff1b; 典型應用&#xff1a; ULN2003屬于灌電流驅動方式&#xff1b;輸入與輸出電平反向&#xff0c;下拉4K電阻&#xff0c;為解決單片機上電IO瞬間不穩定&#xff1b; COM端 1.可懸空&#xff1a…

Java面題總結7

spring事務什么時候會失效 1:發生自調用&#xff0c;類里面使用this調用本類的方法&#xff08;&#xff09;此時這個this對象不是代理類&#xff0c;而是UserService對象本身 2&#xff1a;方法不是public 3&#xff1a;數據庫不支持事務 4&#xff1a;沒有被spring管理 …

git標簽操作

一.標簽管理 1.理解標簽 標簽 tag &#xff0c;可以簡單的理解為是對某次 commit 的?個標識&#xff0c;相當于起了?個別名,當我們需要回退到某個重要版本時&#xff0c;直接使?標簽就能很快定位到 2.創建標簽 ?先&#xff0c;切換到需要打標簽的分?上,然后&#xf…

經典目標檢測網絡Yolo——原理部分

目標檢測問題 分為兩個子問題: 找到圖片中哪些位置、哪些區域含有目標對象識別這些區域中的目標對象是什么基于CNN的目標檢測算法能夠很好的解決第二個問題,在一張圖片僅含一個對象,且該對象占據了整張圖片絕大部分面積時,基于CNN的對象識別算法具有很高的準確率。 一種定…

操作系統(1)——學習導論(Ⅱ)

目錄 小程一言專欄鏈接: [link](http://t.csdnimg.cn/6grrU) 學習導論&#xff08;Ⅱ&#xff09;操作系統-賞前人佳作大型操作系統大型操作系統的一些特點和功能舉例 服務器操作系統服務器操作系統特點和功能舉例 多處理器操作系統舉例 個人計算機操作系統舉例 掌上計算機操作…

什么是ACID屬性。在MySQL中,如何使用事務?給出一個使用事務的示例,并解釋其工作原理。

解釋什么是ACID屬性 ACID是數據庫事務正確執行的四個基本要素的縮寫&#xff0c;包括原子性&#xff08;Atomicity&#xff09;、一致性&#xff08;Consistency&#xff09;、隔離性&#xff08;Isolation&#xff09;和持久性&#xff08;Durability&#xff09;。這四個屬性…

設計模式:什么是設計模式?①

一、什么是設計模式&#xff1f; 1. 是一類程序設計思想 2. 是在大量實踐過程中摸索總結出的標準經驗提煉 3. 具有多樣性和豐富性&#xff0c;不同情況應用的思想不同 二、設計模式的好處 1. 代碼生產力和效率的提升 2. 讓代碼表現更為規整&#xff0c;簡潔。閱讀維護管理的成本…

【競技寶】DOTA2-夢幻聯賽S22:AR命懸一線 XG確定晉級淘汰賽

北京時間2024年2月28日&#xff0c;DOTA2夢幻聯賽S22的比賽在昨日進入小組賽第三個比賽日&#xff0c;本次夢幻聯賽共有AR、XG、IG三支中國區的隊伍參賽&#xff0c;那么經過三日激烈的比賽之后&#xff0c;目前三支隊伍的積分情況以及晉級形勢如何呢&#xff1f; XG XG是小組…

貪心(基礎算法)--- 區間選點

905. 區間選點 思路 &#xff08;貪心&#xff09;O(nlogn) 根據右端點排序 將區間按右端點排序 遍歷區間&#xff0c;如果當前區間左端點不包含在前一個區間中&#xff0c;則選取新區間&#xff0c;所選點個數加1&#xff0c;更新當前區間右端點。如果包含&#xff0c;則跳…

常見的算法

查找算法 基本查找 package MyApi.search;public class a01BasicSearchdemo01 {public static void main(String[] args) { int[] arr{131,127,147,81,103,23,7,79}; int number82;System.out.println(BasicSearch(arr,number));}public static boolean BasicSearch(int[] ar…

Java二叉樹(1)

&#x1f435;本篇文章將對二叉樹的相關概念、性質和遍歷等知識進行講解 一、什么是樹 在講二叉樹之前&#xff0c;先了解一下什么是樹&#xff1a;樹是一種非線性結構&#xff0c;其由許多節點和子節點組成&#xff0c;整體形狀如一顆倒掛的樹&#xff0c;比如下圖&#xff1…

給nginx部署https及自簽名ssl證書

一、生成服務器root證書 openssl genrsa -out root.key 2048 openssl req -new -key root.key -out root.csr#Country Name (2 letter code) [XX]:---> CN#Country Name (2 letter code) [XX]:---> CN#State or Province Name (full name) []:---> Shanghai#Locality…