车牌识别(end-to-end-for-chinese-plate-recognition)项目搭建基于Mxnet(Python 3.5)

摘要:
项目github连接:https://github.com/szad670401/end-to-end-for-chinese-plate-recognition,本机环境Win864bit。这个项目基于Python,所以首先安装Python。遵循使用最新版本的原则,选择Python 3.5.21.Python下载连接:https://www.python.org/downloads/release/python-352/根据操作系统,我选择以下版本。2.安装Python并配置环境变量。3.安装vs2015。因为mxnet中使用了vs2015库,所以需要提前安装vs2015。否则,我将报告“error:Setupscriptexitedwitherror:Unabletofindvcvarsall.bat”的下载地址:http://103.254.64.34:9999/download.microsoft.com/download/5/f/7/5f7acaeb-8363-451f-9425-68a90f98b238/visualcppbuildtools_full.exe

最近看到geihub上有个车牌识别的项目,感觉很有意思,从上面fork了一下弄到本地自己跑了下。在安装过程中遇到了一些问题,记录如下。

项目github连接:https://github.com/szad670401/end-to-end-for-chinese-plate-recognition ,本机环境Win8 64bit

该项目是基于Python做的,所以首先安装python,本着用最新版本的原则,选择了Python3.5.2(开始用的32位版本,中间不能加载libmxnet.dll,后改为用64bit)

1.Python下载连接:https://www.python.org/downloads/release/python-352/ 依据操作系统进行选择,我选择的是如下版本车牌识别(end-to-end-for-chinese-plate-recognition)项目搭建基于Mxnet(Python 3.5)第1张

2.安装Python,并配置好环境变量

3.安装vs2015,由于mxnet中使用了vs2015的库,所以需要提前安装vs2015,不然后报"error: Setup script exited with error: Unable to find vcvarsall.bat”下载地址:http://103.254.64.34:9999/download.microsoft.com/download/5/f/7/5f7acaeb-8363-451f-9425-68a90f98b238/visualcppbuildtools_full.exe。

4.下载Mxnet ,地址:https://github.com/dmlc/mxnet/releases 我下载的是20160531_win10_x64_cpu.7z

5.安装Mxnet ,解压上面的压缩包后进入mxnet目录,执行setupenv.cmd 然后进入该目录下的python目录,执行python setup.py install 命令进行安装

6.下载opencv,下载地址:http://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv 我选择的是:opencv_python-3.1.0+contrib_opencl-cp35-cp35m-win_amd64.whl

7.安装opencv ,在python安装目录执行 pip installopencv_python-3.1.0+contrib_opencl-cp35-cp35m-win_amd64.whl

8.下载Pillow,由于官方目前PIL没有3.5版本,故采用非官方的Pillow替代,下载地址:http://www.lfd.uci.edu/~gohlke/pythonlibs/#pillow 版本:Pillow-3.3.1-cp34-cp34m-win_amd64.whl

9.安装Pillow,在python安装目录执行 pip installPillow-3.3.1-cp34-cp34m-win_amd64.whl

到此安装过程完毕,用IDEA打开执行,但是报了如下错误,并附上解决办法;

错误1.

error: (-215) ssize.area() > 0 in function cv::resize 传入文件为空 错误原因:genplate.py的generate函数中
L163 len(text) == 9改为len(text) == 7
错误2

L164 text.decode(encoding="utf-8")改为text.encode('utf-8').decode(encoding="utf-8") (python3.5特性)
错误3.

找不到xrange

原因:使用3.5内置的range替代2.7的xrange 修改方法:xrange--range
range内除法操作如range(self.count / self.batch_size)需改为 range((int)(self.count / self.batch_size))
不然有 “'float' object cannot be interpreted as an integer”错误

修改后的代码github连接:https://github.com/ibyte2011/end-to-end-for-chinese-plate-recognition

安装好后开始训练;一个2.5Ghz的 CPU

实验一:训练了4个小时,训练数据3w准确率约为60%

车牌识别(end-to-end-for-chinese-plate-recognition)项目搭建基于Mxnet(Python 3.5)第2张

开始测试:

车牌识别(end-to-end-for-chinese-plate-recognition)项目搭建基于Mxnet(Python 3.5)第3张

由于训练时间过短,检测全部错误。等花一天训练后再试。

实验二:

训练数据12.5W,时间17hours,准确率70%

车牌识别(end-to-end-for-chinese-plate-recognition)项目搭建基于Mxnet(Python 3.5)第4张

测试:

车牌识别(end-to-end-for-chinese-plate-recognition)项目搭建基于Mxnet(Python 3.5)第5张

从测试结果看这次好于实验一,有一个字母识别错误,不过在多次测试过程中,清楚字体如下图情况下识别完全正确:

车牌识别(end-to-end-for-chinese-plate-recognition)项目搭建基于Mxnet(Python 3.5)第6张

在字体模糊或者变形严重情况下识别会出现错误比较大,7个只对了1个。

车牌识别(end-to-end-for-chinese-plate-recognition)项目搭建基于Mxnet(Python 3.5)第7张

故加大实验数据进行实验三。

实验三:调整了准确率计算函数参数,将train.py L135行

pred.shape[0] / 4  改为  pred.shape[0] / 7 训练12.5 hours 准确率为94%

车牌识别(end-to-end-for-chinese-plate-recognition)项目搭建基于Mxnet(Python 3.5)第8张

测试:

车牌识别(end-to-end-for-chinese-plate-recognition)项目搭建基于Mxnet(Python 3.5)第9张

模糊测试:

车牌识别(end-to-end-for-chinese-plate-recognition)项目搭建基于Mxnet(Python 3.5)第10张

车牌识别(end-to-end-for-chinese-plate-recognition)项目搭建基于Mxnet(Python 3.5)第11张

从测试结果看明显好于实验二。

简单记录,希望对此项目感兴趣的同学有帮助。

免责声明:文章转载自《车牌识别(end-to-end-for-chinese-plate-recognition)项目搭建基于Mxnet(Python 3.5)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇java将Excel文件上传并解析为List数组dbUtils 工具类介绍下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

java+opencv实现图像灰度化

灰度图像上每个像素的颜色值又称为灰度,指黑白图像中点的颜色深度,范围一般从0到255,白色为255,黑色为0。所谓灰度值是指色彩的浓淡程度,灰度直方图是指一幅数字图像中,对应每一个灰度值统计出具有该灰度值的象素数。   灰度就是没有色彩,RGB色彩分量全部相等。如果是一个二值灰度图象,它的象素值只能为0或1,我们说它的灰度级为2。用个例子来说明吧:一个25...

在lua环境中使用protobuf

最近在cocos2dx的项目中,需要在LUA脚本层使用protobuf协议。官方已经推出了很多种语言的版本。但唯独LUA版本不全。于是开始研究protobuf在LUA下的实现,将完整的过程记录了下来,希望对其它人能有所帮助。 1、下载protoc-gen-lua 可以通过HG从服务器(hg clonehttps://code.google.com/p/pr...

OCR库Tesseract初探

1.Tesseract 安装及使用 一款由HP实验室开发由Google维护的开源OCR(Optical Character Recognition , 光学字符识别)引擎,与Microsoft Office Document Imaging(MODI)相比,我们可以不断的训练的库,使图像转换文本的能力不断增强;如果团队深度需要,还可以以它为模板,开发出符合...

python:动态参数*args

动态参数   顾名思义,动态参数就是传入的参数的个数是动态的,可以是1个、2个到任意个,还可以是0个。在不需要的时候,你完全可以忽略动态函数,不用给它传递任何值。 Python的动态参数有两种,分别是*args和**kwargs,这里面的关键是一个和两个星号的区别,而不是args和kwargs在名字上的区别,实际上你可以使用*any或**whatever的...

visdom使用

最近要跑一个faster-rcnn的代码,用到了visdom,因此记录一下使用方法 1、在服务器上运行 python -m visdom.server 发现一直是Downloading scripts, this may take a little while,在网上找了一些方法, 找到visdom模块安装位置 其位置为python或anaconda安装目...

Python里的迭代器

迭代器(iterator)协议 · 在Python中,支持迭代器协议就是实现对象的__iter__()和__next__()方法。   1.__iter__()方法:返回迭代器对象本身;         2.__next__()方法:返回容器中的下一个元素,在结尾时引发Stoplteration异常终止迭代器。 可迭代对象(iterable)·  实现了迭...