当前位置: 代码迷 >> 综合 >> OpenCV3入门教程(三)Tesseract-OCR
  详细解决方案

OpenCV3入门教程(三)Tesseract-OCR

热度:70   发布时间:2023-12-18 16:01:37.0

------韦访 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

  相关解决方案