Tesseract-OCR 4.1

前言

Tesseract-OCR一款免费的开源图像OCR文字识别引擎,初期Tesseract引擎由惠普(HP)实验室研发,后来贡献给了开源软件业,后由Google进行改进、修改bug、优化,重新发布。它就能根据你的命令将你想要识别的图片中的文字转换成文本的形式。到目前为止,它已经支持简体中文、繁体中文、英文、日文、韩文等等60多种语言的识别。

环境准备

1. 安装tesseract 4.1版本

image-20210530130753699.png

  • 安装过程一直点击“下一步”即可,安装路径可以自定义,语言库不需要勾选,反正后期要自己去GitHub上下载最佳模型。

2. 下载tessdata_best

什么是tessdata_best?

​ tessdata_best是我们后期准备使用 tesseract 的LSTM 技术最佳的训练模型。

image-20210530145456699.png

  • 解压后把以下4个文件复制粘贴至Tesseract-OCR\tessdata目录

    • chi_sim.traineddata
    • chi_sim_vert.traineddata
    • chi_tra.traineddata
    • chi_tra_vert.traineddata

3. 安装pytesseract

为了在python代码中使用tesseract功能,使用pip安装pytesseract

  • 测试代码如下:

    from PIL import Image
    import pytesseract
    text = pytesseract.image_to_string(Image.open(r'D:\train\1.jpg'),lang='chi_sim')
    print(text)
    复制代码
  • 使用pytesseract时,可能遇到的报错

     raise TesseractNotFoundError()
    pytesseract.pytesseract.TesseractNotFoundError: tesseract is not installed or it's not in your path
    复制代码

    添加了全局变量,还是提示tesseract没有安装或者不在PATH中

    pytesseract安装后,在python的Lib目录下site-packges下会生成一个pytesseract文件夹,文件夹中找到pytesseract.py,找到如下代码

    tesseract_cmd = 'tesseract'
    复制代码

    将tesseract_cmd = 'tesseract'修改为:tesseract_cmd = 'D:\Tesseract-OCR\tesseract.exe'

    表示tesseract_cmd配置的是你安装tesseract的绝对路径,这样就能找到tesseract了。

4.配置环境变量

步骤1. 将安装路径添加到系统环境变量的Path中

image-20210530131140246.png

image-20210530131225935.png

步骤2:将tessdata(训练的字库文件) 加到系统变量

变量名为TESSDATA_PREFIX

变量值为tessdata目录的路径

image-20210530131802297.png

配置完成后在命令行输入tesseract -v,如果出现如下图所示,说明环境变量配置成功

基本指令:

tesseract --version 查看tesseract版本

tesseract --list-langs 查看tesseract当前含有的语言库

image-20210530131422933.png

5. 下载jTessBoxEditor

为什么要下载 jTessBoxEditor

tesseract 训练时,需要 jTessBoxEditor 将样本合成tif文件
这个软件需要有JAVA的环境(JRE),有关JAVA的安装和环境变量配置比较简单,这里就不介绍了,注意如果没有java环境这个软件是运行不起来的。

下载地址: sourceforge.net/projects/vi…

进入下载页面,选择 “jTessBoxEditor-2.3.1.zip”

image.png

解压后,双击 jTessBoxEditor.jar 即可使用,界面如下

image.png

简单的转换

1. 转换流程

先准备一张图片文件,如 1.png

1.jpg

将命令行切换至目标图像文件目录,比如我们转换文件为1.png(图片文件允许多种格式),位于D:\train;然后在命令行中输入

tesseract 1.jpg test -l chi_sim --psm 7
复制代码

如下图操作

image-20210530160419535.png

打开txt文件,查看输出结果

image-20210530155004452.png

2. 命令解读

