Tesseract OCR数码管数字的样本训练

2023-05-16

Tesseract默认情况下基本无法对LED数码管显示屏进行识别。但由于Tesseract具有样本机器学习训练的能力,因此可利用该技术实现Tesseract对LED数码管的OCR识别,这需要对图片进行预处理。

一、图像预处理

预处理步骤:
1)LED屏幕拍照,生成原始图像文件。
2)对图像灰度化处理。
3)对图像二值化处理。
4)对图像黑白反转。
5)按照实际需要的坐标和尺寸,对图像裁切去边,最终保留需要识别的部分。

以下是一个实际案例的处理过程。

拍照:

灰度化处理:

二值化处理:

黑白反转:

裁切去边后,按上下位置生成两张图片:

考虑小数点的影响,增加对0和5的识别,实际投入训练的是以下两张图片:

二、在jTessBoxEditorFX中进行样本训练

1、合并样本图片

执行train.bat启动jTessBoxEditorFX,选择菜单Tools->Merge TIFF执行图片合并,将上面两张图片文件合并为1个tif文件led.led_num.exp0.tif,关闭jTessBoxEditorFX。

合并后的文件命名格式有一定要求:
语法:[lang].[fontname].exp[num].tif
lang为语言名称,fontname为字体名称,num为序号,可自定义。

2、生成BOX文件

tesseract led.led_num.exp0.tif led.led_num.exp0 -l eng --psm 7 batch.nochop makebox

Tesseract Open Source OCR Engine vv4.0.0-beta.1.20180608 with Leptonica
Page 1
Page 2

运行后在目标文件夹生成文件led.led_num.exp0.box。

3、字符纠正

执行train.bat启动jTessBoxEditorFX,选择Box Editor,Open前面生成的合并样本图片led.led_num.exp0.tif,其对应的box文件会自动加载。

检查修改每页中的各个数字字符解析结果,有不正确的修改,完成后保存替换原box文件。数码管字符是倾斜的,小数点紧靠前面的数字,识别修正时注意字符的框选,可通过Insert、Delete等操作增减字符框,并调整字符框的坐标位置和宽度高度。

这是修改之后的状态:

4、创建font_properties文件

创建字体属性文件font_properties,该文件为文本文件,但没有扩展名:
echo led_num 0 0 0 0 0 >font_properties

语法:<fontname> <italic> <bold> <fixed> <serif> <fraktur> 
fontname为字体名称,italic为斜体,bold为黑体字,fixed为默认字体,serif为衬线字体,fraktur德文黑字体,1和0代表有和无,精细区分时可使用。

5、生成训练文件

tesseract led.led_num.exp0.tif led.led_num.exp0 -l eng --psm 7 nobatch box.train

运行后在目标文件夹生成文件led.led_num.exp0.tr。

6、生成字符集文件

unicharset_extractor led.led_num.exp0.box

运行后在目标文件夹生成文件unicharset。

7、生成shape文件

shapeclustering -F font_properties -U unicharset -O led.unicharset led.led_num.exp0.tr

运行后在目标文件夹生成文件led.unicharset和shapetable。

8、生成聚集字符特征文件

mftraining -F font_properties -U unicharset -O led.unicharset led.led_num.exp0.tr

运行后在目标文件夹生成文件inttemp和pffmtable。

9、生成字符正常化特征文件

cntraining led.led_num.exp0.tr

运行后在目标文件夹生成文件normproto。

10、对特征文件更名

rename normproto led_num.normproto
rename inttemp led_num.inttemp
rename pffmtable led_num.pffmtable
rename unicharset led_num.unicharset
rename shapetable led_num.shapetable

11、合并训练文件

combine_tessdata led_num.

注意命令中最后有个小数点,运行后在目标文件夹生成文件led_num.traineddata。

12、将最终生成的训练数据文件led_num.traineddata复制到Tesseract-OCR软件安装路径的tessdata目录下,以后Tesseract即可将其作为新的语言识别包使用。

从以上第4步开始,可以合并到一个批处理build.bat中去处理:

