使用Tesseract提取图像中的文字

针对图像中的标准的印刷体文字,Tesseract或许是一个简单、高效的图片OCR方案选择。

前期准备

以Deepin为例,首先安装Tesseract 4.00,python依赖pytesseract和Pillow,并定义好环境变量。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 1. 安装Tesseract 4.00版本
sudo apt-get tesseract-ocr
# 2. 安装Tesseract 4.00 中文简体识别模型
sudo apt install tesseract-ocr-chi-sim
# 查看支持的语言:chi_sim指中文简体、eng指英文字体
tesseract --list-langs
# 查看目前系统已经安装的字体
text2image --fonts_dir /usr/share/fonts --list_available_fonts
# 3. 定义环境变量,不然会报错:“Failed loading language 'eng' Tesseract couldn't load any languages!”
export TESSDATA_PREFIX=/usr/share/tesseract-ocr/4.00/tessdata/
# 4. 安装python库
sudo pip install pytesseract
# 5. 安装python图片处理库
sudo pip install Pillow
# 6. 把langdata_lstm和tesseract两个项目clone到本地,这两个项目是为了训练字体模型而准备的,如果仅仅使用默认的模型去识别字体那么不用clone这两个项目也行(项目体积有点大,clone时间会比较长)
git clone https://github.com/tesseract-ocr/langdata_lstm
git clone https://github.com/tesseract-ocr/tesseract

生成待训练字体数据集

由于中文存在不同的字体形式,如果使用场景中有别的字体,比如隶书,那默认的字体识别模型效果就不会很好,所以有的时候需要根据场景中的字体训练相对应的字体识别模型。以下以生成华文行楷字体的训练数据集为例(前提是机器已经安装好了该字体),然后执行生成训练数据步骤:

1
2
3
4
5
6
7
8
9
~/image_projects/tesseract/src/training/tesstrain.sh \
--fonts_dir /usr/share/fonts \
--lang chi_sim --linedata_only \
--noextract_font_properties \
--langdata_dir ~/image_projects/langdata/langdata_lstm \
--tessdata_dir ~/image_projects/tesseract/tessdata \
--save_box_tiff --maxpages 150 \
--fontlist "STXingkai" \
--output_dir ~/image_projects/model

参数解释:

  • --fonts_dir 字体安装目录
  • --langdata_dir 上一节中clone下来的langdata_lstm项目
  • --tessdata_dir 上一节中clone下来的tesseract项目
  • --fontlist 你需要训练字体的名称

训练

1
2
3
4
5
OMP_THREAD_LIMIT=8 lstmtraining --model_output ~/image_projects/model/STXingkai \
--continue_from ~/image_projects/tesseract/tessdata/chi_sim.lstm \
--traineddata ~/image_projects/tesseract/tessdata/chi_sim.traineddata \
--train_listfile ~/image_projects/model/chi_sim.training_files.txt \
--max_iterations 2000

评估

此处的评估结果并不会给出准确率或者相关的评估指标,只会给出原文和识别结果的对比。

1
2
3
lstmeval --model ~/image_projects/tesseract/tessdata/chi_sim.lstm \
--traineddata ~/image_projects/tesseract/tessdata/chi_sim.traineddata \
--eval_listfile ~/image_projects/model/chi_sim.training_files.txt
1
lstmeval --model STXingkai_checkpoint --traineddata ~/image_projects/tesseract/tessdata/chi_sim.traineddata  --eval_listfile chi_sim.training_files.txt

与现有的模型合并

1
2
3
4
lstmtraining --stop_training \
--continue_from ~/image_projects/model/STXingkai_checkpoint \
--traineddata ~/image_projects/tesseract/tessdata/chi_sim.traineddata \
--model_output ~/image_projects/model/chi_sim_xingkai.traineddata

现在,查看当前的系统支持的字体模型,已经支持华文行楷chi_sim_xk的识别了。

1
2
# 查看支持的语言:chi_sim指中文简体、eng指英文字体
tesseract --list-langs
1
2
3
4
5
6
List of available languages (5):
osd
chi_sim_xk
chi_sim_vert
eng
chi_sim

相关链接

https://github.com/tesseract-ocr/langdata_lstm
https://0o0.me/legendary/tesseract-fine-tune.html
https://qianjiye.de/2015/08/tesseract-ocr#outline_0
https://iami.xyz/Review-S05-Tesseract-lstm-traning-datafile/
https://0o0.me/legendary/tesseract-fine-tune.html

如果对您有帮助,您的一分钱赞赏也是对我莫大的鼓励~
0%