Linux下 (Ubuntu16.04 ) Tesseract4.0训练字库,提高正确识别率Linux下(合并字库)

2023-11-17

由于tesseract的中文语言包“chi_sim”对中文手写字体或者环境比较复杂的图片,识别正确率不高,因此需要针对特定情况用自己的样本进行训练,提高识别率,通过训练,也可以形成自己的语言库。

Linux和windows的系统方法一样,就是下面改名的地方,linux用的mv 命令,windows要用rename命令 , linux下要先安装 tesseract-ocr

sudo apt install tesseract-ocr

步骤:

1、工具准备:

(1)官方文档:https://github.com/tesseract-ocr/tesseract/wiki/TrainingTesseract-4.00

(2)Java虚拟机,由于jTessBoxEditor的运行依赖Java运行时环境,所以需要安装Java虚拟机。

下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

(3)jTessBoxEditor2.0工具,用于调整图片上文字的内容和位置,

下载地址:https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/

安装包解压后运行的“jTessBoxEditor.jar”,,就可以打开该工具了。

java -jar jTessBoxEditor.jar // linux下

2、样本图片准备:(进行训练的样本图片数量越多越好)

这里只准备2种不同字体样本进行测试:

在这里插入图片描述

在这里插入图片描述
3、使用jTessBoxEditor生成训练样本的的合并tif图片:

(1)打开jTessBoxEditor,选择Tools->Merge TIFF,进入训练样本所在文件夹,选中要参与训练的样本图片:
在这里插入图片描述

(2)点击 “打开” 后弹出保存对话框,选择保存在当前路径下,文件命名为 “zwp.test.exp0.tif” ,格式只有一种 “TIFF” 可选。

tif文面命名格式[lang].[fontname].exp[num].tif
lang是语言,fontname是字体,num为自定义数字。

比如我们要训练自定义字库 zwp,字体名test,那么我们把图片文件命名为 zwp.test.exp0.tif
在这里插入图片描述

4、使用tesseract生成.box文件:

在上一步骤生成的“zwp.test.exp0.tif”文件所在目录下打开命令行程序,执行下面命令,执行完之后会生成zwp.test.exp0.box文件。

tesseract zwp.test.exp0.tif zwp.test.exp0 -l chi_sim -psm 7 batch.nochop makebox

在这里插入图片描述

5、使用jTessBoxEditor矫正.box文件的错误:

.box文件记录了每个字符在图片上的位置和识别出的内容,训练前需要使用jTessBoxEditor调整字符的位置和内容。

打开jTessBoxEditor点击Box Editor ->Open,打开步骤2中生成的“zwp.test.exp0.tif”,会自动关联到“zwp.test.exp0.box”文件,这两文件要求在同一目录下。调整完点击“save”保存修改。(有merge,split ,insert.delete等操作,同时可以将包含字的框进行调节 ,图中用调整位置标红)
在这里插入图片描述

6、生成font_properties文件:(该文件没有后缀名)

(1)执行命令,执行完之后,会在当前目录生成font_properties文件

echo test 0 0 0 0 0 >font_properties

(2)也可以手工新建一个名为font_properties的文本文件,输入内容 “test 0 0 0 0 0” 表示字体test的粗体、倾斜等共计5个属性。这里的“test”必须与“zwp.test.exp0.box”中的“test”名称一致。

7、使用tesseract生成.tr训练文件:

执行下面命令,执行完之后,会在当前目录生成zwp.test.exp0.tr文件。

tesseract zwp.test.exp0.tif zwp.test.exp0 nobatch box.train

在这里插入图片描述

8、生成字符集文件:

执行下面命令:执行完之后会在当前目录生成一个名为“unicharset”的文件。

unicharset_extractor zwp.test.exp0.box

在这里插入图片描述

9、生成shape文件:

执行下面命令,执行完之后,会生成 shapetable 和 zwp.unicharset 两个文件。

shapeclustering -F font_properties -U unicharset -O zwp.unicharset zwp.test.exp0.tr

在这里插入图片描述

10、生成聚字符特征文件:

执行下面命令,会生成 inttemp、pffmtable、shapetable和zwp.unicharset四个文件。

mftraining -F font_properties -U unicharset -O zwp.unicharset zwp.test.exp0.tr

在这里插入图片描述

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

执行下面命令,会生成 normproto 文件。

cntraining zwp.test.exp0.tr

在这里插入图片描述

12、文件重命名:

重新命名inttemp、pffmtable、shapetable和normproto这四个文件的名字为[lang].xxx。

这里修改为zwp.inttemp、zwp.pffmtable、zwp.shapetable和zwp.normproto

执行下面命令:

mv normproto zwp.normproto
mv inttemp zwp.inttemp
mv pffmtable zwp.pffmtable
mv shapetable zwp.shapetable

