專案共享 基於ELF 1開發板的車牌識別系統

Mondo 科技 更新 2024-03-06

選擇ELFBOARD ELF 1開發板作為核心硬體平台,並利用連線USB介面的攝像頭採集和識別車牌資訊。 一旦車牌識別成功,系統將觸發綠燈指示,並將識別出的車牌號實時傳輸到手機應用程式。 在車牌識別技術方面,提供OCR(Optical Character Recognition)服務,確保準確高效地讀取車牌資料。 同時,該移動應用程式使用J**a程式語言開發,可以輕鬆接收和檢視識別結果。

車牌識別的實現方法。

一、車牌識別平台介紹

本次車牌識別的實現方案是通過智慧型雲平台實現的,具體實現方法如下:進入智慧型雲網頁->選擇文字識別-車牌識別

進入車牌識別頁面後,您可以通過閱讀技術文件來學習如何使用車牌識別。

2. 安裝 OpenSSL

由於智慧型雲是從libcurl通過HTTPS訪問的,而HTTPS訪問需要OpenSSL支援,所以首先編譯OpenSSL。

wget xvf openssl-1.1.1a.tar.gz./configmakesudo make install
3. 安裝 curl

wget -xjf curl-7.71.1.tar.bz2cd curl-7.71.1/./configure --prefix=$pwd/_install_arm --host=arm-linux-gnueabihf --with-openssl#.configure --prefix=$pwd install gcc --with-openssl 為了在本地執行,使用 gcc 編譯,make make install
4.車牌識別流程在執行此步驟之前,請閱讀如何使用智慧型雲車牌識別)。

在本地實現之前,可以通過平台提供的**驗證方式進行驗證,如下圖所示,需要輸入訪問令牌(通過閱讀文件就知道如何獲取)和旁邊乙個車牌的base64編碼字串進行**識別。

實現車牌識別的本地方法需要將識別**複製到本地計算機,並且需要實現將**轉換為base64編碼的功能,具體如下:

#include #include #include #include #include #include #include #include #include #include #include inline size_t onwritedata(void * buffer, size_t size, size_t nmemb, void * userp) std::string getfilebase64content(const char * path, bool urlencoded=false) }file_read.close();if(i) if (urlencoded) ret = curl_escape(ret.c_str(),ret.length())return ret;} std::string performcurlrequest(const char *pic_path, const std::string &token) if (curl) curl_easy_cleanup(curl); free(web_curl); return result;} int main(int argc, char *ar**)return 0;}
彙編

gcc democar.c -i ./curl-7.71.1/_install_gcc/include/ -l ./curl-7.71.1/_install_gcc/lib/ -l curl
編譯完成後,通過SCP將檔案拷貝到ELF 1開發板執行,這樣本地車牌**可以通過HTTPS傳送到智慧型雲進行識別,並返回識別結果,完成車牌識別。

注意:在此處執行時,可能會出現 CA 證書驗證失敗。

root@elf1:~# ./a.outok:60
只需執行日期 --s="2024-01-12 21:40:00"只需正確設定時間即可。

第二移植 mjpg-streamer

在上一章中,實現了對本地車牌**的識別,所以如果需要通過攝像頭識別車牌,需要使用MJPG-streamer來實現,使用USB攝像頭進行識別。

這裡就不解釋了mjpg-streamer是什麼,大家可以自己檢視一下,這裡只是介紹一下將mjpg-streamer移植到elf 1開發板的過程。

1.編譯jpeg(1) *JPEG原始碼存檔**:IJGorg/files/(2) tar -xvf jpegsrc.v8b.tar.gz(3) 來編譯配置。

cd jpeg-8d./configure --prefix=$pwd/_install --host=arm-linux-gnueabihfmake -j8make install
2. 編譯 mjpg-streamer1) **mjpg-streamer 原始碼包。

*:sourceforge.net/projects/mjpg-streamer/

svn checkout mjpg-streamer-code
(2)tar -xvf mjpg-streamer.tar.gz(3) 配置。

cd mjpg-streamer-code/mjpg-streamer/plugins/input_uvcvim makefile
開啟生成檔案並對其進行修改,如下所示

4)編譯mjpg-streamer,因為mjpg-streamer預設是用gcc編譯的,所以需要先把gcc改成自己的交叉編譯工具,先安裝你需要的庫。

sudo apt install graphicsmagick-imagemagick-compatsudo apt install imagemagick-6.q16sudo apt install imagemagick-6.q16hdri
有兩種方法可以更改 GCC:方法1:

cd ~/mjpg-streamer-code/mjpg-streamermake cc=arm-linux-gnueabihf-gcc
方法2:

find -name "makefile" -exec sed -i "s/cc = gcc/cc = arm-linux-gnueabihf-gcc/g" {}grep "arm-linux-gnueabihf-gcc" * nr
搜尋當前目錄及其子目錄下的所有 makefile 檔案,並將 makefile 中的 cc 變數設定為 arm-linux-gnueabihf-gcc。 (注意:。arm-linux-gnueabihf-gcc 需要替換為自己的交叉編譯工具。 )

如下圖所示,所有目錄下 makefile 中的 cc 等於交叉編譯工具集。

完成上述步驟後,編譯 **:

make -j8
編譯完成後,將生成以下 **:

so:動態庫。

MJPG streamer:提供可執行命令。

www:網路攝像頭輸出的網頁。

