1. 程式人生 > >Python+Keras+TensorFlow車牌識別

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,刪除,使函式返回值由兩個引數接收。
應該有兩個檔案需要此修改。

修改後:

現在執行程式應該就會驚喜的發現執行成功啦