------韦访 20181016
1、概述
上一讲学习了怎么样用opencv识别车牌,但是,我们只做到了将车牌上的字符分割出来,还没有对字符进行识别,这一讲先来学习OCR(Optical Character Recognition,光学字符识别)。目前OCR用的比较多的是开源框架Tesseract-OCR,所以就挑这个来学学。
2、Tesseract-OCR安装
Ubuntu的话,直接执行命令:
sudo apt-get install tesseract-ocr
就可以安装了,我没试过。下面我们用源码安装。
下载tesseract-ocr源码:
Github地址为:https://github.com/tesseract-ocr/tesseract
安装步骤可以参考文档:https://github.com/tesseract-ocr/tesseract/wiki/Compiling
安装依赖:
首先安装一些依赖工具和库:
sudo apt-get install g++ # or clang++ (presumably)
sudo apt-get install autoconf automake libtool
sudo apt-get install pkg-config
sudo apt-get install libpng-dev
sudo apt-get install libjpeg8-dev
sudo apt-get install libtiff5-dev
sudo apt-get install zlib1g-dev
如果想自己训练数据,则还要安装以下工具:
sudo apt-get install libicu-dev
sudo apt-get install libpango1.0-dev
sudo apt-get install libcairo2-dev
再安装Leptonica:
注意Tesseract和Leptonica版本的对应,如下表,
安装命令如下,
wget http://www.leptonica.org/source/leptonica-1.74.4.tar.gz
tar -zxvf leptonica-1.74.4.tar.gz
cd leptonica-1.74.4/
./configure
make -j8
编译安装:
先cd到源码的根目录,然后运行
mkdir local
./autogen.sh
./configure --with-extra-libraries=/usr/local/include
make -j8
sudo make install
sudo ldconfig
如果上面命令都通过,再执行命令
tesseract
如果打印如下信息则说明安装成功。
安装语言包:
git clone https://github.com/tesseract-ocr/tessdata.git
然后将所有的.traineddata文件拷贝到/usr/local/share/tessdata/文件夹。
用tesseract测试文字识别:
我们要识别的图片如上图,运行以下命令,
tesseract 05.png 05 -l chi_sim
-l可以指定字库文件,chi_sim是识别中文的字库,运行后会生成05.txt文本文件,
可以看到,中文识别出来了,但是英文的都识别出什么鬼咯!那指定一个英文的字库文件看看效果如何?运行命令,
tesseract 05.png 05_en -l eng
运行结果,
这下英文识别正确,中文没识别出来。就不能同时识别中文和英文吗?字库就不能混用吗?百度了以下,蛮多人都有这个疑问的,找了老半天,在这个博客找到方法,
https://www.jianshu.com/p/f09045a4fc8a
把两个字库用加法”+”连起来就可以了,命令如下,
tesseract 05.png 05 -l chi_sim+eng
运行结果,
3、Python编程
想让python调用tesseract,得先执行以下命令安装pytesseract,
sudo pip install pytesseract
安装好以后,识别图片里的字符就很简单了,执行以下代码,
import pytesseract as pyt
from PIL import Imageimg = Image.open('05.png')
text = pyt.image_to_string(img, lang='chi_sim+eng')
print(text)
运行结果:
4、试着用官方字库识别车牌
上面的例子既然能识别中文、英文和数字,那么,能否直接用来识别我们上一讲提取出来的车牌呢?试试看,
扣出来的字符图片为,代码如下,
#encoding:utf-8
import pytesseract as pyt
from PIL import Imageimg = Image.open('chepai_img0.jpg')
text = pyt.image_to_string(img, lang='chi_sim+eng')
print('车牌:' + str(text))
运行结果:
什么都没识别到,试试中文呢?原图片为,运行结果:
也什么都没识别出来。
5、训练
既然使用官方的字库无法识别出字符,那么,我们就应该训练自己的数据,训练需要用到一个工具---jTessBoxEditorFX,这个工具是java写的,我的系统是ubuntu,jTessBoxEditorFX根目录如下图,
Windows系统直接双击train.bat文件即可,linux系统则运行train脚本,我电脑运行脚本后,提示错误如下:
Error: Could not find or load main class net.sourceforge.tessboxeditor.JTessBoxEditor
搞了半天不知什么原因,在我自己的电脑上运行也是这个问题,我就想会不会是这个工具不支持openjdk导致的?因为我两台电脑安装的都是openjdk,然后,将openjdk改成Oracle的,果然就可以了。因为公司电脑要编译安装7.1系统,只能用Openjdk,所以就不改公司电脑环境了,先往后学,以后再补上OCR自己训练字库这部分。
---------------------------------------------20210103---------------------------------------------
深度学习版车牌识别(包含字符检测和文字识别)请看下面的博客:
https://blog.csdn.net/rookie_wei/article/details/112129898