Python+Keras+TensorFlow车牌识别

Posted 执念

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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,删除,使函数返回值由两个参数接收。
应该有两个文件需要此修改。

修改后:

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

以上是关于Python+Keras+TensorFlow车牌识别的主要内容,如果未能解决你的问题,请参考以下文章

python cnn tensorflow 车牌识别 网络模型

keras 与 tensorflow.python.keras - 使用哪一个?

keras与tensorflow.python.keras - 使用哪一个?

Keras + Tensorflow 和 Python 中的多处理

AttributeError:模块'tensorflow_core.python.keras.api._v2.keras.activations'没有属性'swish'

tensorflow和theano的python3 keras导入错误