Press "Enter" to skip to content

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

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询问是否要修改文件,选是即可。应该有三个文件需要此修改。

 

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,删除,使函数返回值由两个参数接收。

 

应该有两个文件需要此修改。

 

修改后:

 

 

现在运行程序应该就会惊喜的发现运行成功啦!

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注