<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

項目分享|基于ELF 1開發板的車牌識別系統

ElfBoard ? 2024-03-12 09:22 ? 次閱讀

該項目選用ElfBoard ELF 1開發板作為核心硬件平臺,利用USB接口連接的攝像頭捕捉并識別車牌信息。一旦車牌成功識別,系統會觸發綠燈指示,并將識別所得的車牌號碼實時傳輸至手機APP。車牌識別技術方面,借助了百度提供的OCR(光學字符識別)服務來確保準確高效地讀取車牌數據。同時,手機APP則是采用Java編程語言進行開發,可以便捷地接收和查看識別結果。

一、車牌識別的實現方法

1、車牌識別平臺簡介

本次車牌識別的實現方案是通過百度智能云平臺進行實現,具體實現方法如下:進入百度智能云網頁- >選擇文字識別- > 車牌識別

wKgaomXq05eAEdOaAAHXdqQuotM133.png

進入車牌識別頁面之后可通過閱讀技術文檔來學習車牌識別的使用方法。

2、安裝 OpenSSL

因為百度智能云是通過libcurl的https進行訪問,而https的訪問需要openSSL的支持,所以先編譯OpenSSL。

wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz tar xvf openssl-1.1.1a.tar.gz ./config make sudo make install

3、安裝curl

wget https://curl.se/download/curl-7.71.1.tar.bz2 tar -xjf curl-7.71.1.tar.bz2 cd 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、車牌識別過程

(在做本次步驟之前請先去閱讀百度智能云車牌識別的使用方法)

