車牌識別在高速公路中有著廣泛的應用,比如我們常見的電子收費(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
最后
本文我們先對車牌識別進行了一些介紹,之后利用百度云介面實作了單個和多個車牌的識別功能,通過本文我們可以對車牌識別
的相關概念和具體實作有一些了解,今天的分享到這里就結束了,下一章見啦!!!

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/458622.html
標籤:Python
上一篇:python函式
