Python+Keras+TensorFlow車牌識別


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下來

  • 然后把clone下來的開源庫中的hyperlpr_py3文件夾復制到 anaconda安裝路徑\Anaconda3\Lib 下,並改名為hyperlpr。例如如果anaconda是安裝在C盤的,那么完整路徑應該為C:\Users\您的計算機用戶名\Anaconda3\Lib\hyperlpr。下文的修改也是對這個文件夾中的文件進行的。

  • 在任意位置創建一個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:

  • 1

File "D:\anaconda\lib\hyperlpr\recognizer.py", line 8, in
K.set_image_dim_ordering('tf')
AttributeError: module 'keras.backend' has no attribute 'set_image_dim_ordering'

這個原因是,keras在有些較新的版本中沒有set_image_dim_ordering()函數,而是改成了image_data_format()函數。

修改方法是,在所有報這個錯的文件中把

K.set_image_dim_ordering('tf')

改成:

K.image_data_format()

修改后:

如果你使用的是較低版本的keras,那就反着改。若IDE詢問是否要修改文件,選是即可。應該有三個文件需要此修改。

  • 2

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

修改后:

現在運行程序應該就會驚喜的發現運行成功啦!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM