tesseract-ocr 字库训练(提高识别率进阶版)

news2024/12/23 19:22:57

 github字库地址:https://github.com/tesseract-ocr/tessdata 

 

 一、tesseract-ocr字库训练

1、配置 jdk 环境变量

步骤(略)

2、安装 tesseract-ocr 并配置环境变量

下载地址:https://digi.bib.uni-mannheim.de/tesseract/

  配置环境变量:系统变量path添加 C:\Program Files (x86)\Tesseract-OCR;  D:\Tesseract-OCR(对应自己的tesseract安装目录)

3、下载jTessBoxEditor2.0工具

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

下载完成后,解压缩并双击 jTessBoxEditor.jar 即可启动

4、下载Tess4J-3.4.8   

地址: https://sourceforge.net/projects/tess4j/files/tess4j/

解压即可得到  tessdata训练库

5、准备样本图片

6、使用jTessBoxEditor生成训练样本的的合并tif图片

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

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


tif命名规则:[lang].[fontname].exp[num].tif

  • lang = 语言
  • fontname = 字体
  • num = 自定义数字

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

在生成的 mjorcen.normal.exp0.tif 文件所在目录下打开命令行

执行如下命令 : tesseract mjorcen.normal.exp0.tif mjorcen.normal.exp0  batch.nochop makebox

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

打开 jTessBoxEditor ,点击Box Editor ->Open ,打开 mjorcen.normal.exp0.tif,会自动关联到“mjorcen.normal.exp0.box”文件,这两文件要求在同一目录下,调整完点击“save”保存修改。


*修改文字是乱码*

👉 解决方法: jtessboxeditor的setting  --->  Font  里改字体为宋体,regular就可以了。

*修改文字必须是白底黑字,要不然训练时会出现错误* 

9.创建 一个 font_properties文件(该文件无后缀名)

  • 手工新建一个名为font_properties的文本文件

  • 内容 :test 0 0 0 0 0
  • 表示字体test的粗体、倾斜等共计5个属性。
  • 这里内容中的“test”必须与生成的 .box 文件中的fontname = 字体 ,一致。

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

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

执行如下命令: tesseract mjorcen.normal.exp0.tif mjorcen.normal.exp0 nobatch box.train


8.生成字符集文件:

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

执行命令: unicharset_extractor mjorcen.normal.exp0.box


9、生成shape文件:

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

执行命令:

shapeclustering -F font_properties -U unicharset -O zwp.unicharset mjorcen.normal.exp0.tr

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

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

执行命令: mftraining -F font_properties -U unicharset -O zwp.unicharset mjorcen.normal.exp0.tr

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

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

执行命令: cntraining mjorcen.normal.exp0.tr

12、文件重命名:

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

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

执行下面命令:

rename normproto mjorcen.normproto

rename inttemp mjorcen.inttemp

rename pffmtable mjorcen.pffmtable

rename shapetable mjorcen.shapetable

13、合并训练文件:

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

执行命令: combine_tessdata mjorcen.

Log输出中的Offset 1、3、4、5、13这些项不是-1,表示新的语言包生成成功。

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

二、Java代码测试

1.pom.xml文件添加maven 依赖

<dependency>

<groupId>net.java.dev.jna</groupId>

<artifactId>jna</artifactId>

<version>4.1.0</version>

</dependency>

<dependency>

<groupId>net.sourceforge.tess4j</groupId>

<artifactId>tess4j</artifactId>

<version>3.4.0</version>

<exclusions>

<exclusion>

<groupId>com.sun.jna</groupId>

<artifactId>jna</artifactId>

</exclusion>

</exclusions>

</dependency>

2.测试代码

public void testOCR()throws Exception {

        //图片路径

       File imageFile =new File("D:\\xx.png");

        //训练库的路径(tessdata)

       instance.setDatapath("C:\\tessdata");

        //语言库(mjorcen)
       instance.setLanguage("mjorcen");

        // 文字识别
       String result =instance.doOCR(imageFile);
    
        // 
       System.out.println(result);

}

