tesseract图像识别训练

1,项目背景介绍

该项目是一个监控类型的项目,其实有通过摄像头识别设备上液晶屏显示的温度,有A、B、C三类温度轮流在液晶屏上展示。

如图所示:

为了保证识别准确进行切片处理

再处理一下

img = img1.convert("L")

# 再处理一下
def img_to_binaryzation(img, threshold):
      img = img.convert("L")

      #  用设定的阈值建议一个映射表
      table = []
      for i in range(256):
      if i < threshold:
        table.append(0)
      else:
        table.append(1)

      #  通过映射表将图片转为二值图
      img = img.point(table, "1")
      return img

img = img_to_binaryzation(img1, 130)
img

用python做一个批量处理,把所有的从摄像头拿到的图片做一个切片

2,环境搭建

2.1 tesserac图像识别工具

2.1.1

  • Mac
brew install tesseract-lang

2.1.2设置环境变量

# 添加进环境变量不写
tesseract -v
# 出现上图中即可视作安装成功

2.2 jTessBoxEditor图像识别训练工具

https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/

无需安装,直接解压
但是使用jTessBoxEditor需要先安装java8。

2.3 Java8

https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

3 简单使用说明

3.1 tesseract

3.1.1 tesseract简单使用

新建一个文件夹,选择一张示例图片。

tesseract 1669878304.867834-82.jpg 166 -l num --psm 10

Tesseract 命令行前面的两个是识别的图片,以及识别输出的文件名,文件名符合变量命名规范即可。

-l num 其中num是自定义的语言,只要该语言在tessdata文件夹里面有对应的.traineddata文件就可以用,训练语言主要也是为了生成这个文件

--psm 10 以整张图片视作一个文字进行识别

Tesseract 命令行参数最重要的三个是 -l, --oem, --psm。

-l:控制输入文本的语言,用 eng 表示英文(默认语言),用 chi_sim 表示中文简体,用 chi_tra 表示中文繁体。

--oem:OCR Engine modes,Tesseract 有两个OCR引擎,使用 -oem 选择算法类型,有四种操作模式可供选择。

3.1.1 jTessBoxEditor简单使用

jTessBoxEditor使用必须安装java8

点击任意一个即可

使用步骤

在实际训练中使用起来并不好用,不如使用命令行的形式

4简单训练一次

4.1 合并样本文件

jTessBoxEditor ---> Tiils --->Merge TIFF

# 合并的样本文件格式不限,合并结果必须是tif或者tiff格式

选择文件类型----> 全部类型

Ctrl + 鼠标左键 尽可能多的多选择样本文件,点击打开

还在当前窗口, 文件名称写num.font.exp0.tif,点击保存

4.2 生成box文件

使用cmd切换到样本文件目录下

tesseract num.font.exp0.tif num.font.exp0 -l num --psm 10 batch.nochop makebox

这是在上一次的训练的基础上再次进行训练

tesseract num.font.exp0.tif num.font.exp0  batch.nochop makebox

也可以重新训练,或者在其他语言的基础上进行训练

自动生成了box文件

4.3 修改识别结果

使用jTessBoxEditor ---> Box Editor ---> open 打开num.font.exp0.tif,会自动关联到box文件

这是正常打开的box文件,右边是坐标轴,以整张图片进行识别基本不需要修改,左边的char需要根据实际图片内容进行修改。

如这张图片, 2需要修改为0, 修改完成后点击save保存一下,然后切换下一张。

4.3 手动创建font_properties文件

先创建font_properties.txt,文件里面写font 0 0 0 0 0 然后去掉txt后缀

font 0 0 0 0 0

其中font 与 num.font.exp0.tif中font对应,如果num.font.exp0.tif中改了,font也要改。

4.3 制作批量操作脚本

先手动创建do.txt文件,

echo Run Tesseract for Training.. 
tesseract.exe num.font.exp0.tif num.font.exp0 -l num --psm 10 nobatch box.train 
 
echo Compute the Character Set.. 
unicharset_extractor.exe num.font.exp0.box 
mftraining -F font_properties -U unicharset -O num.unicharset num.font.exp0.tr 


echo Clustering.. 
cntraining.exe num.font.exp0.tr 

echo Rename Files.. 
rename normproto num.normproto 
rename inttemp num.inttemp 
rename pffmtable num.pffmtable 
rename shapetable num.shapetable  

echo Create Tessdata.. 
combine_tessdata.exe num. 

echo. & pause

也可以手动一行行输入命令,操作上会比较繁琐。

其中tesseract.exe num.font.exp0.tif num.font.exp0 -l num --psm 10 nobatch box.train 根据实际情况是否携带参数
如果之前有训练文件一定要在参数中加进去,不然新训练的结果会误差极大

unicharset、mftraining,可以使用多个box文件,比如unicharset_extractor.exe num.font.exp0.box num.font.exp1.box等,只要后面统一修改即可,但是之前的必须分开

# 示例:
tesseract.exe num.font.exp0.tif num.font.exp0 -l num --psm 10 nobatch box.train 

tesseract.exe num.font.exp1.tif num.font.exp1 -l num --psm 10 nobatch box.train 

unicharset_extractor.exe num.font.exp0.box num.font.exp1.box

mftraining -F font_properties -U unicharset -O num.unicharset num.font.exp0.tr num.font.exp1.tr

cntraining.exe num.font.exp0.tr num.font.exp1.tr 

4.4,生成最终的traineddata文件

找到Tesseract中的tessdata文件夹替换即可使用

posted @ 2022-12-01 15:13  下个ID见  阅读(1340)  评论(0)    收藏  举报