@echo.Tesseract-OCR图像文字识别训练语言包生成器
@pause
@echo.
@echo.清理旧文件
@echo.
@del font_properties
@del *.tr
@del *.unicharset
@del *.inttemp
@del *.normproto
@del *.pffmtable
@del *.shapetable
@del *.traineddata
@echo.
@echo.创建font_properties文件
@echo %2 0 0 0 0 0 >font_properties
@echo.
@echo.生成训练文件
@tesseract %1.%2.exp0.tif %1.%2.exp0 -l eng --psm 7 nobatch box.train
@echo.
@echo.生成字符集文件
@unicharset_extractor %1.%2.exp0.box
@echo.
@echo.生成Shape文件
@shapeclustering -F font_properties -U unicharset -O %1.unicharset %1.%2.exp0.tr
@echo.
@echo.生成聚集字符特征文件
@mftraining -F font_properties -U unicharset -O %1.unicharset %1.%2.exp0.tr
@echo.
@echo.生成字符正常化特征文件
@cntraining %1.%2.exp0.tr
@echo.
@echo.对特征文件更名
@rename normproto %2.normproto
@rename inttemp %2.inttemp
@rename pffmtable %2.pffmtable
@rename unicharset %2.unicharset
@rename shapetable %2.shapetable
@echo.
@echo.合并训练文件
@combine_tessdata %2.
@echo.
@echo.Completed!

执行批处理命令
build led led_num

控制台运行过程如下:

Tesseract-OCR图像文字识别训练语言包生成器
请按任意键继续. . .

清理旧文件

找不到 E:\jTessBoxEditorFX\led_num\*.tr
找不到 E:\jTessBoxEditorFX\led_num\*.inttemp
找不到 E:\jTessBoxEditorFX\led_num\*.normproto
找不到 E:\jTessBoxEditorFX\led_num\*.pffmtable
找不到 E:\jTessBoxEditorFX\led_num\*.shapetable
找不到 E:\jTessBoxEditorFX\led_num\*.traineddata

创建font_properties文件

生成训练文件
Tesseract Open Source OCR Engine vv4.0.0-beta.1.20180608 with Leptonica
Page 1
APPLY_BOXES:
   Boxes read from boxfile:       5
   Found 5 good blobs.
   Leaving 2 unlabelled blobs in 0 words.
Generated training data for 1 words
Page 2
APPLY_BOXES:
   Boxes read from boxfile:       5
   Found 5 good blobs.
Generated training data for 1 words

生成字符集文件
Extracting unicharset from box file led.led_num.exp0.box
Wrote unicharset file unicharset

生成Shape文件
Reading led.led_num.exp0.tr ...
Building master shape table
Computing shape distances...
Stopped with 0 merged, min dist 999.000000
Computing shape distances...
Stopped with 0 merged, min dist 999.000000
Computing shape distances...
Stopped with 0 merged, min dist 999.000000
Computing shape distances... 0
Stopped with 0 merged, min dist 999.000000
Computing shape distances... 0
Stopped with 0 merged, min dist 999.000000
Computing shape distances... 0
Stopped with 0 merged, min dist 999.000000
Computing shape distances... 0
Stopped with 0 merged, min dist 999.000000
Computing shape distances... 0
Stopped with 0 merged, min dist 999.000000
Computing shape distances... 0
Stopped with 0 merged, min dist 999.000000
Computing shape distances... 0
Stopped with 0 merged, min dist 999.000000
Computing shape distances...
Stopped with 0 merged, min dist 999.000000
Computing shape distances...
Stopped with 0 merged, min dist 999.000000
Computing shape distances... 0 1 2 3 4 5 6
Stopped with 0 merged, min dist 0.225806
Master shape_table:Number of shapes = 7 max unichars = 1 number with multiple unichars = 0

生成聚集字符特征文件
Read shape table shapetable of 7 shapes
Reading led.led_num.exp0.tr ...
Warning: no protos/configs for Joined in CreateIntTemplates()
Warning: no protos/configs for |Broken|0|1 in CreateIntTemplates()
Done!

生成字符正常化特征文件
Reading led.led_num.exp0.tr ...
Clustering ...