3.输出结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1906038.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无人机群辅助边缘计算系统的任务卸载和资源分配联合优化

源自&#xff1a;系统工程与电子技术 作者&#xff1a;刘世豪 黄仰超 胡航 司江勃 韩蕙竹 安琪 注&#xff1a;若出现无法显示完全的情况&#xff0c;可 V 搜索“人工智能技术与咨询”查看完整文章 摘 要 为提升无人机群辅助边缘计算系统在负载不均衡场景下的性能, 构…

红黑树模拟实现

概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有一条路径会比其他路径长出俩倍&#xff0c;因而是接近平衡…

使用GZip对npm run build打包的vendor.js文件进行压缩

vue-cli项目 安装npm i compression-webpack-plugin -D npm i compression-webpack-plugin -D使用&#xff1a;在vue.config.js文件中 const CompressionPlugin require(compression-webpack-plugin) module.exports {configureWebpack: {plugins: [new CompressionPlugin…

html+css+js贪吃蛇游戏

贪吃蛇游戏&#x1f579;四个按钮控制方向&#x1f3ae; 源代码在图片后面 点赞❤️关注&#x1f64f;收藏⭐️ 互粉必回&#x1f64f;&#x1f64f;&#x1f60d;&#x1f60d;&#x1f60d; 源代码&#x1f4df; <!DOCTYPE html> <html lang"en"&…

【2024最新】Arduino通过Python进行串口通信控制电机

1. 背景 最近想研究一下用 Python 控制 Arduino 的技术&#xff0c;通过上网查询&#xff0c;发现可以用 Python 中的 serial 库来实现和 Arduino 主板的串口通信&#xff0c;从而控制 Arduino。 特此记录一下这个小项目的过程及出现的问题。 2. 基础准备 主板&#xff1a;…

中仕公考:“三支一扶”岗位分别做什么工作?

“三支一扶”计划旨在招募应届毕业生或近两年内毕业的毕业生&#xff0c;部分省份还考虑技工院校高级工班、预备技师班毕业生。在湖北省&#xff0c;报考支医岗位不限制毕业年限&#xff0c;安徽和云南等省对支医类岗位取消了开考比例要求。为解决招人留人难题&#xff0c;艰苦…

毛绒玩具音乐芯片:OTP语音芯片WTN6040方案解析

随着科技的不断发展&#xff0c;智能化和互动性已经成为玩具设计中的关键因素。在毛绒玩具市场中&#xff0c;集成音乐播放功能的毛绒玩具因其趣味性和互动性而备受欢迎。本文将详细介绍OTP&#xff08;One Time Programmable&#xff09;语音芯片WTN6040在毛绒玩具音乐芯片中的…

网页UI:被客户说不大气!大气能当饭吃?真能,最起码保住你饭碗

大气的网页UI设计可以带来以下几个好处&#xff1a; 提升品牌形象&#xff1a;大气的设计能够给用户留下深刻的印象&#xff0c;增强品牌的认知度和形象。通过精心设计的元素、色彩和排版&#xff0c;可以传达出品牌的专业、高端和可信赖的形象。强化用户体验&#xff1a;大气…

SpringBoot开发实用篇(二)

目录 一&#xff1a;Redis 1&#xff1a;SpringBoot整合Redis 2&#xff1a;SpringBoot读写Redis的客户端 3&#xff1a;SpringBoot操作Redis实现技术切换&#xff08;jedis&#xff09; 二&#xff1a;Mongodb 1&#xff1a;Mongodb基础操作 2&#xff1a;SpringBoot整合…

【DataSophon】DataSophon1.2.1 ranger usersync整合

目录 一、简介 二、实现步骤 2.1 ranger-usersync包下载编译 2.2 构建压缩包 2.3 编辑元数据文件 2.4 修改源码 三、重新安装 一、简介 如下是DDP1.2.1默认有的rangerAdmin&#xff0c; 我们需要将rangerusersync整合进来 ,实现将Linux机器上的用户和组信息同步到Ranger…

『粽享端午』交互小程序 小游戏 案例赏析

