Python+Keras+TensorFlow車牌識別
- 這個是我使用的車牌識別開源專案的地址:https://github.com/zeusees/HyperLPR
Python 依賴
Anaconda for Python 3.x on Win64
Keras (>2.0.0)
Theano(>0.9) or Tensorflow(>1.1.x)
Numpy (>1.10)
Scipy (0.19.1)
OpenCV(>3.0)
Scikit-image (0.13.0)
PIL
準備工作:安裝以下依賴包
pip install pyinstaller -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
pip install Keras
pip install Theano
pip install Numpy
pip install Scipy
pip install opencv-python
pip install scikit-image
pip install pillow
pip install tensorflow安裝過程中可能出現Time out錯誤如下
raise ReadTimeoutError(self._pool, None, 'Read timed out.')
pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out.
不要慌,重新輸入一次安裝命令。如:pip install pillow
執行
把程式碼clone下來以後準備在pycharm上執行
我們建立一個LPR的目錄,將開源庫中的Font和model拷到此目錄,建立一個car的目錄,放置待識別車牌的車輛照片,命名為1.jpg,2.jpg,3.jpg。
在LRP資料夾中新建一個 Python3的Python檔案,輸入如下程式碼:
from hyperlpr import pipline as pp
import cv2
#自行修改檔名
image = cv2.imread("./car/1.jpg")
image,res = pp.SimpleRecognizePlate(image)
print(res)
我的Python環境:
Python 3.7
cv2 4.1.0
Keras 2.3.1
TensorFlow 2.0.0
解決bug
- 這裡我遇到兩個bug:
File "D:\anaconda\lib\hyperlpr\recognizer.py", line 8, in
這個原因是,keras在有些較新的版本中沒有set_image_dim_ordering()函式,而是改成了image_data_format()函式。
修改方法是,在所有報這個錯的檔案中把
K.set_image_dim_ordering('tf')
改成:
K.image_data_format()
修改後:
如果你使用的是較低版本的keras,那就反著改。若IDE詢問是否要修改檔案,選是即可。應該有三個檔案需要此修改。
File "D:\anaconda\lib\hyperlpr\finemapping.py", line 41, in findContoursAndDrawBoundingBox
imagex, contours, hierarchy = cv2.findContours(binary_niblack.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
ValueError: not enough values to unpack (expected 3, got 2)
這個原因是,在opencv2中cv2.findContours()函式返回兩個值:contours,hierarchy。而opencv3及以後會返回三個值,分別是img, countours, hierarchy。
這裡直接把報錯檔案中對應行的imagex,刪除,使函式返回值由兩個引數接收。
應該有兩個檔案需要此修改。
修改後:
現在執行程式應該就會驚喜的發現執行成功啦