13、合并训练文件:

执行下面命令,会生成zwp.traineddata文件。

combine_tessdata zwp.

在这里插入图片描述
Log输出中的Offset 1、3、4、5、13这些项不是-1 (其余的不用在意),表示新的语言包生成成功。

** 将生成的“zwp.traineddata”语言包文件复制到Tesseract-OCR 安装目录下的tessdata文件夹中,就可以使用训练生成的语言包进行图像文字识别了。**

14、测试:

输入下面命令,-l后面为训练生成的语言包。(当然在输入下面的命令之前,将生成的“zwp.traineddata”语言包文件复制到Tesseract-OCR 安装目录下的tessdata文件夹中,就可以使用训练生成的语言包进行图像文字识别了)

tesseract test.PNG test -l zwp

使用新训练的语言包进行文字识别后,会发现之前识别不出来的文字也可以识别出来了。

关于合并字库,

只需要有tif和box两个文件就可以合并了.上面的步骤执行到第6步差不多都是一样的,唯一不同就是名字,上面说道,名字的第二个单词是字体,也就是zwp.test.exp0.tif 中的test. 这个test(自己定义)可以一样,然后第6步也和上面的一样, 比如zwp.test.exp0.tif
zwp.test.exp1.tif等
从7步开始不太一样,首先要生成的是所有box文件的tr文件

tesseract zwp.test.exp0.tif zwp.test.exp0  nobatch box.train
tesseract zwp.test.exp1.tif zwp.test.exp1  nobatch box.train
tesseract zwp.test.exp2.tif zwp.test.exp2  nobatch box.train

8.提取字符

unicharset_extractor zwp.test.exp0.box zwp.test.exp2.box zwp.test.exp3.box

9.执行下面命令,执行完之后,会生成 shapetable 和unicharset 两个文件

shapeclustering -F font_properties -U unicharset -O unicharset zwp.test.exp0.tr zwp.test.exp1.tr zwp.test.exp2.tr

10、生成聚字符特征文件:

执行下面命令,会生成 inttemp、pffmtable、shapetable和unicharset四个文件。

mftraining -F font_properties -U unicharset -O unicharset zwp.test.exp0.tr

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

执行下面命令,会生成 normproto 文件。

cntraining zwp.test.exp0.tr

12.然后将上面生成的五个文件全部改名为 zwp开头的 , 如: zwp.inttemp
执行下面命令:

mv unicharset zwp.unicharset
mv normproto zwp.normproto
mv inttemp zwp.inttemp
mv pffmtable zwp.pffmtable
mv shapetable zwp.shapetable

13.合并所有文件,生成一个大的字库文件,

combine_tessdata zwp.

原文:https://blog.csdn.net/a745233700/article/details/80175883

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