在这片古老而又年轻的土地上&#xff0c;地域的差异孕育了丰富多彩的饮食文化。粽子&#xff0c;作为端午节的象征&#xff0c;承载着南咸北甜的口味之争&#xff0c;自古便在人们舌尖上演绎着不同的风味传奇。 然而&#xff0c;在快节奏的现代生活洪流中&#xff0c;我们渐渐失…

家谱管理系统

《家谱管理系统》 一个家谱关系由若干家谱记录构成&#xff0c;每个家谱记录由父亲、母亲和子女姓名构成&#xff0c;其中姓名是关 键字。设计并实现一个简单的家谱管理系统。定义一个主菜单&#xff0c;界面友好&#xff0c;演示程序以用户和计算机的对话方式进行&#xff0c…

开关电源——调制模式和工作模式

一、开关电源的调制模式 开关电源作为一种广泛应用于电子设备中&#xff0c;用于将一定电压和电流转换为另一种电压和电流的技术&#xff0c;以下是开关电源三种常见的调制模式&#xff1a; 脉冲宽度调制&#xff08;Pulse Width Modulation&#xff09; 脉冲频率调制&#xff…

触发器编程-创建(CREATE TRIGGER)、删除(DROP TRIGGER)

一、定义 1、触发器&#xff08;Trigger&#xff09;是用户对某一表中的数据做插入、更新和删除操作时被处罚执行的一段程序&#xff0c;通常我们使用触发器来检查用户对表的操作是否合乎整个应用系统的需求&#xff0c;是否合乎商业规则以维持表内数据的完整性和正确性 2、一…

从nginx返回404来看http1.0和http1.1的区别

序言 什么样的人可以称之为有智慧的人呢&#xff1f;如果下一个定义&#xff0c;你会如何来定义&#xff1f; 所谓智慧&#xff0c;就是能区分自己能改变的部分&#xff0c;自己无法改变的部分&#xff0c;努力去做自己能改变的&#xff0c;而不要天天想着那些无法改变的东西&a…

AI视频教程下载-使用ChatGPT成为全栈JavaScript开发者

学习使用Express JS和React JS进行全栈JavaScript开发 ChatGPT Express JS MongoDB React JS Tailwind 解锁全栈网页开发的世界&#xff0c;我们为初学者和中级学习者设计了全面的课程。在这段沉浸式的旅程中&#xff0c;你将深入前端和后端开发的基本概念&#xff0c;为自…

everything高级搜索-cnblog

everything高级搜索用法 基础4选项验证 总结搜索方式 高级搜索搜指定路径文件名: 文件名 路径不含文件名: &#xff01;文件名包含单词 路径包含指定内容: 路径 content:内容 大小写 区分大小写搜索搜指定路径文件名: case:文件名 路径全字匹配 全字搜指定路径文件名: wholewo…

【网络安全】实验六(网络安全协议的应用SSL,Ipsec)

一、实验目的 二、搭配环境 打开两台虚拟机&#xff0c;并参照下图&#xff0c;搭建网络拓扑环境&#xff0c;要求两台虚拟机的IP地址要按照图中的标识进行设置&#xff0c;并根据搭建完成情况&#xff0c;勾选对应选项。同时&#xff0c;按照多选题中2-3题的要求完成相关环境…

java核心-泛型

目录 概述什么是泛型分类泛型类泛型接口泛型方法 泛型通配符分类 泛型类型擦除分类无限制类型擦除有限制类型擦除 问题需求第一种第二种 概述 了解泛型有利于学习 jdk 、中间件的源码&#xff0c;提升代码抽象能力&#xff0c;封装通用性更强的组件。 什么是泛型 在定义类、接…

web安全基础名词概念

本节内容根据小迪安全讲解制作 第一天 域名&#xff1a; 1.1什么是域名&#xff1f; 网域名称(英语&#xff1a;Domain Name&#xff0c;简称&#xff1a;Domain)&#xff0c;简称域名、网域&#xff0c;是由一串用点分隔的字符组成的互联网上某一台计算机或计算机组的名称&a…