在本地實現之前可通過平臺提供的在線驗證方法進行驗證,如下圖,需要在旁邊輸入access_token(通過閱讀文檔可知怎么獲?。┖鸵粡堒嚺茍D片的base64 編碼的字符串即可進行在線識別。

wKgaomXvqR6AMdU8AAGpZGBiGrE315.png

本地實現車牌識別的方法需要將識別代碼拷貝到本地,并需要實現一個將圖片轉換為base64編碼的函數,詳細代碼如下:

wKgaomXvw_WARedSAACXZ6vsz2k413.png

wKgaomXvxAqAdpDuAAC7hTBIjec090.pngwKgaomXvxBmAAUHTAADSwjSxRqg032.png

編譯

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.out OK:60

只需運行 date --s="2024-01-12 21:40:00"將時間設置正確即可。


二、移植 mjpg-streamer

在前面一個章節實現了對本地車牌圖片的的識別,那如果需要通過攝像頭進行車牌識別就需要借助 mjpg-streamer來實現,采用USB攝像頭進行識別。

關于什么是 mjpg-streamer 我這里就不在解釋,大家可以自行查閱資料進行了解,這里只介紹一下 mjpg-streamer 移植到 ELF 1開發板的過程。

1、編譯 jpeg

(1)下載 jpeg 源碼壓縮包網址:http://www.ijg.org/files/

(2)tar -xvf jpegsrc.v8b.tar.gz

(3)編譯配置

cd jpeg-8d ./configure --prefix=$PWD/_INSTALL --host=arm-linux-gnueabihf make -j8 make install

2、編譯mjpg-streamer

(1)下載 mjpg-streamer 源碼包

網址:https://sourceforge.net/projects/mjpg-streamer/

svn checkout https://svn.code.sf.net/p/mjpg-streamer/code/ mjpg-streamer-code

(2)tar -xvfmjpg-streamer.tar.gz

(3)配置

cd mjpg-streamer-code/mjpg-streamer/plugins/input_uvc vim Makefile

打開 Makefile 文件按照下圖進行修改:

wKgZomXvqxWAN57-AAFP8ADHbjI563.png

(4)編譯mjpg-streamer

因為mjpg-streamer默認是用GCC進行編譯,所以要先將GCC改成自己的交叉編譯工具,先安裝需要用到的庫。

sudo apt install graphicsmagick-imagemagick-compat sudo apt install imagemagick-6.q16 sudo apt install imagemagick-6.q16hdri

更改GCC有兩種方法:

方法一:

cd ~/mjpg-streamer-code/mjpg-streamer make CC=arm-linux-gnueabihf-gcc

方法二:

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都等于設置的交叉編譯工具。

wKgaomXvrAaAJElXAAEL4r9B0yE158.png

做完上面這些步驟之后編譯代碼:

make -j8

編譯完成后會生成下圖文件

wKgZomXvrD6AMYlvAAB2Q1vqByw098.png

.so :動態庫

mjpg_streamer:提供可執行命令

www:攝像頭輸出的網頁

(5)移植到ELF 1開發板

scp -r mjpg-streamer/ root@192.168.0.106:~

(6)驗證功能

登錄ELF 1開發板,運行mjpg_streamer

cd mjpg-streamer export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/mjpg-streamer ./mjpg_streamer

wKgZomXvrIyAKAFYAABUWp49Y4I810.png

當開發板運行mjpg_streamer成功后,在瀏覽器中輸入開發板的IP地址和8080端口號,比如我的是192.168.0.106:8080,點擊Stream選項就會出現攝像頭中的實時畫面,如下圖所示。

wKgaomXvrLSAK8EEAAZBa6DIIUI201.png

這樣就完成了mjpg_streamer 的移植,后續就可以mjpg_streamer實現一些具體的需求,比如打開攝像頭視頻

mjpg_streamer -i "input_uvc.so -d /dev/video2 -f 30 -q 90 -n" -o "output_http.so -w /opt/www"

截取攝像頭中的畫面:

wget http://192.168.0.106:8080/?action=snapshot -O ./1.jpg

在這里就可以和前面車牌識別結合起來了,比如攝像頭里面的畫面是一張車牌信息,通過截取攝像頭中的實時畫面到本地,然后上傳到百度智能云的后臺進行識別,至此就完成通過攝像頭進行車牌識別。


三、Android APP的實現

Android APP 的實現很簡單,主要功能就是將識別成功的車牌號在APP上面顯示。具體的實現方法是當ELF 1開發板成功識別車牌后,通過 Socket 將車牌發送到 Android APP 上面即可。由于這部分代碼比較簡單,大致如下。

1、Android 端XML代碼實現

XML 這部分只實現了兩個功能,Button 用來顯示車牌號的提示,TextView用來顯示識別的車牌號。

2、 Android端Socket實現

private Handler handler; private TextView textView; @Override protected void onCreate(Bundle savedInstanceState)

{ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = findViewById(R.id.text); handler = new Handler(Looper.getMainLooper()) { @Override public void handleMessage(Message msg)

{ super.handleMessage(msg); Bundle bundle = msg.getData(); String receivedMessage = bundle.getString("msg");

textView.setText(receivedMessage); } }; }

new Thread(new Runnable()

{ @Override public void run() { try { Socket client = new Socket("192.168.0.104", 8374); InputStream inputStream = client.getInputStream();

while (true) { byte[] data = new byte[128]; int len = inputStream.read(data); if (len > 0) { String str = new String(data, 0, len); Message message = new Message(); Bundle bundle = new Bundle(); bundle.putString("msg", str); message.setData(bundle); } } } catch (IOException e) { e.printStackTrace(); } }).start();

上面這段代碼就實現了通過Socket接收來自開發板的車牌數據并將顯示到TextView。

3、ELF 1開發板端實現

開發板端主要就是將識別成功的車牌號碼通過Socket發送到Android APP上面,代碼如下:

int main(int argc, char *argv[]) { int sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) { std::cerr << "Error creating socket" << std::endl; return 1; } 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 << "Accept failed" << std::endl; const char* reply = match[1].str().c_str(); int bytes_sent = send(newsockfd, reply, strlen(reply), 0); if (bytes_sent < 0) std::cerr << "Error sending data" << std::endl; close(newsockfd); close(sockfd); return 0; }

Android APP部分就介紹結束,具體的運行界面效果如下圖所示:

wKgZomXvrZCAOEGDAABjFpRrcLw909.png

四、總結

整個項目的識別過程如下圖所示,首先運行程序,啟動攝像頭運行,然后會獲取攝像頭中的實時畫面進行識別,識別成功就會將車牌的關鍵字檢索出來上傳到手機APP上面,這就是整個項目的關鍵運行流程。

wKgZomXvrbGACGyMAADKQyANxr4324.png

上述全部內容由ElfBoard的共創官提供,所有分享內容僅供學習交流使用,嚴禁任何商業用途。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5002

    文章

    18414

    瀏覽量

    291538
  • 開發板
    +關注

    關注

    25

    文章

    4560

    瀏覽量

    94886
  • 識別系統
    +關注

    關注

    1

    文章

    132

    瀏覽量

    18741
  • 嵌入式應用
    +關注

    關注

    0

    文章

    58

    瀏覽量

    18401
收藏 人收藏

    評論

    相關推薦

    基于LabVIEW的車牌識別系統

    又沒人做過基于LabVIEW的車牌識別系統或類似的?
    發表于 06-11 15:32

    【OK210申請】基于嵌入式的車牌識別系統

    申請理由:我是一名在校學生,最近在完成基于嵌入式的車牌識別系統的設計,處理器你用Cortex-A8處理器,該處理器在市面上較貴,作為學生買不起,所以想申請一快,為了自己能夠更好的學習嵌入式項目描述
    發表于 07-03 16:52

    【TL6748 DSP申請】基于DSP的車牌識別系統

    有機會玩TMS320F項目描述:用TMS320C6748搭載攝像頭實現車牌自動識別系統,基于模糊控制,圖像分割、模式識別等理論,通過對采集的數據進行分析掃描,自動補全不全或污損的
    發表于 09-09 16:59

    怎么用FPGA做車牌識別系統?

    最近在做畢業設計,要求用FPGA,原本打算做車牌識別系統,但是太難了,大家有沒有好的想法。。
    發表于 11-25 23:23

    基于labview vision的機動車車牌識別系統

    機動車車牌識別系統,內附子VI打開密碼
    發表于 02-26 19:35

    【創龍TMS320C665x開發板試用】應用:車牌識別-結項

    。閑話說罷,開始今天的正題?;趧擙圱MS320C665x開發板車牌識別摘要 基于現在市場上已存在的車牌識別系統的原理,利用創龍TMS32
    發表于 05-01 16:41

    【Rico Board申請】基于SoC的車牌識別系統

    最近導師在外面公司承接的一個車牌識別系統其實還是非常適合用SoC作為硬件平臺來完成這個項目;3.本人預期的設想是在SD卡上裝入一個ubuntu,在里面再植入opencv的開發環境,
    發表于 11-10 10:12

    【MediaTek X20開發板申請】小區車牌自動識別系統

    項目名稱:小區車牌自動識別系統試用計劃:MediaTek X20 開發板是一款誠邁科技和聯發科技聯合發布的符合96board規范的開源硬件,具有非常強大的運算能力和多媒體處理能力最新的
    發表于 12-29 17:05

    【HarmonyOS HiSpark AI Camera】車牌識別系統

    項目名稱:車牌識別系統試用計劃:申請理由本人在嵌入式開發行業從事了五年的開發經驗,在智能家居,無線mesh網絡領域擁有豐富的經驗。并且自學A
    發表于 11-18 18:15

    怎么實現基于MATLAB的車牌識別系統的設計?

    一個完整的牌照識別系統包括哪些單元?怎么實現基于MATLAB的車牌識別系統的設計?
    發表于 05-12 07:04

    怎么實現基于STM32F103單片機的車牌識別圖像處理識別系統的設計?

    STM32的主要優點是什么?怎么實現基于STM32F103單片機的車牌識別圖像處理識別系統的設計?
    發表于 09-29 06:29

    車牌識別技術的發展及意義_車牌識別系統原理介紹

    本文主要介紹了車牌識別系統原理、車牌識別技術的意義、車牌識別技術應用表現和國內
    發表于 01-02 15:12 ?1.6w次閱讀
    <b class='flag-5'>車牌</b><b class='flag-5'>識別</b>技術的發展及意義_<b class='flag-5'>車牌</b><b class='flag-5'>識別系統</b>原理介紹

    基于MATLAB的車牌識別系統

    基于MATLAB的車牌識別系統設計說明。
    發表于 04-16 09:30 ?17次下載

    基于LABVIEW的車牌識別系統資料

    基于LABVIEW的車牌識別系統資料
    發表于 01-11 18:16 ?63次下載

    基于OpenCV開源庫開發的在OpenHarmony中實現車牌識別

    識別系統,基于 OpenCV 開源庫開發。 本項目使用 潤和 HiSpark Taurus AI Camera(Hi3516DV300) 攝像 頭開發板套件(以下簡稱 Hi3516)實
    的頭像 發表于 06-30 11:16 ?4747次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>