Linux下 (Ubuntu16.04 ) Tesseract4.0训练字库,提高正确识别率Linux下(合并字库) 的相关文章

  • Tesseract OCR:解析表格单元格

    我正在使用 cmd 中的 Tesseract OCR v4 0 0 alpha 从如下所示的表格的 png 中提取文本 我希望 Tesseract OCR 能够解析一个单元格中的内容 然后再转到下一个单元格 我不想继续 行 中的下一个单词
  • 当我使用 pytesser 运行 tesseract 时,如何隐藏控制台窗口

    我是Python新手 我正在从事 OCR 项目 我在 Windows 7 上使用 Python 2 7 12 我已在路径 C Program Files x86 Tesseract OCR 中安装了 tesseract 我在这里找到了 py
  • 为什么用 PIL 和 pytesseract 无法获取字符串?

    这是一个简单的Python 3光学字符识别 OCR 程序来获取字符串 我已经在这里上传了目标gif文件 请下载并另存为 tmp target gif try from PIL import Image except ImportError
  • java中pdf解析为文本

    我有一个阿拉伯语 PDF 我想使用 Java 将其解析为文本文档 我已经尝试了很多次 英语单词解析成功 但阿拉伯语单词解析失败 谁能推荐一个可以正确转换阿拉伯语单词的解决方案 我想到了几个图书馆 阿帕奇蒂卡 http tika apache
  • 如何在 OCR 中区分斜线零和八 (0->8)

    我正在为我的 Android 应用程序使用 ML Kit for Firebase ReCalc 收据计算器 https play google com store apps details id info trekto receipts
  • Android OCR 仅使用流行的 tessercat fork tess-two 检测数字

    我正在使用流行的 OCR tessercat fork for android tess twohttps github com rmtheis tess two https github com rmtheis tess two 我整合了
  • opencv 中的二值化和背景过滤

    不久 我想在OCR之前进行预处理程序 建议来自ABBYY的技术 http www abbyy developers eu en tech insideocr adaptive binarisation 文章分为两部分 Background
  • 了解 OCR 的 Freeman 链码

    请注意 我确实在寻找问题的答案 我是not寻找一些源代码或一些学术论文的链接 我已经使用了源代码 并且我已经阅读了论文 但仍然没有弄清楚这个问题的最后部分 我正在研究一些快速屏幕字体 OCRing 并且取得了很好的进展 我已经找到基线 分离
  • emgucv:C# 中的 pan 卡不正确的倾斜检测

    我有三个泛卡图像 用于使用 emgucv 和 c 测试图像的倾斜 顶部的第一张图像检测到 180 度工作正常 中间的第二张图像检测到的 90 度应检测为 180 度 第三张图像检测到 180 度应检测为 90 度 我想在这里分享的一个观察结
  • 如何使用 PHP 在网站上实现 OCR? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • tesseract 无法识别该图像中的这个单词,这正常吗?

    我需要从这样的小图像中提取单词 我在命令行中使用带有西班牙语选项的 tesseract 如下所示 tesseract category png l spa psm 7 category txt 我认为该文本一定很容易被 OCR 解析 但该单
  • 什么是可以检测手写的好的 OCR? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我需要一个库 可以在扫描手写纸后从其中提取文本 正常拉丁文本 它可以是一个免费的解决方案 甚至是我必须付费的解决方案 只要它可以处理大写字
  • Android Studio 上的 Android Tesseract OCR [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 一段时间以来 我一直在尝试将 tesseract 包含在 Android Studio 上的 Andro
  • Python Tesseract 无法识别这种字体

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

    我使用 Google Vision API 来读取报纸等任何物体上的文本或墙上的文本 我已经尝试过来自 Google 开发者网站的相同示例 但我的文本识别器总是返回 falseIsOperational功能 我在 Blackberry ke
  • OCR 解析获取复选框或单选按钮值

    I need to parse OCR image file and get all texts and checkbox values How to get Checkbox or Radio Button value from OCR
  • 裁剪图像后,如何找到新的边界框坐标?

    这是我得到的收据图像 我使用 matplotlib 绘制了它 x1 y1 x2 y2 x3 y3 x4 y4 bbox coords 650 850 1040 850 1040 930 650 930 image cv2 imread IM
  • Tess4j - Pdf 到 Tiff 到 tesseract - “警告:分辨率 0 dpi 无效。使用 70 代替。”

    我正在使用 tess4j net sourceforge tess4j tess4j 4 4 0 并尝试对 pdf 文件进行 OCR 因此 据我了解 我必须首先将 pdf 转换为 tiff 或 png 其中有任何建议吗 我这样做是这样的 t
  • 如何去除给定图像中的噪声,使 ocr 输出完美?

    我已经对这个孟加拉文本图像进行了大津阈值处理 并使用 tesseract 进行 OCR 但输出非常糟糕 我应该应用什么预处理来消除噪音 我也想校正图像 因为它有轻微的倾斜 我的代码如下 import tesserocr from PIL i
  • 将姓名拆分为名字和姓氏 Java(Android OCR)[关闭]

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

随机推荐

  • minecraft正版多人服务器,我的世界:“服务器的潜规则”,有的保护玩家,也有的打破平衡...

    多人联机 陪伴多数玩家的青春 点点滴滴 都是付出的时间与精力 如今 MC的 服务器 玩法愈来愈丰富 规则越来越多 那么 服务器内究竟有何潜规则呢 服务器控制台权限 gt OP权限 多数玩家都有这样的认为 OP权限在服务器中处在顶尖地位 那到
  • 税务大比武网络攻防复习(完整版)

    目录 信息化建设与管理 计算机终端设备 通信与网络 数据管理与应用 软件开发 计算与存储 基础设施保障 网络安全 网络安全基础 网络安全管理 密码学 软件开发安全 主机 数据库 中间件安全 网络与通信安全 网络攻击 信息收集 口令攻击和软件
  • uniapp小程序练手项目并上线

    如题 做一个自己的小程序 并在各大小程序开发者平台上线 背景 因没有小程序开发经验 且前端知识掌握得不好 作为一个小程序爱好者 总想有一款自己的小程序 同时也想有一款自己的app 虽然目前还没有实现 在整体难度上来说 小程序的实现比app的
  • 对数器的使用----bug测试,文章中含有测试源码

    当我们选择排序没有出现问题时 我们可以发现一个随机数组是有序的 会打印出 选择排序没有毛病 说明此时选择排序没有毛病 package cn Text public class LogarithmicDetector TODO 选择排序 pu
  • 2023省赛 飞机降落(dfs)

    看数据量 fact 10 3628800 直接暴力dfs include
  • firefly 搭建

    基本内容在http blog csdn net wangqiuyun article details 11150503里都有 在此仅记录搭建工程中遇到的问题及实际项目添加的工具 mysql安装 最好用5 6 服务启动不成功 基本是配置的问题
  • vue插件开发以及发布到npm流程——消息提示插件

    最近有兴趣学习了一下vue插件开发 以及发布到npm上 项目里可以直接使用自己开发的插件 以下文章以开发一个消息提示的组件为例 记录一下开发的流程 一 vue项目创建配置 创建vue项目的指令不多说 直接以下指令 这里我选择的vue2进行开
  • 校园二手物品交易系统微信小程序设计

    系统简介 本网最大的特点就功能全面 结构简单 角色功能明确 其不同角色实现以下基本功能 服务端 后台首页 可以直接跳转到后台首页 用户信息管理 管理所有申请通过的用户 商品信息管理 管理校园二手物品中所有的商品信息 非常详细 违规投诉管理
  • c语言源码解释,C语言一些细节注意(源码+解释)

    最近可能要回归底层开发设计 所以又看了看C的一些东西 顺便对一些问题进行了代码确认 现将代码贴出 希望对各位网友有所帮助 只是为了测试 没有按照什么规范写 代码风格比较烂 哈哈哈哈 大家见谅了 O
  • org.apache.hadoop.hbase.client.RetriesExhaustedException: Can't get the locations

    Hbase API操作表时报出异常 Exception in thread main org apache hadoop hbase client RetriesExhaustedException Can t get the locati
  • C++11新特性总结

    目录 一 统一的列表初始化 适用于各种STL容器 二 类型推导 auto 和 decltype的出现 三 右值引用移动语义 特别重要的新特性 四 万能引用 完美转发 五 可变参数模板 参数包 六 emplace back 的出现和对比分析
  • 判断apk是否签名以及获取apk信息

    一 判断apk是否签名 如果集合apkSingers 为空 说明没有签名人 未签名 try ApkFile apkParser new ApkFile new File C Users kesun5 Desktop doc b apk Ap
  • 安装Node.js和cnpm

    一 安装Node js 1 下载 Node js官网下载 根据自身系统下载对应的安装包 我这里为Windows10 64位 故选择下载第一个安装包 2 然后点击安装 选择自己要安装的路径 此处我选择的是 D Program Files no
  • 容器适配器【stack、queue、priority_queue和反向迭代器】

    全文目录 适配器原理 stack 和 queue deque 模拟实现stack 模拟实现queue 模拟实现priority queue 反向迭代器 适配器原理 适配器 适配器是一种设计模式 设计模式是一套被反复使用的 多数人知晓的 经过
  • 如何延长周末体验感?工作与休息的完美平衡

    引言 对于工作繁忙的人们 周末是一段宝贵的时间 是放松身心 恢复精力的机会 然而 很多人常常发现 即使是在周末 也无法获得高质量的休息 本文将分享一些关于如何延长周末体验感 提升休息质量的方法 从时间规划 体验感提升以及充分休息几个方向进行
  • 如何借助 AI ,生成专属图标? #iconify AI

    不到一分钟 就可生成个性化专属图标 这款 AI 图标工具有多神奇 iconify AI 在几秒钟内为应用程序 网站创建专业图标 告别传统应用图标设计的麻烦和费用 让 AI 设计用户的专属品牌图标 图源 iconify AI 如何用 icon
  • 什么是防抖,节流? js实现核心代码,以及应用场景?

    防抖和节流都是用于项目优化的手段 用来限制事件的触发频率的两种常见技术 什么是防抖 在事件被触发后 等待一段时间 如果在这段时间内没有再次触发该事件 则执行相应的操作 如果在定时等待期间又触发的该事件 则重新计时 主要用于处理频繁触发的事件
  • GWO灰狼优化算法以及Matlab代码

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 GWO灰狼算法原理 进化更新 位置更新 紧随3只头狼 GWO灰狼算法流程图 GWO优化算法matlab代码 main函数 适应度函数 GWO主体代码 测试结果F1
  • 【Java小疑问】类和方法 前面添加public和不添加public的区别

    讨论前提 包的存在 Java 中修饰类修饰符 public default 默认 1 public 该类可在同一或不同包下访问 父包 子包皆可访问 2 default 该类仅可在同一个包下可访问 父包 子包皆无法访问 注意 在 Java 中
  • Linux下 (Ubuntu16.04 ) Tesseract4.0训练字库,提高正确识别率Linux下(合并字库)

    由于tesseract的中文语言包 chi sim 对中文手写字体或者环境比较复杂的图片 识别正确率不高 因此需要针对特定情况用自己的样本进行训练 提高识别率 通过训练 也可以形成自己的语言库 Linux和windows的系统方法一样 就是