在使用tesseract-ocr进行字符识别时,我们使用了官方提供的字库,例如英文字库、中文字库,但这些字库并不一定能满足我们所有的需求。所以有些时候,我们就需要训练属于自己的自定义字库。废话少说,直接开干。
第一步:
tesseract-ocr 的安装略。 jTessBoxEditorFX的下载地址:
https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/
解压后打开后大概这样子。
第二步:
创建一个文件夹,里面存放即将训练的图片。以我这边为例:
我放了一张图片: D/ocrtest/test.png
第三步:
打开jTessBoxEditorFX软件,在 Tools下,选择Merge TIFF,定位到训练图片文件夹下,选中所有训练图片,然后开始合并成为一张.tif格式的图片。
注意图片命名格式:字库名称.字体.exp0.tif
这边我的字库较 num 字体叫 font
成功后会弹出以下窗口,并在同目录下生成一张num.font.exp0.tif的图片。
第四步:
使用tesseract生成.box文件
CMD打开命令提示符,num.font.exp0.tif文件所在目录,执行以下命令:
tesseract num.font.exp0.tif num.font.exp0 –l eng batch.nochop makebox
执行后你会发现在训练图片同路径下,生成一份 num.font.exp0.box 文件
这时候你用 jTessBoxEditorFX 打开num.font.exp0.tif,就会自动导入box文件。
然后你要开始对识别不正确的字符进行边框调整,调整好之后保存起来。
第五步 :
手动在该训练图片所在文件夹下建立一个名为 “font_properties” 的文件,这个文件没有后缀名称,输入内容 “font 0 0 0 0 0” , 表示字体 font 的粗体、倾斜等共计5个属性全都设置为0
第六步:
使用tesseract生成num.font.exp0.tr训练文件,在命令提示符中输入:
tesseract num.font.exp0.tif num.font.exp0 nobatch box.train
此时,在该文件夹下已生成:num.font.exp0.tr文件。
第七步:
生成字符集文件,在命令提示符中输入:
unicharset_extractor num.font.exp0.box
此时你会在该文件夹下看到名为:unicharset的文件。
紧接着,需要生成数据字典
执行命令一:
mftraining -F font_properties -U unicharset -O num.unicharset num.font.exp0.tr
执行命令二:
cntraining num.font.exp0.tr
执行完这2条命令之后,你会在当前目录下生成 4 个文件(inttemp、pffmtable、normproto、shapetable),
然后,紧接着,你需要在这4个文件重命名,前面统一加上 字库名称.该文件名 以我这个为例,我的字库名称是num。所以这个文件重命名后分别命名为:
num.inttemp
num.pffmtable
num.normproto
num.shapetable
最后一步:
合并数据文件,生成字库文件,执行指令:
combine_tessdata num.
此时你会在同目录下,看到这个训练好的库文件
然后把库文件分别放到
C:\Program Files (x86)\Tesseract-OCR\tessdata下
和
D:\jTessBoxEditorFX\tesseract-ocr\tessdata下
(注意:以上这是我自己的路径,要自行核对自己的安装路径)
然后就可以使用自己的字库进行预测了:
1.查看字库是否存在,指令:tesseract --list-langs
2.字符集验证测试图片预测:
tesseract test.png out -l num
3.python 代码实现测试图片预测:
import pytesseract
from PIL import Image
import cv2 as cv
imgpath = 'D:/ocrtest/test.png'
img = cv.imread(imgpath,cv.IMREAD_COLOR)
msg = pytesseract.image_to_string(img,lang = 'num')
msg = msg.replace('', '')
print(msg)
msg = msg.replace('\n', '')
print(msg)
cv.imshow('t',img)
cv.waitKey(0)
参考:https://keras-lx.blog.csdn.net/article/details/90292350
https://blog.csdn.net/sylsjane/article/details/83751297