tesseract5.0 图片训练模型实战

最近接了个活,有大批的图片需要文字识别

图片参考

是印刷字体打印后再扫描的图片,看到这种任务,首先想到的是用tesseract进行识别,印刷字体识别率很高

拿出工具进行识别分析,效果感人,5段文字,有3段都有识别错的,2和Z,3和S

进过多个图片测试,基本不可用,识别错的太多了

 对接百度通用识别,使用高精度版,准确率基本100%,不过百度账户有数量限制,客户有几千上万的图像需要识别,这个方式行不通,毕竟能免费为啥要付钱呢

免费测试网址:https://cloud.baidu.com/product/ocr/general

通过资料查阅,发现可以对某一类图片进行训练,即可大幅提升识别准确率

训练过程参考:

https://www.cnblogs.com/cnlian/p/5765871.html

虽然这个教程是3.0的,但是5.0一样训练,不影响流程

通过选取40个图片为训练样本,合并成一个tif,生成box文件,然后使用jTessBoxEditor修正错误,然后训练出模型文件

使用新的模型文件进行识别,果然识别率大幅上升,测试准确度有99.9%,大批量测试速度也很快,1秒100张的速度

 ==================================================================================

 ==================================================================================

这边分享一些中间遇到的坑和经验:

1.32位模型和64位模型不通用,而且32位训练我这边出问题直接训练不成功

2.提示无法读取box:APPLY_BOXES: boxfile line 3/G ((80,0),(80,0)): FAILURE! Couldn't find a matching blob

  这种错误大概率是训练图片太脏引起的,

  如下左边这种图片就不行,需要使用opencv进行二值化处理,白底黑字,参照右图

 

3.如果百度识别效果还可以,建议使用百度识别修改文件名,这样大幅减少人工识别纠正的工作量

4.建议使用opencv进行处理,寻找轮廓,自己生成box文件,读取文件名来匹配每个轮廓的文字内容,这样可以极大的减少工作量

  (jTessBoxEditor太难用了, 坐标得手动改,文字也要一个个改,不能放大,你要是改个100个,估计得崩溃)

  

  box文件,格式为【文字内容,p1, p2, p3, p4, 图片序号】

   

#opencv的rect转换为box文件格式坐标
def get_tesseract_box(x, y, w, h, height):
    p1 = x
    p4 = height - y
    p2 = p4 - h
    p3 = x + w
    return [p1, p2, p3, p4]

 height为图像高度

5.如果需要训练的样本比较多,建议首先使用小批量的图片训练出一个模型,然后使用这个模型来识别,作为原始图片名,可以大幅减少工作量

原文地址:https://www.cnblogs.com/darkspr/p/15451397.html