Writing normproto ...

对特征文件更名

合并训练文件
Combining tessdata files
Output led_num.traineddata created successfully.
Version string:v4.0.0-beta.1.20180608
1:unicharset:size=554, offset=192
3:inttemp:size=127381, offset=746
4:pffmtable:size=90, offset=128127
5:normproto:size=1022, offset=128217
13:shapetable:size=130, offset=129239
23:version:size=22, offset=129369

Completed!

三、训练效果测试

对在图像预处理后生成的两张图片进行识别:

led_gbrt_1.png

tesseract led_gbrt_1.png led_gbrt_1 --psm 7 -l led_num

识别结果正确:

led_gbrt_2.png

tesseract led_gbrt_2.png led_gbrt_2 --psm 7 -l led_num

识别结果正确:

识别没有增加字符的图片:

1.png

tesseract 1.png 1 --psm 7 -l led_num

识别结果正确:

2.png

tesseract 2.png 2 --psm 7 -l led_num

识别结果正确:

总结:

训练过程中,对字符框选的坐标位置极其重要,直接影响训练后识别的准确度,可能需要反复调整对比识别效果才能确定。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28974745/viewspace-2218660/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28974745/viewspace-2218660/

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

Tesseract OCR数码管数字的样本训练 的相关文章

  • 提高 Python Tesseract OCR 的准确性

    我在用pytesseract https pypi org project pytesseract 随着openCV https pypi org project opencv python 在 Python 中的简单 django 应用程
  • Windows 7 OCR API

    我一直在审查 Office 2007 MODI OCR 的替代品 OneNote 2010 解决方案的质量 结果低于 2007 我注意到 一旦您安装了可选 tiff 过滤器 http technet microsoft com en us
  • 使用 OpenCV 对 Tesseract OCR 进行图像预处理

    我正在尝试开发一个应用程序 它使用 Tesseract 来识别手机摄像头拍摄的文档中的文本 我使用 OpenCV 来预处理图像以实现更好的识别 应用高斯模糊和阈值方法进行二值化 但结果非常糟糕 Here https s6 postimg c
  • 为什么 pytesseract 导致 AttributeError: 'NoneType' 对象没有属性 'bands'?

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

    我正在尝试使用 pytesseract 在 python 2 7 14 中制作 OCR 程序 当我运行我的代码时 from PIL import Image import pytesseract print pytesseract imag
  • 裁剪图像后,如何找到新的边界框坐标?

    这是我得到的收据图像 我使用 matplotlib 绘制了它 x1 y1 x2 y2 x3 y3 x4 y4 bbox coords 650 850 1040 850 1040 930 650 930 image cv2 imread IM
  • 使用 Tesseract OCR 和 python 进行数字识别

    我使用 Tesseract 和 python 读取数字 从能量计 除了数字 1 之外 一切都运行良好 Tesseract 无法读取 1 数字 This is the picture I send to tesseract tesseract
  • 在进行字符识别之前使用 OpenCV 进行图像预处理(超正方体)

    我正在尝试开发简单的 PC 应用程序用于车牌识别 Java OpenCV Tess4j 图像不是很好 进一步它们会很好 我想对超立方体图像进行预处理 但我被困在车牌检测 矩形检测 上 我的步骤 1 源图像 Mat img new Mat i
  • 收据褪色部分可以恢复吗?

    我有一些包含一些扫描收据的文件 我需要使用 OCR 从中提取文本 由于收据上打印的文字在一段时间后会褪色 导致收据上的某些文字不清晰 影响OCR结果 褪色单词的一些示例 有什么方法可以恢复褪色的部分 以便提高 OCR 结果吗 我在OpenC
  • 如何在Eclipse中配置Tesseract进行Android开发?

    我已经从事 Android 工作 6 个月了 至此我对Android开发有了基本的了解 现在我想使用 Tesseract 开发一个 OCR Android 应用程序 为此 我从 Tesseract 下载了 android ndk r6b t
  • 以编程方式识别 PDF 文件中的扫描文本 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一个 PDF 文件 其中包含我们需要导入数据库的数据 这些文件似乎是打印的字母数字文本的 pdf
  • 将姓名拆分为名字和姓氏 Java(Android OCR)[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我使用本机 Android JAVA 创建了一个 OCR 光学字符识别 应用程序 我可以将图像转换为文本视图 但是我如何使用这些词分别识别名
  • 使用 Kivy 应用程序进行 Tesseract OCR

    是否可以将 Tesseract OCR 或 Tess Two 与 Kivy 应用程序集成 我正在寻找使用 Kivy 框架创建一个用于基于 OCR 的文本识别的 Android 应用程序 我在我的 PC 上使用 Tesseract API 一
  • [python]没有属性“TessBaseAPI”

    当我编译代码时出现错误 import tessercat api tesseract TessBaseAPI 错误是 AttributeError 模块 对象没有属性 TessBaseAPI 我已经安装了tesseract via pip
  • 在 R 中使用深度网络和 MNIST 数据读取手写数字第 3 部分

    我尝试编写一个基于深度网络的程序来读取手写数字 我在 Youtube 上找到了一个代码 https www youtube com watch v 5bso 5X7Zu4 https www youtube com watch v 5bso
  • 无法将 Tesseract OCR 模块添加到 Android Studio

    我按照此处找到的分步指南进行操作 https www codeproject com Articles 840623 Android Character Recognition https www codeproject com Artic
  • 使用 Tesseract 进行手写识别

    我只是想知道 如果将大写字母全部放在表格中自己的小框中 那么超正方体的手写识别准确度有多高 我知道你可以训练它来识别你自己的笔迹 但我的问题是我需要在多个笔迹中使用它 有人能指出我正确的方向吗 多谢 简而言之 您必须训练 Tesseract
  • Tesseract 似乎不适用于数字

    我按照常见问题解答让 Tesseract 识别数字 但我得到的只是输出文件中的一堆文本 尽管我的图像中只有数字 我的命令行如下所示 tesseract tessdata dir input jpg output output digits
  • 从超立方体图像中获取文本的确切位置

    使用 tesseract 中的 GetHOCRText 0 方法 我能够检索 html 中的文本 并在 webview 中呈现 html 时 我能够获取文本 但图像中文本的位置与输出不同 任何想法都非常有帮助 tesseract gt Se
  • Tesseract OCR 培训的替代方案?

    在过去的三个月里我一直在尝试训练 Tesseract通过识别我拥有的图像集合 由于真正的缺乏适当的文档 以及非常高的复杂性 我开始放弃 Tesseract 作为解决方案 我正在寻找一种相对无痛的替代方案对于训练 我不想在这里重新发现轮子 如

随机推荐

  • sudo命令提示“command not found”

    我看目前百度这方面的资料不是很多 xff0c 便记录一下linux上遇到的这类问题 如果sudo执行命令运行文件时提示 xff1a command not found xff0c 那是因为安装编译sudo时默认自带了 with secury
  • ubuntu下给用户添加sudo权限,并且如何取消sudo权限

    通过命令 xff1a id username 来查看用户信息 安装ubuntu时 xff0c 创建了一个普通用户 xff0c 没有sudo权限 xff0c 执行sudo相关命令失败 xff0c 原因该普通用户没有加到超级用户组 xff0c
  • PCA变换与KL变换

    PCA 方法是由 Turk 和 Pentlad 提出来的 xff0c 它的基础就是 Karhunen Loeve 变换 简称 KL变换 xff0c 是一种常用的正交变换 PCA的变换矩阵是协方差矩阵 xff0c K L变换的变换矩阵可以有很
  • ERS卫星精密轨道数据下载地址

    http www deos tudelft nl ers precorbs orbits
  • libgdal.so.1: no version information available解决办法

    http www wuaimate cn 2013 01 关于no version information available问题的处理
  • 混沌时间序列分析与预测工具箱 Version2

    http blog sina com cn s blog 768123f801015i8j html
  • MATLAB画图常用调整代码

    http blog chinaunix net uid 11829250 id 3472528 html
  • Lp空间和L范数

    1 Lp空间和L范数 1 1 Lp空间 xff1a Lp空间是由p次可积函数组成的空间 xff1b 1 2 L范数 xff1a 给定向量 L1范数 xff1a 向量各个元素绝对值之和 L2范数 xff1a 向量各个元素的平方求和然后求平方根
  • iOS高级控件之tableViewController-城市列表

    今天我们要做的是一个城市信息的展示 xff0c 先给大家看看是怎样的一个效果 xff0c 我想应该是绝对的实用 好了 xff0c 接下来我就简要的给大家讲讲步骤 xff0c 因为技术博客写的真心不多 xff0c 也不知道该怎样讲才能把每一个
  • 用顺序栈判断是不是回文串(C++)

    typedef struct l char span class hljs typedef span class hljs keyword data span 250 span int top stack span class hljs t
  • ubuntu启动后停留在开机界面进不去系统解决方法

    修电脑困难户又上线了嘎嘎 简单粗暴地列出解决方法 xff0c 仅针对此次情况有效 xff1a https blog csdn net cheneykl article details 79111618 记录完毕 xff0c 溜了
  • 音视频开源项目shotcut源码编译

    xff08 0 xff09 工具安装 安装 msys2 安装 fftw pacman S mingw w64 x86 64 fftw 安装 pkg config pacman S mingw w64 x86 64 pkg config xf
  • 理论基础 —— 排序 —— 直接选择排序

    概述 直接选择排序又称简单选择排序 xff0c 是一种不稳定的排序方法 xff0c 其是选择排序中最简单一种 xff0c 其基本思想是 xff1a 第 i 趟排序再待排序序列 a i a n 中选取关键码最小的记录 xff0c 并和第 i
  • 最大跨度值(信息学奥赛一本通-T1063)

    题目描述 给定一个长度为n的非负整数序列 xff0c 请计算序列的最大跨度值 最大跨度值 61 最大值减去最小值 输入 一共2行 xff0c 第一行为序列的个数n xff08 1 n 1000 xff0c 第二行为序列的n个不超过1000的
  • 与指定数字相同的数的个数(信息学奥赛一本通-T1068)

    题目描述 输出一个整数序列中与指定数字相同的数的个数 输入包含2行 xff1a 第1行为N和m xff0c 表示整数序列的长度 N 100 和指定的数字 xff1b 第2行为N个整数 xff0c 整数之间以一个空格分开 输出为N个数中与m相
  • 【洛谷】题解目录

    1 新手村 关卡1 1 洛谷的第一个任务 超级玛丽游戏 xff08 洛谷 P1000 xff09 xff1a 点击这里 A 43 B Problem xff08 洛谷 P1001 xff09 xff1a 点击这里小玉买文具 xff08 洛谷
  • 家谱树(信息学奥赛一本通-T1351)

    题目描述 有个人的家族很大 xff0c 辈分关系很混乱 xff0c 请你帮整理一下这种关系 给出每个人的孩子的信息 输出一个序列 xff0c 使得每个人的后辈都比那个人后列出 输入 第1行一个整数N xff08 1 N 100 xff09
  • 数的划分(洛谷-P1025)

    题目描述 将整数 n 分成 k 份 xff0c 且每份不能为空 xff0c 任意两个方案不相同 不考虑顺序 例如 xff1a n 61 7 xff0c k 61 3 xff0c 下面三种分法被认为是相同的 1 1 5 1 5 1 5 1 1
  • 外网访问内网服务器设置方法(路由器设置)

    A 外网访问内网服务器的设置方法 实验室有一台服务器 xff0c 现有外网访问该服务器的需求 xff0c 网上有各种教程 xff0c 但是有些地方比较模糊 xff0c 不甚详细 xff0c 现将我的设置记录如下 xff0c 作为参考 目前的
  • Tesseract OCR数码管数字的样本训练

    Tesseract默认情况下基本无法对LED数码管显示屏进行识别 但由于Tesseract具有样本机器学习训练的能力 xff0c 因此可利用该技术实现Tesseract对LED数码管的OCR识别 xff0c 这需要对图片进行预处理 一 图像