如何用Python識(shí)別車牌的示例代碼
車牌識(shí)別在高速公路中有著廣泛的應(yīng)用,比如我們常見的電子收費(fèi)(ETC)系統(tǒng)和交通違章車輛的檢測(cè),除此之外像小區(qū)或地下
車庫(kù)門禁也會(huì)用到,基本上凡是需要對(duì)車輛進(jìn)行身份檢測(cè)的地方都會(huì)用到。
簡(jiǎn)介
車牌識(shí)別系統(tǒng)(Vehicle License Plate Recognition)是計(jì)算機(jī)視頻圖像識(shí)別技術(shù)在車輛牌照識(shí)別中的一種應(yīng)用,通常一個(gè)車牌識(shí)
別系統(tǒng)主要包括以下這四個(gè)部分:
- 車輛圖像獲取
- 車牌定位
- 車牌字符分割
- 車牌字符識(shí)別
我們?cè)賮?lái)看一下百科中對(duì)車牌識(shí)別技術(shù)的描述:
車牌識(shí)別技術(shù)要求能夠?qū)⑦\(yùn)動(dòng)中的汽車牌照從復(fù)雜背景中提取并識(shí)別出來(lái),通過(guò)車牌提取、圖像預(yù)處理、特征提取、車牌字符識(shí)
別等技術(shù),識(shí)別車輛牌號(hào)、顏色等信息,目前最新的技術(shù)水平為字母和數(shù)字的識(shí)別率可達(dá)到 99.7%,漢字的識(shí)別率可達(dá)到 99%。
實(shí)現(xiàn)方式
我們這里不做太復(fù)雜的車輛動(dòng)態(tài)識(shí)別,只演示從圖像中識(shí)別車牌信息,車牌識(shí)別功能的實(shí)現(xiàn)方式大致分為兩種,一種是自己編寫
代碼實(shí)現(xiàn),另一種是借助第三方 API 接口實(shí)現(xiàn)。
自己實(shí)現(xiàn)
如果我們想要通過(guò) Python 自己手動(dòng)編碼實(shí)現(xiàn)車牌識(shí)別功能,可以借助一些 Python 庫(kù),比如:OpenCV、TensorFlow 等,這種方
式因?yàn)槊恳粋€(gè)功能點(diǎn)都需要我們自己編碼實(shí)現(xiàn),所有會(huì)相對(duì)復(fù)雜一些,另一方面如果我們想要保證識(shí)別的準(zhǔn)確性,可能需要做大
量的實(shí)驗(yàn),也就是說(shuō)會(huì)花費(fèi)更多的時(shí)間。
第三方接口
現(xiàn)在已經(jīng)有一些第三方平臺(tái)實(shí)現(xiàn)好了車牌識(shí)別的功能,并且他們對(duì)外提供了 API 接口,我們只需要調(diào)用他們提供的接口即可,這
種方式實(shí)現(xiàn)就相對(duì)簡(jiǎn)單了一些,并且通常接口提供方對(duì)外提供的接口功能的準(zhǔn)確性也是基本可以保證的,原因很簡(jiǎn)單,如果接口
功能太差的話,一是自己打臉,還有就是基本不會(huì)有什么人使用,也就失去了接口對(duì)外提供的價(jià)值了,另外第三方接口可能會(huì)收
取一定費(fèi)用,因此,如果現(xiàn)實(shí)中我們具體實(shí)現(xiàn)的話要綜合考慮。
具體實(shí)現(xiàn)
綜合上面的情況,我們這里采用第三方接口的方式來(lái)實(shí)現(xiàn)車牌識(shí)別的功能,接口提供方我們選擇百度云提供的接口,百度云接口
提供了免費(fèi)額度,簡(jiǎn)單來(lái)說(shuō)就是每天可以免費(fèi)使用多少次,如果超過(guò)了這個(gè)次數(shù)就需要交錢什么的了,文檔地址為:https://cloud.baidu.com/doc/OCR/index.html
,下面來(lái)看一下具體實(shí)現(xiàn)過(guò)程。
SDK 安裝
百度云 SDK 對(duì)多種語(yǔ)言提供了支持,比如:Python、Java、C++、IOS、Android 等,這里我們安裝 Python 版的 SDK,安裝很
簡(jiǎn)單,使用 pip install baidu-aip 命令即可,SDK 支持 Python 的版本為:2.7+ 與 3.x,SDK 目錄結(jié)構(gòu)如下:
├── README.md ├── aip // SDK 目錄│ ├── __init__.py // 導(dǎo)出類│ ├── base.py // aip 基類│ ├── http.py // http 請(qǐng)求│ └── ocr.py //OCR└── setup.py // setuptools 安裝
創(chuàng)建應(yīng)用
SDK 安裝好后,我們接著需要?jiǎng)?chuàng)建應(yīng)用了,這里需要一個(gè)百度賬號(hào)或百度云賬號(hào),如果沒(méi)有的話自己注冊(cè)一個(gè)即可,登錄及注冊(cè)
地址為:https://login.bce.baidu.com/?redirect=http%3A%2F%2Fcloud.baidu.com%2Fcampaign%2Fcampus-2018%2Findex.html,登錄之后,我們將鼠標(biāo)移動(dòng)到登錄頭像位置,接著在彈出菜單中單擊用戶中心,如下圖所示:
如果是首次進(jìn)入的話,勾選一下相應(yīng)信息,如下圖所示:
信息勾選完了之后,點(diǎn)擊保存按鈕。
接著將鼠標(biāo)移動(dòng)到左側(cè)欄中 > 符號(hào)位置,再依次選擇人工智能和文字識(shí)別,如下圖所示:
點(diǎn)擊之后會(huì)進(jìn)入到下圖中:
我們點(diǎn)擊創(chuàng)建應(yīng)用,進(jìn)入下圖中:
這里我們只需要填一下應(yīng)用名稱和下面的應(yīng)用描述即可,填寫完畢之后點(diǎn)擊立即創(chuàng)建。
創(chuàng)建完后,我們?cè)俜祷貞?yīng)用列表,如下圖所示:
這里我們需要用到三個(gè)值:AppID、API Key 和 Secret Key。
具體實(shí)現(xiàn)
應(yīng)用創(chuàng)建完了,我們就可以調(diào)用接口實(shí)現(xiàn)車牌識(shí)別功能了。
首先,我們要?jiǎng)?chuàng)建 AipOcr,AipOcr 是 OCR 的 Python SDK 客戶端,為使用 OCR 的開發(fā)人員提供了一系列的交互方法,代碼實(shí)
現(xiàn)也比較簡(jiǎn)單,如下所示:
from aip import AipOcr # 自己的 APPID AK SKAPP_ ID = '自己的 App ID'API_KEY = '自己的 Api Key' SECRET_KEY = '自己的 Secret Key' client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
在上面代碼中,常量 APP_ID、API_KEY 和 SECRET_KEY 就是我們?cè)诓榭磻?yīng)用列表時(shí)說(shuō)的需要用到的常量值,這些值均為字符
串,用于標(biāo)識(shí)用戶,為訪問(wèn)做簽名驗(yàn)證。
如果我們需要配置 AipOcr 的網(wǎng)絡(luò)請(qǐng)求參數(shù),可以在構(gòu)造 AipOcr 之后調(diào)用接口設(shè)置參數(shù),目前支持兩個(gè)參數(shù),看一下代碼實(shí)現(xiàn):
# 建立連接的超時(shí)時(shí)間,單位為毫秒 client.setConnectionTimeoutInMillis(5000) # 通過(guò)打開的連接傳輸數(shù)據(jù)的超時(shí)時(shí)間,單位為毫秒client.setSocketTimeoutInMillis(5000)
總的來(lái)說(shuō)通過(guò)接口方式實(shí)現(xiàn)車牌識(shí)別功能是比較簡(jiǎn)單的,以如下圖為例:
實(shí)現(xiàn)代碼如下:
from aip import AipOcrAPP_ID = '自己的 App ID' API_KEY = '自己的 Api Key' SECRET_KEY = '自己的 Secret Key'#創(chuàng)建客戶端對(duì)象 client = AipOcr(APP_ID, API_KEY, SECRET_KEY)# 建立連接的超時(shí)時(shí)間, 單位為毫秒 client.setConnectionTimeoutInMillis(5000)# 通過(guò)打開的連接傳輸數(shù)據(jù)的超時(shí)時(shí)間, 單位為毫秒 client.setSocketTimeoutInMillis(5000)# 讀取圖片 def get_file_content(filePath): with open(filePath, 'rb') as fp: return fp.read() image = get_file_content('car.jpeg') res = client.licensePlate(image) print('車牌號(hào)碼:' + res['words_result']['number']) print('車牌顏色:' + res['words_result']['color'])
執(zhí)行結(jié)果:
車牌號(hào)碼:川QK9777車牌顏色:blue
上面代碼實(shí)現(xiàn)的是對(duì)一張圖片中的一個(gè)車牌進(jìn)行識(shí)別,當(dāng)然接口還支持對(duì)一張圖片中的多個(gè)車牌進(jìn)行識(shí)別,只需使用
licensePlate(image, options)
即可, 以如下圖為例:
實(shí)現(xiàn)代碼如下:
from aip import AipOcr APP_ID = '自己的 App ID'API_KEY = '自己的 Api Key'SECRET_KEY = '自己的 Secret Key'# 創(chuàng)建客戶端對(duì)象client = AipOcr(APP_ID, API_KEY, SECRET_KEY)# 建立連接的超時(shí)時(shí)間,單位為毫秒client.setConnectionTimeoutInMillis(5000)# 通過(guò)打開的連接傳輸數(shù)據(jù)的超時(shí)時(shí)間,單位為毫秒client.setSocketTimeoutInMillis(5000) # 讀取圖片def get_file_content(filePath): with open(filePath, 'rb') as fp: return fp.read() image = get_file_content('cars.png')options = {}# 參數(shù) multi_detect 默認(rèn)為 falseoptions['multi_detect'] = 'true'res = client.licensePlate(image, options)for wr in res['words_result']: print('車牌號(hào)碼:' + wr['number']) print('車牌顏色:' + wr['color'])
執(zhí)行結(jié)果:
車牌號(hào)碼:京N6HZ61
車牌顏色:blue
車牌號(hào)碼:魯NS1A26
車牌顏色:blue
最后
本文我們先對(duì)車牌識(shí)別進(jìn)行了一些介紹,之后利用百度云接口實(shí)現(xiàn)了單個(gè)和多個(gè)車牌的識(shí)別功能,通過(guò)本文我們可以對(duì)車牌識(shí)別的相關(guān)概念和具體實(shí)現(xiàn)有一些了解,更多相關(guān)Python 識(shí)別車牌內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python中超簡(jiǎn)單的字符分割算法記錄(車牌識(shí)別、儀表識(shí)別等)
- 詳細(xì)過(guò)程帶你用Python做車牌自動(dòng)識(shí)別系統(tǒng)
- python 實(shí)現(xiàn)的車牌識(shí)別項(xiàng)目
- python利用百度云接口實(shí)現(xiàn)車牌識(shí)別的示例
- python+OpenCV實(shí)現(xiàn)車牌號(hào)碼識(shí)別
- Python+Tensorflow+CNN實(shí)現(xiàn)車牌識(shí)別的示例代碼
- python實(shí)現(xiàn)車牌識(shí)別的示例代碼
- OpenCV+Python識(shí)別車牌和字符分割的實(shí)現(xiàn)
- Python+OpenCV實(shí)現(xiàn)車牌字符分割和識(shí)別
相關(guān)文章
Django 解決開發(fā)自定義拋出異常的問(wèn)題
這篇文章主要介紹了Django 解決開發(fā)自定義拋出異常的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05Python基于Tkinter模塊實(shí)現(xiàn)的彈球小游戲
這篇文章主要介紹了Python基于Tkinter模塊實(shí)現(xiàn)的彈球小游戲,涉及Python圖形繪制、數(shù)值計(jì)算、判斷等相關(guān)操作技巧,需要的朋友可以參考下2018-12-12Python實(shí)現(xiàn)簡(jiǎn)單字典樹的方法
這篇文章主要介紹了Python實(shí)現(xiàn)簡(jiǎn)單字典樹的方法,實(shí)例分析了Python字典樹的定義、實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下2016-04-04Python統(tǒng)計(jì)單詞出現(xiàn)的次數(shù)
最近經(jīng)理交給我一項(xiàng)任務(wù),統(tǒng)計(jì)一個(gè)文件中每個(gè)單詞出現(xiàn)的次數(shù),列出出現(xiàn)頻率最多的5個(gè)單詞。本文給大家?guī)?lái)了python 統(tǒng)計(jì)單詞次數(shù)的思路解析,需要的朋友參考下吧2018-04-04Pycharm連接遠(yuǎn)程服務(wù)器并實(shí)現(xiàn)遠(yuǎn)程調(diào)試的實(shí)現(xiàn)
這篇文章主要介紹了Pycharm連接遠(yuǎn)程服務(wù)器并實(shí)現(xiàn)遠(yuǎn)程調(diào)試的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08Python 安裝setuptools和pip工具操作方法(必看)
下面小編就為大家?guī)?lái)一篇Python 安裝setuptools和pip工具操作方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05python mysql斷開重連的實(shí)現(xiàn)方法
這篇文章主要介紹了python mysql斷開重連的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07Python中低維數(shù)組填充高維數(shù)組的實(shí)現(xiàn)
今天小編就為大家分享一篇Python中低維數(shù)組填充高維數(shù)組的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12基于OpenMV的圖像識(shí)別之?dāng)?shù)字識(shí)別功能
OpenMV是一個(gè)開源,低成本,功能強(qiáng)大的機(jī)器視覺(jué)模塊。以STM32F427CPU為核心,集成了OV7725攝像頭芯片,在小巧的硬件模塊上,用C語(yǔ)言高效地實(shí)現(xiàn)了核心機(jī)器視覺(jué)算法,提供Python編程接口,對(duì)OpenMV的圖像識(shí)別之?dāng)?shù)字識(shí)別相關(guān)知識(shí)感興趣的朋友一起看看吧2021-11-11