Tesseract OCR训练时碰到的问题和解决方案

2023-05-16

关于如何用Tesseract-OCR训练我就不重复了,大家可以直接参考下面的案例,

使用tesseract训练自己的字库提高识别率_SeventhBlue的博客-CSDN博客_tesseract训练自己的字库

OCR 文字识别 - boyang987 - 博客园

随着tesseract版本的不断更新,发现2021年3月18日和以后编译的版本在训练时都存在问题,源码里有不少BUG[https://github.com/tesseract-ocr/tesseract/issues/3925];于是,我只好在github上拉下了以前的版本进行验证,

git clone --recursive  -b 5.0.0-alpha-20201224  https://github.com/tesseract-ocr/tesseract  tesseract500A2012

接下来,用cmake-gui进行配置后编译即得到最终的代码,这些基础的过程就不详述了,毕竟没时间写成系列的教学篇章。

使用的过程的指令大致如下,

(1) 加路径到环境变量
E:\pkg_ocr\tesseract\tesseract520

(2) 编辑图片
cd  E:\pkg_ocr\tesstrain\jTessBoxEditor231
train.bat ----> jTessBoxEditor  ---> merge TIFF ---> save it as myfontlab.normal.exp0.tif

(3) 在命令窗口进行操作,
tesseract  myfontlab.normal.exp0.tif   myfontlab.normal.exp0   batch.nochop   makebox
tesseract   myfontlab.normal.exp0.tif    myfontlab.normal.exp0   nobatch   box.train
注意:如果发现empty这样的报错,不能通过box检查,就需要调整对比度或亮度,然后再合成tif

(4)
unicharset_extractor myfontlab.normal.exp0.box

(5)
echo normal 0 0 0 0 0 > font_properties
注意,文件的名字就是font_properties它没有.txt后缀(我用的font_properties.txt发现也没有问题)。里面内容写入 normal 0 0 0 0 0 表示默认普通字体。
注意这里的normal要和myfontlab.normal.exp0.tif中的normal一样。

(6)
shapeclustering -F font_properties -U unicharset myfontlab.normal.exp0.tr
或者
shapeclustering -F font_properties.txt -U unicharset myfontlab.normal.exp0.tr

(7)
mftraining  -F font_properties -U unicharset -O train.unicharset myfontlab.normal.exp0.tr
生成inttemp、pffmtable文件的时候,如果上面命令不行的话,或者报错,就使用下面的命令,
mftraining -F font_properties.txt -U unicharset -O train.unicharset myfontlab.normal.exp0.tr

(8)
cntraining myfontlab.normal.exp0.tr

(9)
combine_tessdata normal

(10)测试成功会生成一个t_7B-normal.txt的文件,如下
tesseract E:\test_images\ocr\t_7B.png  E:\test_images\ocr\t_7B-normal -l normal

问题1:

mftraining.exe Warning no protos configs for -something-  in CreateIntTemplates() when use command mftraining

这个主要是样本量不够引起的,例如你要训练的某个字符只有小于5个的样本,最好你需要准备10个样本。

问题2:

combine_tessdata.exe: Error: traineddata file must contain at least (a unicharset fileand inttemp) OR an lstm file. 

这个问题我在github上有回复,

https://github.com/tesseract-ocr/tesstrain/issues/156

就是在生成各种文件后,

cntraining mytest.normal.exp0.tr 

inttemp 
normproto 
pffmtable 
shapetable 
unicharset 

需要把这些文件重命名为

normal.inttemp 
normal.normproto 
normal.pffmtable 
normal.shapetable 
normal.unicharset 

然后再执行combine_tessdata normal,就可以得到最终训练的结果,我得到的输出 如下,

Combining tessdata files 
Output normal.traineddata created successfully. 
Version string:5.0.0-alpha-20201224 
1:unicharset:size=662, offset=192 
3:inttemp:size=132152, offset=854
4:pffmtable:size=103, offset=133006 
5:normproto:size=1262, offset=133109 
13:shapetable:size=166, offset=134371 
23:version:size=20, offset=134537

---------------------------

本文结束,有其他问题再来补充。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tesseract OCR训练时碰到的问题和解决方案 的相关文章

  • 使用Python从具有两列或三列数据的图像中使用OCR读取图像中的文本

    在示例图像中 仅作为参考 我的图像将具有相同的图案 一个页面具有完整的水平文本 其他页面具有两个水平文本列 如何在python中自动检测文档的模式并逐一读取另一列数据 我将 Tesseract OCR 与 Psm 6 一起使用 它是水平读取
  • OCR:图像转文本?

    在标记为复制或重复问题之前 请先阅读整个问题 我目前能做的如下 获取图像并裁剪 OCR 所需的部分 使用处理图像tesseract and leptonica 当应用的文档被裁剪成块 即每个图像 1 个字符 时 它提供 96 的准确度 如果
  • 使用 python 和 opencv 检测图像中的文本区域

    我想使用 python 2 7 和 opencv 2 4 9 检测图像的文本区域 并在其周围画一个矩形区域 就像下面的示例图片所示 我对图像处理很陌生 所以任何想法如何做到这一点将不胜感激 有多种方法可以检测图像中的文本 我建议看看这个问题
  • android ndk-构建错误

    我正在尝试为 Android 构建 tesseract 我已将 tesseract 放入示例文件夹中 C Android NDK android ndk r8 samples tesseract之内tesseract我有的文件夹tesser
  • 使用贝叶斯类进行数字识别

    我需要编写一个仅用于数字的 OCR 程序 我将使用 MNIST 数据集 问题是我不知道从哪里开始 有很多论文并没有真正解释算法 我对模式识别真的了解不多 所以我有几个问题 Q1 在哪里可以找到算法 或教程 Q2 如何对数字进行分类 我不需要
  • 在Python中从pdf中提取印地语编写的文本[重复]

    这个问题在这里已经有答案了 我想从 pdf 文档中提取印地文输入的文本 我已附上示例页面的图像 https i stack imgur com UkT86 jpg我正在处理 我尝试使用 pdfminer 从中获取文本 但文本是乱码 可能是由
  • 为什么 pytesseract 导致 AttributeError: 'NoneType' 对象没有属性 'bands'?

    我正在尝试开始使用 pytesseract 但正如你在下面看到的 我遇到了问题 我发现人们遇到了似乎相同的错误 他们说这是 PIL 1 1 7 中的错误 其他人说这个问题是由于 PIL 懒惰造成的 需要强制 PIL 加载图像im load
  • Python Tesseract 无法识别这种字体

    我有这个图像 我想使用 python 将其读取为字符串 我认为这并不难 我发现了 tesseract 然后是使用 tesseract 的 python 脚本的包装器 所以我开始阅读图像 效果很好 直到我尝试阅读这张图像 我是否需要训练它来读
  • 让 tesseract 只识别数字

    我正在尝试改进我制作的 OCR 程序来读取我正在使用的某个图像的布局 现在 我希望我的 OCR 程序只能识别数字 0 9 我尝试遵循问题的解决方案 限制 tesseract 正在寻找的字符 https stackoverflow com q
  • 断言失败 - 训练 Tesseract

    我正在尝试使用 Serak Tesseract Trainer 训练 tesseract https code google com p serak tesseract trainer https code google com p ser
  • pytesseract 错误 Windows 错误 [错误 2]

    您好 我正在尝试使用 python 库 pytesseract 从图像中提取文本 请查找代码 from PIL import Image from pytesseract import image to string print image
  • 使用背景校正图像 (Python)

    我正在开发一个项目 对标签上的文本进行 OCR 操作 我的工作是对图像进行倾斜校正 使其可以用超正方体读取 I have been using this approach https www pyimagesearch com 2017 0
  • OCR 扑克牌 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我决定做一个有趣的项目 我想将扑克牌的图像作为输入并返回其等级和花色 我认为我只需要查看左上角 因为那里包含了所有信息 它应该是稳健的
  • 用于屏幕文本的 OCR(光学字符识别)

    我正在尝试创建一个软件 通过捕获屏幕截图来自动化 PC 然后使用 OCR 光学字符识别 来查找要单击的特定按钮 例如 我已经有了鼠标和键盘控制部分 但现在 我需要 OCR 来处理屏幕截图 我发现 Tesseract OCR 似乎不能很好地处
  • 从图像中识别数字

    我正在尝试编写一个应用程序来查找图像内的数字并将它们相加 如何识别图像中的书写数字 图像中有很多框 我需要获取左侧的数字并将它们相加得出总数 我怎样才能实现这个目标 编辑 我对图像进行了 java tesseract ocr 但没有得到任何
  • Tesseract OCR 将削减的 0 混淆为 8

    我已经在终点字体上训练了 tesseract 但无论如何 我都无法让它识别 0 我正在使用 jTessEditor 创建训练 tif 和框 即使在验证时 它也会将所有 0 读取为 8 我有什么遗漏的吗 下面是 0 的示例 它将其读作 8 我
  • 如何提取图像中的表格

    我想从图像中提取表格 这个 python 模块https pypi org project ExtractTable https pypi org project ExtractTable 与他们的网站https www extractta
  • 使用 python 突出显示图像中的特定文本

    我想突出显示网站屏幕截图中的特定单词 句子 截取屏幕截图后 我使用提取文本pytesseract and cv2 效果很好 我可以获得有关它的文本和数据 import pytesseract import cv2 if name main
  • 如何将 Tesseract 导入 Angular2 (TypeScript)

    我正在尝试将 Tesseract 导入 Angular2 TypeScript 我可以看到它保存到 node modules 文件夹中 但是在使用时 import Tesseract from types tesseract js it s
  • Tess4j - Pdf 到 Tiff 到 tesseract - “警告:分辨率 0 dpi 无效。使用 70 代替。”

    我正在使用 tess4j net sourceforge tess4j tess4j 4 4 0 并尝试对 pdf 文件进行 OCR 因此 据我了解 我必须首先将 pdf 转换为 tiff 或 png 其中有任何建议吗 我这样做是这样的 t

随机推荐