5) 移植到 ELF 1 開發板。

scp -r mjpg-streamer/ [email protected]:~
(6)驗證功能。

登入 ELF 1 開發板並執行 MJPG 流處理器

cd mjpg-streamerexport ld_library_path=$ld_library_path:~/mjpg-streamer ./mjpg_streamer

當開發板執行MJPG流光成功後,在瀏覽器中輸入開發板的IP位址和埠號8080,例如我的是192168.0.在106:8080,點選流選項,在相機中顯示實時畫面,如下圖所示。

這樣,mjpg流光的移植就完成了,可以使用mjpg流光來實現一些具體的要求,比如開啟攝像頭**:

mjpg_streamer -i "input_uvc.so -d /dev/video2 -f 30 -q 90 -n" -o "output_http.so -w /opt/www"
擷取相機的螢幕截圖:

wget -o ./1.jpg
例如,攝像頭中的圖片是車牌資訊,它是從攝像頭中的實時圖片中捕獲到區域性區域,然後上傳到智慧型雲的後台進行識別,從而通過攝像頭完成車牌識別。

第三Android 應用的實現

Android應用的實現非常簡單,主要功能是在應用上顯示成功識別的車牌號。 具體實現方式是,當 ELF 1 開發板識別成功車牌後,可以通過套接字將車牌傳送到 Android 應用。 由於這部分**比較簡單,大致如下。

Android 端的 1. XML** 實現

這部分XML只實現了兩個函式,Button用於顯示車牌號的提示,TextView用於顯示識別的車牌號。 2. Android 套接字實現

private handler handler;private textview textview; @overrideprotected void oncreate(bundle s**edinstancestate) new thread(new runnable() catch (ioexception e) }start();
上面的段落**通過socket實現了來自開發板的車牌資料,並將其顯示到textview中。

3. ELF 1 開發板實現

開發板的主要目的是通過socket將識別成功的車牌號傳送到Android APP,**如下:

int main(int argc, char *ar**)struct sockaddr_in serv_addr; serv_addr.sin_family = af_inet; serv_addr.sin_addr.s_addr = inet_addr("192.168.0.104"); serv_addr.sin_port = htons(8374); if (bind(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) 0) return 1; if (listen(sockfd, 5) <0) return 1; struct sockaddr_in cli_addr; socklen_t clilen = sizeof(cli_addr); int newsockfd = accept(sockfd, (struct sockaddr*)&cli_addr, &clilen); if (newsockfd < 0) std::cerr <

四、總結

整個專案的識別流程如下圖所示,先執行程式,啟動攝像頭執行,然後獲取攝像頭中的實時圖片進行識別,識別成功後會檢索到車牌的關鍵詞並上傳到手機APP,這是整個專案的關鍵操作流程。

以上所有內容均由elfboard的共同創作者提供,所有共享內容僅用於學習和交流目的,嚴禁任何商業用途。 )

相關問題答案

    原始碼共享 解讀基於LSTM的鋰電池SOH預測與分析

    隨著技術的不斷進步,鋰離子電池 LIB 已成為電動汽車 EV 和混合動力電動汽車 HEV 等應用的主要能源。然而,鋰離子電池的壽命和安全性受到許多因素的影響,其中最重要的因素之一是電池的充電狀態 SOC 和健康狀態 SOH 因此,鋰離子電池SOH的精度成為重要的研究課題。在本文中,我們將深入分析基於...

    生態位農業專案分享

    這個養殖基地規模龐大,年產值高達驚人的 萬元,堪稱養殖行業的佼佼者。有了個這樣的基地,年利潤就能輕鬆超過萬,真是令人嘆為觀止。更值得一提的是,這個領域有乙個獨特的賽道 異國情調的寵物。在異國情調的寵物生意上,一年的利潤可以達到兩三百萬,簡直就是乙個隱藏的財富金礦。我曾親自去過徐州黑縣縣的養殖基地,那...

    從團隊的角度出發,講解工具在專案管理過程中的使用

    課程背景 目前,專案管理方面的培訓較多,但一般都集中在考試目的和高階研究上,缺乏具有實用專案管理方法的工具性課程。及時,它也是乙個基於PMBOK指南的知識體系,導致與一線實踐脫節,或者讓一線管理者覺得培訓是以理論為重點的。本課程強調專案管理中的團隊系統方法,強調專案經理作為領導者 助手 促進者 協調...

    基於Springboot的計算機補全專案主題推薦,Java補全免費選題

    如果我為我的計算機畢業專案選擇乙個基於springboot的主題,我該怎麼辦?.明確興趣和方向 選擇乙個你感興趣的課題,可以讓你更有動力和耐心進行深入的研究和開發。.尋找靈感 你可以參考最新的技術趨勢 行業熱點和實際需求,為你的畢業設計獲得靈感和創意。 調研分析 對現有同類專案進行調研,分析市場需求...

    分享基於家校共生的小學班主任管理策略

    組織豐富多彩的家校活動,為家長 老師 學生提供互動機會 在傳統的課堂管理過程中,家校合作主要通過家長會和家訪等方式進行。事實上,家校男女同校並不侷限於這些傳統方法。隨著教育教學的不斷進步,各種豐富的活動形式如雨後春筍般湧現。活動是小學生最喜歡的專案之一,因此在各種活動中對小學生進行教育往往可以取得意...