tesseract 图片名 输出文件名 -l 字库文件 -psm pagesegmode

  • -l chi_sim 表示用简体中文字库(需要下载中文字库文件,解压后,存放到tessdata目录下去,字库文件扩展名为.raineddata 简体中文字库文件名为: chi_sim.traineddata)

  • -psm 7 表示test.png图片是一行文本 这个参数可以减少识别错误率. 默认为 3

    Page segmentation modes (--psm) 页面分段模式(翻译)
    0 Orientation and script detection (OSD) only. 仅限方向和脚本检测(OSD)
    1 Automatic page segmentation with OSD. 使用OSD自动分页
    2 Automatic page segmentation, but no OSD, or OCR. (not implemented) 自动页面分割,但没有OSD或OCR
    3 Fully automatic page segmentation, but no OSD. (Default) 全自动页面分割,但没有OSD(默认)
    4 Assume a single column of text of variable sizes. 假设一列可变大小的文本
    5 Assume a single uniform block of vertically aligned text. 假设一个垂直对齐文本的统一块
    6 Assume a single uniform block of text. 假设一个统一的文本块
    7 Treat the image as a single text line. 将图像视为单个文本行
    8 Treat the image as a single word. 将图像视为单个单词
    9 Treat the image as a single word in a circle. 将图像视为圆形中的单个单词
    10 Treat the image as a single character. 将图像视为单个字符
    11 Sparse text. Find as much text as possible in no particular order. 稀疏文字。找到尽可能多的文本,没有特定的顺序
    12 Sparse text with OSD. 带OSD的稀疏文本
    13 Raw line. Treat the image as a single text line, 将图像视为单个文本行

LSTM训练流程

简介

Tesseract 4 包含了一个新的基于 神经网络 的识别引擎,该引擎在(document image文档图像)识别的精确性上相比以前的版本有了一个显著的提高。由于tesseract的中文语言包“chi_sim”对中文手写字体或者环境比较复杂的图片,识别正确率不高,因此需要针对特定情况用自己的样本进行训练,提高识别率,通过训练,也可以形成自己的语言库。

训练流程

1. 生成tif文件

  • 使用 jTessBoxEditor 合并多个要验证的图片,生成tif

为了进行后续的操作,合并后的文件名需要按照一定的规则来命令
[lang].[fontname].exp[num].tif

  • lang表示语言名称
  • fontname表示字体名称
  • num表示序号

我们将tif的文件名保存为了:nml.num.exp0.tif

2. 生成tif图片的box盒子文件

tesseract nml.num.exp3.tif nml.num.exp3 -l chi_sim batch.nochop makebox

运行上述命令,我们的文件夹下会生成一个名为nml.num.exp3.box的文件。

3. 补充和修正box盒子文件

打开之前的JTessBoxEdit软件,点击“Box Editor”选项卡,加载TIF文件对box进行修改(box文件和tif文件需要在同一个文件夹下)

image.png image.png image.png

4. 生成lstmf文件

tesseract nml.num.exp3.tif nml.num.exp3 -l chi_sim --psm 6 lstm.train

运行上述命令,我们的文件夹下会生成一个名为nml.num.exp3.lstmf的文件。

5. 提取语言的LSTM文件

将环境准备的第2步,使用tessdata_best中的.traineddata文件中提取.lstm文件
将下载好的.traineddata文件拷贝到训练文件夹下

combine_tessdata -e chi_sim.traineddata chisim.lstm

运行上述命令,我们的文件夹下会生成一个名为chisim.lstm的文件。

6. 开始LSTM训练

注意:我们需要新建一个名为chitraing.txt的文本文件,在里面填入第4步生成的lstmf文件的绝对路径(如下图)
image.png

lstmtraining --model_output="D:\Program Files (x86)\train1\output" --continue_from="D:\Program Files (x86)\train1\chisim.lstm" --train_listfile="D:\Program Files (x86)\train1\chitraing.txt" --traineddata="D:\Program Files (x86)\train1\chi_sim.traineddata"

7. 合成新的traineddata文件

lstmtraining --stop_training --continue_from="D:\Program Files (x86)\train1\output_checkpoint" --traineddata="D:\Program Files (x86)\train1\chi_sim.traineddata" --model_output="D:\Program Files (x86)\train1\test.traineddata"

8. 移动新的traineddata文件

在文件夹下会生成一个名为test.traineddata的文件,我们将其复制到Tesseract-OCR的tessdata文件夹下,就可以使用其作为一个语言进行文字识别了。

Guess you like

Origin juejin.im/post/6972552405770567716