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数码管数字的样本训练 的相关文章

  • OCR 解决方案可以检测数字手写体吗?

    有没有一种解决方案可以很好地书写数字 1 10 我尝试了超正方体 但我只得到垃圾 理想情况下是 OSS 但商业也可以 OpenCV 现在附带手写数字识别 OCR 示例 你可以参考一下 http code opencv org project
  • 如何从收据中提取相关信息

    我正在尝试结合使用 Opencv Tesseract 和 Keras 从一系列不同的收据中提取信息 该项目的最终结果是 我应该能够使用手机拍摄收据照片 并从该照片中获取商店名称 支付类型 卡或现金 支付金额和找零 到目前为止 我已经使用 O
  • 使用 python 和 opencv 检测图像中的文本区域

    我想使用 python 2 7 和 opencv 2 4 9 检测图像的文本区域 并在其周围画一个矩形区域 就像下面的示例图片所示 我对图像处理很陌生 所以任何想法如何做到这一点将不胜感激 有多种方法可以检测图像中的文本 我建议看看这个问题
  • 烦人的 python tesseract 错误打开数据文件时出错 ./tessdata/eng.traineddata

    我遇到了这个错误 这让我对 tesseract 的 python 包装器有点疯狂 这是一个名为 tesseract 的 python 模块 这是我尝试运行的 python 代码 img cv2 imread image 0 api tess
  • unicharset_extractor:找不到命令

    我想使用超正方体创建新的列车数据 因此 请按照以下网站中提到的步骤进行操作 https blog cedric ws how to train tesseract 301 https blog cedric ws how to train
  • Windows 7 OCR API

    我一直在审查 Office 2007 MODI OCR 的替代品 OneNote 2010 解决方案的质量 结果低于 2007 我注意到 一旦您安装了可选 tiff 过滤器 http technet microsoft com en us
  • 提高识别率的图像预处理步骤

    我正在为我的项目使用 TessBaseAPI 制作一个简单的 OCR Android 应用程序 我已经完成了一些图像预处理步骤 例如二值化和图像增强 但他们的结果是50 到60 怎样才能提高识别率呢 我包括两个示例图像 http image
  • c# OCR无法识别数字(tesseract 2)

    I m trying to extract digits from the following 它失败了 我得到了 作为回报 我正在使用 google 的 tesseract 2 使用 C 开源 c 包装器 现在我想知道 这个图像是否太糟糕
  • 我自己的 Python OCR 程序

    我还是一个初学者 但我想写一个字符识别程序 这个程序还没有准备好 而且我编辑了很多 所以评论可能不完全一致 我将使用 8 个连通性来标记连通分量 from PIL import Image import numpy as np im Ima
  • tess4j 与 Spring mvc

    我已经尝试将 tess4j 作为独立的 java 程序 并且它可以正常工作并给出文本输出 现在我正在尝试创建一个 spring mvc web 项目 在 pom 中添加 tess4j 的依赖项 并且我已在我的项目中添加了 tess4j 源
  • 无法在 Mac 上安装 Tesseract-OCR

    我正在尝试使用 pytesseract 在 python 2 7 14 中制作 OCR 程序 当我运行我的代码时 from PIL import Image import pytesseract print pytesseract imag
  • 断言失败 - 训练 Tesseract

    我正在尝试使用 Serak Tesseract Trainer 训练 tesseract https code google com p serak tesseract trainer https code google com p ser
  • Google Vision API 文本识别器无法正常工作

    我使用 Google Vision API 来读取报纸等任何物体上的文本或墙上的文本 我已经尝试过来自 Google 开发者网站的相同示例 但我的文本识别器总是返回 falseIsOperational功能 我在 Blackberry ke
  • 有没有办法在 venv/web 服务器中安装 Tesseract OCR?

    我制作了一个执行 OCR 功能的 Python 脚本 然后回收了该脚本并使用 Flask 制作了一个 Web 应用程序 Web 应用程序及其库位于 virtualenv 中 但该应用程序使用操作系统 Windows 中安装的 Tessera
  • 使用 Tesseract OCR 和 python 进行数字识别

    我使用 Tesseract 和 python 读取数字 从能量计 除了数字 1 之外 一切都运行良好 Tesseract 无法读取 1 数字 This is the picture I send to tesseract tesseract
  • 在python中使用tesseract 3.02的C API与ctypes和cv2

    我正在尝试在 python 中将 Tesseract 3 02 与 ctypes 和 cv2 一起使用 Tesseract 提供了一组公开的 DLL C 风格 API 其中之一如下 TESS API void TESS CALL TessB
  • 在进行字符识别之前使用 OpenCV 进行图像预处理(超正方体)

    我正在尝试开发简单的 PC 应用程序用于车牌识别 Java OpenCV Tess4j 图像不是很好 进一步它们会很好 我想对超立方体图像进行预处理 但我被困在车牌检测 矩形检测 上 我的步骤 1 源图像 Mat img new Mat i
  • 屏幕截图中低分辨率文本的 OCR

    我正在编写一个 OCR 应用程序来从屏幕截图图像中读取字符 目前 我只关注数字 我的方法部分基于这篇博文 http blog damiles com 2008 11 basic ocr in opencv http blog damiles
  • 如何将 Tesseract 导入 Angular2 (TypeScript)

    我正在尝试将 Tesseract 导入 Angular2 TypeScript 我可以看到它保存到 node modules 文件夹中 但是在使用时 import Tesseract from types tesseract js it s
  • 用Python识别图像

    我对 OCR 识别和 Python 都有点陌生 我想要实现的是从 Python 脚本运行 Tesseract 以 识别 tif 中的某些特定数字 我以为我可以为 Tesseract 做一些培训 但我在 Google 和 SO 上没有找到任何

随机推荐

  • 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 这需要对图片进行预处理 一 图像