車牌識別在高速公路中有著廣泛的應用,比如我們常見的電子收費(ETC)系統(tǒng)和交通違章車輛的檢測,除此之外像小區(qū)或地下車庫門禁也會用到,基本上凡是需要對車輛進行身份檢測的地方都會用到。
簡介
車牌識別系統(tǒng)(Vehicle License Plate Recognition)是計算機視頻圖像識別技術在車輛牌照識別中的一種應用,通常一個車牌識別系統(tǒng)主要包括以下這四個部分:
- 車輛圖像獲取
- 車牌定位
- 車牌字符分割
- 車牌字符識別
我們再來看一下百科中對車牌識別技術的描述:
車牌識別技術要求能夠?qū)⑦\動中的汽車牌照從復雜背景中提取并識別出來,通過車牌提取、圖像預處理、特征提取、車牌字符識別等技術,識別車輛牌號、顏色等信息,目前最新的技術水平為字母和數(shù)字的識別率可達到 99.7%,漢字的識別率可達到 99%。
實現(xiàn)方式
我們這里不做太復雜的車輛動態(tài)識別,只演示從圖像中識別車牌信息,車牌識別功能的實現(xiàn)方式大致分為兩種,一種是自己編寫代碼實現(xiàn),另一種是借助第三方 API 接口實現(xiàn)。
自己實現(xiàn)
如果我們想要通過 Python 自己手動編碼實現(xiàn)車牌識別功能,可以借助一些 Python 庫,比如:OpenCV、TensorFlow 等,這種方式因為每一個功能點都需要我們自己編碼實現(xiàn),所有會相對復雜一些,另一方面如果我們想要保證識別的準確性,可能需要做大量的實驗,也就是說會花費更多的時間。
第三方接口
現(xiàn)在已經(jīng)有一些第三方平臺實現(xiàn)好了車牌識別的功能,并且他們對外提供了 API 接口,我們只需要調(diào)用他們提供的接口即可,這種方式實現(xiàn)就相對簡單了一些,并且通常接口提供方對外提供的接口功能的準確性也是基本可以保證的,原因很簡單,如果接口功能太差的話,一是自己打臉,還有就是基本不會有什么人使用,也就失去了接口對外提供的價值了,另外第三方接口可能會收取一定費用,因此,如果現(xiàn)實中我們具體實現(xiàn)的話要綜合考慮。
具體實現(xiàn)
綜合上面的情況,我們這里采用第三方接口的方式來實現(xiàn)車牌識別的功能,接口提供方我們選擇百度云提供的接口,百度云接口提供了免費額度,簡單來說就是每天可以免費使用多少次,如果超過了這個次數(shù)就需要交錢什么的了,文檔地址為:https://cloud.baidu.com/doc/OCR/index.html,下面來看一下具體實現(xiàn)過程。
SDK 安裝
百度云 SDK 對多種語言提供了支持,比如:Python、Java、C++、IOS、Android 等,這里我們安裝 Python 版的 SDK,安裝很簡單,使用 pip install baidu-aip 命令即可。使用Pycharm的話直接導入相關的包就行了,這個只要你baidu-aip包即可。
創(chuàng)建應用
SDK 安裝好后,我們接著需要創(chuàng)建應用了,這里需要一個百度賬號或百度云賬號,如果沒有的話自己注冊一個即可,登錄及注冊地址為:https://login.bce.baidu.com/?redirect=http%3A%2F%2Fcloud.baidu.com%2Fcampaign%2Fcampus-2018%2Findex.html,登錄之后,我們將鼠標移動到登錄頭像位置,接著在彈出菜單中單擊用戶中心,如下圖所示:
![](http://img.jbzj.com/file_images/article/202101/2021125162630427.png?2021025162637)
如果是首次進入的話,勾選一下相應信息,如下圖所示:
![](http://img.jbzj.com/file_images/article/202101/2021125162656749.png?202102516274)
信息勾選完了之后,點擊保存按鈕。
接著將鼠標移動到左側欄中 > 符號位置,再依次選擇人工智能和文字識別,如下圖所示:
![](http://img.jbzj.com/file_images/article/202101/2021125162723395.png?2021025162732)
點擊之后會進入到下圖中:
![](http://img.jbzj.com/file_images/article/202101/2021125162750298.png?2021025162759)
我們點擊創(chuàng)建應用,進入下圖中:
![](http://img.jbzj.com/file_images/article/202101/2021125162816781.png?2021025162823)
這里我們只需要填一下應用名稱和下面的應用描述即可,填寫完畢之后點擊立即創(chuàng)建。
創(chuàng)建完后,我們再返回應用列表,如下圖所示:
![](http://img.jbzj.com/file_images/article/202101/2021125162842840.png?2021025162849)
這里我們需要用到三個值:AppID、API Key 和 Secret Key。
具體實現(xiàn)
應用創(chuàng)建完了,我們就可以調(diào)用接口實現(xiàn)車牌識別功能了。
首先,我們要創(chuàng)建 AipOcr,AipOcr 是 OCR 的 Python SDK 客戶端,為使用 OCR 的開發(fā)人員提供了一系列的交互方法,代碼實現(xiàn)也比較簡單,如下所示:
from aip import AipOcr
# 自己的 APPID AK SK
APP_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 就是我們在查看應用列表時說的需要用到的常量值,這些值均為字符串,用于標識用戶,為訪問做簽名驗證。單引號中內(nèi)容應該填上剛才注冊登入時獲取的自己的ID和Key
如果我們需要配置 AipOcr 的網(wǎng)絡請求參數(shù),可以在構造 AipOcr 之后調(diào)用接口設置參數(shù),目前支持兩個參數(shù),看一下代碼實現(xiàn):
# 建立連接的超時時間,單位為毫秒
client.setConnectionTimeoutInMillis(5000)
# 通過打開的連接傳輸數(shù)據(jù)的超時時間,單位為毫秒
client.setSocketTimeoutInMillis(5000)
總的來說通過接口方式實現(xiàn)車牌識別功能是比較簡單的,以如下圖為例:
![](http://img.jbzj.com/file_images/article/202101/2021125162948028.png?2021025162956)
實現(xiàn)總的代碼如下:直接復制粘貼到你的Pycharm中即可使用(記得先導入baidu-aip 的包和下面3-5行改成自己的ID和Key)
from aip import AipOcr
APP_ID = '自己的 App ID'
API_KEY = '自己的 Api Key'
SECRET_KEY = '自己的 Secret Key'
# 創(chuàng)建客戶端對象
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
# 建立連接的超時時間,單位為毫秒
client.setConnectionTimeoutInMillis(5000)
# 通過打開的連接傳輸數(shù)據(jù)的超時時間,單位為毫秒
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('車牌號碼:' + res['words_result']['number'])
print('車牌顏色:' + res['words_result']['color'])
執(zhí)行結果:
![](http://img.jbzj.com/file_images/article/202101/2021125163026446.png?2021025163034)
上面代碼實現(xiàn)的是對一張圖片中的一個車牌進行識別,當然接口還支持對一張圖片中的多個車牌進行識別,只需使用 licensePlate(image, options) 即可,
以如下圖為例:
![](http://img.jbzj.com/file_images/article/202101/2021125163051679.png?2021025163058)
實現(xiàn)代碼如下:
from aip import AipOcr
APP_ID = '自己的 App ID'
API_KEY = '自己的 Api Key'
SECRET_KEY = '自己的 Secret Key'
# 創(chuàng)建客戶端對象
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
# 建立連接的超時時間,單位為毫秒
client.setConnectionTimeoutInMillis(5000)
# 通過打開的連接傳輸數(shù)據(jù)的超時時間,單位為毫秒
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 默認為 false
options['multi_detect'] = 'true'
res = client.licensePlate(image, options)
for wr in res['words_result']:
print('車牌號碼:' + wr['number'])
print('車牌顏色:' + wr['color'])
執(zhí)行結果:
![](http://img.jbzj.com/file_images/article/202101/2021125163131494.png?2021025163138)
總結
本文我們先對車牌識別進行了一些介紹,之后利用百度云接口實現(xiàn)了單個和多個車牌的識別功能,通過本文我們可以對車牌識別的相關概念和具體實現(xiàn)有一些了解。
以上就是python 實現(xiàn)的車牌識別項目的詳細內(nèi)容,更多關于python 車牌識別的資料請關注腳本之家其它相關文章!
您可能感興趣的文章:- python好玩的項目—色情圖片識別代碼分享
- 如何使用Python進行PDF圖片識別OCR
- python 自動識別并連接串口的實現(xiàn)
- OpenCV+Python3.5 簡易手勢識別的實現(xiàn)
- python 實現(xiàn)表情識別
- python 實現(xiàn)性別識別
- python實現(xiàn)圖片,視頻人臉識別(dlib版)
- python實現(xiàn)圖片,視頻人臉識別(opencv版)
- python調(diào)用百度API實現(xiàn)人臉識別
- 詳解利用python識別圖片中的條碼(pyzbar)及條碼圖片矯正和增強
- Python識別處理照片中的條形碼