車牌識別在高速公路中有著廣泛的應用,比如我們常見的電子收費(ETC)系統和交通違章車輛的檢測,除此之外像小區或地下 車庫門禁也會用到,基本上凡是需要對車輛進行身份檢測的地方都會用到。 簡介 車牌識別系統(Vehicle License Plate Recognition)是電腦視頻圖像識別技術在車 ...
車牌識別在高速公路中有著廣泛的應用,比如我們常見的電子收費(ETC)系統和交通違章車輛的檢測,除此之外像小區或地下
車庫門禁也會用到,基本上凡是需要對車輛進行身份檢測的地方都會用到。
簡介
車牌識別系統(Vehicle License Plate Recognition)是電腦視頻圖像識別技術在車輛牌照識別中的一種應用,通常一個車牌識
別系統主要包括以下這四個部分:
•車輛圖像獲取
•車牌定位
•車牌字元分割
•車牌字元識別
我們再來看一下百科中對車牌識別技術的描述:
車牌識別技術要求能夠將運動中的汽車牌照從複雜背景中提取並識別出來,通過車牌提取、圖像預處理、特征提取、車牌字元識
別等技術,識別車輛牌號、顏色等信息,目前最新的技術水平為字母和數字的識別率可達到 99.7%,漢字的識別率可達到 99%。
實現方式
我們這裡不做太複雜的車輛動態識別,只演示從圖像中識別車牌信息,車牌識別功能的實現方式大致分為兩種,一種是自己編寫
代碼實現,另一種是藉助第三方 API 介面實現。
自己實現
如果我們想要通過 Python 自己手動編碼實現車牌識別功能,可以藉助一些 Python 庫,比如:OpenCV、TensorFlow 等,這種方
式因為每一個功能點都需要我們自己編碼實現,所有會相對複雜一些,另一方面如果我們想要保證識別的準確性,可能需要做大
量的實驗,也就是說會花費更多的時間。
第三方介面
現在已經有一些第三方平臺實現好了車牌識別的功能,並且他們對外提供了 API 介面,我們只需要調用他們提供的介面即可,這
種方式實現就相對簡單了一些,並且通常介面提供方對外提供的介面功能的準確性也是基本可以保證的,原因很簡單,如果介面
功能太差的話,一是自己打臉,還有就是基本不會有什麼人使用,也就失去了介面對外提供的價值了,另外第三方介面可能會收
取一定費用,因此,如果現實中我們具體實現的話要綜合考慮。
具體實現
綜合上面的情況,我們這裡採用第三方介面的方式來實現車牌識別的功能,介面提供方我們選擇百度雲提供的介面,百度雲介面
提供了免費額度,簡單來說就是每天可以免費使用多少次,如果超過了這個次數就需要交錢什麼的了,文檔地址為:
https://cloud.baidu.com/doc/OCR/index.html
,下麵來看一下具體實現過程。
SDK 安裝
百度雲 SDK 對多種語言提供了支持,比如:Python、Java、C++、IOS、Android 等,這裡我們安裝 Python 版的 SDK,安裝很
簡單,使用 pip install baidu-aip 命令即可,SDK 支持 Python 的版本為:2.7+ 與 3.x,SDK 目錄結構如下:
Python學習交流Q群:906715085#### ├── README.md ├── aip // SDK 目錄│ ├── __init__.py // 導出類│ ├── base.py // aip 基類│ ├── http.py // http 請求│ └── ocr.py //OCR└── setup.py // setuptools 安裝
創建應用
SDK 安裝好後,我們接著需要創建應用了,這裡需要一個百度賬號或百度雲賬號,如果沒有的話自己註冊一個即可,登錄及註冊
地址為:https://login.bce.baidu.com/?redirect=http%3A%2F%2Fcloud.baidu.com%2Fcampaign%2Fcampus-
2018%2Findex.html,登錄之後,我們將滑鼠移動到登錄頭像位置,接著在彈出菜單中單擊用戶中心,如下圖所示:
如果是首次進入的話,勾選一下相應信息,如下圖所示:
信息勾選完了之後,點擊保存按鈕。
接著將滑鼠移動到左側欄中 > 符號位置,再依次選擇人工智慧和文字識別,如下圖所示:
點擊之後會進入到下圖中:
我們點擊創建應用,進入下圖中:
這裡我們只需要填一下應用名稱和下麵的應用描述即可,填寫完畢之後點擊立即創建。
創建完後,我們再返回應用列表,如下圖所示:
這裡我們需要用到三個值:AppID、API Key 和 Secret Key。
具體實現
應用創建完了,我們就可以調用介面實現車牌識別功能了。
首先,我們要創建 AipOcr,AipOcr 是 OCR 的 Python SDK 客戶端,為使用 OCR 的開發人員提供了一系列的交互方法,代碼實
現也比較簡單,如下所示:
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 就是我們在查看應用列表時說的需要用到的常量值,這些值均為字元
串,用於標識用戶,為訪問做簽名驗證。
如果我們需要配置 AipOcr 的網路請求參數,可以在構造 AipOcr 之後調用介面設置參數,目前支持兩個參數,看一下代碼實現:
# 建立連接的超時時間,單位為毫秒 client.setConnectionTimeoutInMillis(5000) # 通過打開的連接傳輸數據的超時時間,單位為毫秒client.setSocketTimeoutInMillis(5000)
總的來說通過介面方式實現車牌識別功能是比較簡單的,以如下圖為例:
實現代碼如下:
from aip import AipOcrAPP_ID = '自己的 App ID'API_KEY = '自己的 Api Key'SECRET_KEY = '自己的 Secret Key'# 創建客戶端對象client = AipOcr(APP_ID, API_KEY, SECRET_KEY)# 建立連接的超時時間,單位為毫秒client.setConnectionTimeoutInMillis(5000)# 通過打開的連接傳輸數據的超時時間,單位為毫秒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'])
執行結果:
車牌號碼:川QK9777車牌顏色:blue
上面代碼實現的是對一張圖片中的一個車牌進行識別,當然介面還支持對一張圖片中的多個車牌進行識別,只需使用
licensePlate(image, options) 即可, 以如下圖為例:
實現代碼如下:
from aip import AipOcr APP_ID = '自己的 App ID'API_KEY = '自己的 Api Key'SECRET_KEY = '自己的 Secret Key'# 創建客戶端對象client = AipOcr(APP_ID, API_KEY, SECRET_KEY)# 建立連接的超時時間,單位為毫秒client.setConnectionTimeoutInMillis(5000)# 通過打開的連接傳輸數據的超時時間,單位為毫秒client.setSocketTimeoutInMillis(5000) # 讀取圖片def get_file_content(filePath): with open(filePath, 'rb') as fp: return fp.read() image = get_file_content('cars.png')options = {}# 參數 multi_detect 預設為 falseoptions['multi_detect'] = 'true'res = client.licensePlate(image, options)for wr in res['words_result']: print('車牌號碼:' + wr['number']) print('車牌顏色:' + wr['color'])
執行結果:
車牌號碼:京N6HZ61
車牌顏色:blue
車牌號碼:魯NS1A26
車牌顏色:blue
最後
本文我們先對車牌識別進行了一些介紹,之後利用百度雲介面實現了單個和多個車牌的識別功能,通過本文我們可以對車牌識別
的相關概念和具體實現有一些瞭解。今天的分享到這裡就結束了,下一章見啦!!!