python结合tesseract-ocr识别汉字的训练库过程

news2024/11/18 21:28:16

一、安装python

例如,安装路径为:C:\rtkapp\python-3.8.0

二、安装opencv

三、安装tesseract-ocr

 

 

 

 

 

 

 安装完成后,在系统环境变量path中,添加安装路径C:\rtkapp\Tesseract-OCR

四、打开python安装pytesseract

 五、安装java运行环境

例如,安装版本为:jdk-8u191-windows-x64

 

 添加和配置系统环境变量

 

 

六、安装jTessBoxEditor

例如,安装版本为:jTessBoxEditor1.5

 七、打开jTesseBoxEditor为编辑汉字设置字体为宋体

八、用jTesBoxEditor合并选择的图片文件sample1.png

 保存结果如图:

 九、用命令生成box文件

例如,图片文件为:fmc.font.exp1.tif

运行命令为:tesseract.exe -l chi_sim fmc.font.exp1.tif fmc.font.exp1 batch.nochop makebox

生成的box文件为:fmc.font.exp1.box

十、浏览打开图片文件fmc.font.exp1.tif

用Box View调整X、Y、W、H使汉字正好在方框内,如汉字识别错误,在Char栏修改即可,

全部完成后,按Save保存即可,如下图:

十一、运行下面python脚本生成自定字库fmc.traineddata

import os
import cv2
import time
import pytesseract
import numpy as np
import subprocess
from PIL import Image

#Change work path
workpath="C:\\picdata";
curpath=os.getcwd();
os.chdir(workpath);

#Create a default font properties file
strcmd="echo normal 0 0 0 0 0>font_properties";
print(workpath+">"+strcmd);
print(subprocess.getoutput(strcmd)+"\n");

#Run tesseract for training
strcmd="tesseract.exe -l chi_sim fmc.font.exp1.tif fmc.font.exp1 nobatch box.train";
print(workpath+">"+strcmd);
print(subprocess.getoutput(strcmd)+"\n");

#Compute the character set
strcmd="unicharset_extractor.exe fmc.font.exp1.box";
print(workpath+">"+strcmd);
print(subprocess.getoutput(strcmd)+"\n");
strcmd="mftraining -F font_properties -U unicharset -O fmc.unicharset fmc.font.exp1.tr ";
print(workpath+">"+strcmd);
print(subprocess.getoutput(strcmd)+"\n");

#Run clustering
strcmd="cntraining.exe fmc.font.exp1.tr";
print(workpath+">"+strcmd);
print(subprocess.getoutput(strcmd)+"\n");

#Rename files
strcmd="move normproto fmc.normproto";
print(workpath+">"+strcmd);
print(subprocess.getoutput(strcmd)+"\n");
strcmd="move inttemp fmc.inttemp";
print(workpath+">"+strcmd);
print(subprocess.getoutput(strcmd)+"\n");
strcmd="move pffmtable fmc.pffmtable";
print(workpath+">"+strcmd);
print(subprocess.getoutput(strcmd)+"\n");
strcmd="move shapetable fmc.shapetable";
print(workpath+">"+strcmd);
print(subprocess.getoutput(strcmd)+"\n");

#Create tessdata
strcmd="combine_tessdata.exe fmc";
print(workpath+">"+strcmd);
print(subprocess.getoutput(strcmd)+"\n");

tessdata_path="";
strpath=os.getenv("path").split(";");
for kkk in strpath:
    if kkk.lower().find("tesseract")>0:
        tessdata_path=kkk+"\\tessdata";
        break;

#Copy tessdata
print(tessdata_path);
#Create Tessdata
if len(tessdata_path)>0:
    strcmd="copy fmc.traineddata "+tessdata_path;
    print(workpath+">"+strcmd);
    print(subprocess.getoutput(strcmd)+"\n");

十二、用生成的自定义字库fmc识别图片汉字

import os
import cv2
import pytesseract

pytesseract.pytesseract.tesseract_cmd = 'tesseract.exe'
img = cv2.imread('C:\\picdata\\sample1.png')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

print(pytesseract.image_to_string(img,lang="fmc"))

运行结果如下:

 

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

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

相关文章

TenserRT(四)在 PYTORCH 中支持更多 ONNX 算子

第四章:在 PyTorch 中支持更多 ONNX 算子 — mmdeploy 0.12.0 文档 PyTorch扩充。 PyTorch转换成ONNX: PyTorch有实现。PyTorch可以转化成一个或者多个ONNX算子。ONNX有相应算子。 如果即没有PyTorch实现,且缺少PyTorch与ONNX的映射关系&…

太猛了,靠“吹牛”过顺丰一面,月薪30K

说在前面 在40岁老架构师尼恩的(50)读者社群中,经常有小伙伴,需要面试美团、京东、阿里、 百度、头条等大厂。 下面是一个5年小伙伴成功拿到通过了顺丰面试,拿到offer,月薪30K。 现在把面试真题和参考答…

一起学算法(插入排序篇)

概念: 插入排序(inertion Sort)一般也被称为直接插入排序,是一种简单的直观的排序算法 工作原理:将待排列元素划分为(已排序)和(未排序)两部分,每次从&…

Python毕业设计可用小游戏:5个热门类型,引爆学生热情!每个类型附单独案例!

游戏大全 前言1.格斗技能类小游戏2.益智塔防类小游戏3.MMO类型游戏4.养成类游戏5.经济类游戏 总结 前言 大家好,我是辣条哥 在当今数字化时代,编程已经成为一项不可或缺的技能。而Python作为一门简洁易学的编程语言,正受到越来越多学生的青睐…

03_使用execle表生成甘特图

背景 每次排期都需要话很多时间 很可能排期还不对头 这时候需要一个表能看到 1.什么时候项目结束 开始 转阶段 2.当前手上的活能不能做完 当前阶段手上有多少活 3.产品经理每次修改完计划迅速排期 甘特图生成 execle表生成 1.需要使用亿图创建甘特图 2.把当前的甘特图数据进…

使用Excel建立贷款损失计算器

前几天上了一门Excel课程,掌握了一些新的小技能,比如模拟运算表和控件以及动态图表的使用,结合工作内容进行了下实操练习。 一、控件和动态图表的使用 以贷款产品的损益测算为例,计算在不同资金成本、获客成本、提前还款损失以及风…

SpringBoot2.5.6整合Elasticsearch7.12.1

SpringBoot2.5.6整合Elasticsearch7.12.1 下面将通过SpringBoot整合Elasticseach,SpringBoot的版本是2.5.6,Elasticsearch的版本是7.12.1。 SpringBoot整合Elasticsearch主要有三种方式,一种是通过elasticsearch-rest-high-level-client&am…

c++里的基础类 is_empty_v<_Ty1>

&#xff08;1&#xff09;为什么要研究这个问题&#xff0c;因为包括智能指针等很多源代码里都会使用 _Compressed_pair 这个类&#xff0c;其是一对值。研究这个类&#xff0c;就牵涉另一个更基础的类 is_empty_v<_Ty1> &#xff08;2&#xff09; is_empty_v<_Ty1&…

内部类(下)匿名内部类,静态内部类的使用

文章目录 前言一、匿名内部类二、静态内部类三、内部类的继承总结 前言 该文将会介绍匿名内部类、静态内部类的使用&#xff0c;补充完毕java中的内部类。补充内容为向上转型为接口、使用this关键字获取引用、内部类的继承。 一、匿名内部类 定义&#xff1a;没有名称的内部类。…

redis 淘汰策略和持久化

文章目录 一、淘汰策略1.1 背景1.2 淘汰策略 二、持久化2.1 AOF日志2.1.1 AOF配置2.1.2 AOF策略2.1.3 AOF缺点2.1.4 AOF Rewrite2.1.5 AOF Rewrite配置2.1.6 AOF Rewrite缺点2.1.7 fork进程时的写时复制2.1.8 大key对持久化的影响 2.2 RDB快照2.2.1 RDB配置2.2.2 RDB缺点 2.3 混…

二分查找算法(全网最详细代码演示)

二分查找也称 半查找&#xff08;Binary Search&#xff09;&#xff0c;它时一种效率较高的查找方法。但是&#xff0c;折半查找要求线性表必须采用顺序存储结构&#xff0c;而且表中元素按关键字 有序 排列。 注意&#xff1a;使用二分查找的前提是 该数组是有序的。 在实际开…

web前端常用调试工具

概述 当我们写 webapp 或者 移动端H5网页时&#xff0c;要在手机上调试并不容易。 alert&#xff1a;很早之前的调试办法&#xff08;已被抛弃&#xff09; vconsole&#xff1a;是2016年由微信公众平台前端团队推出&#xff08;目前大量使用&#xff09; eruda&#xff1a…

解读随机森林的决策树:揭示模型背后的奥秘

一、引言 随机森林[1]是一种强大的机器学习算法&#xff0c;在许多领域都取得了显著的成功。它由多个决策树组成&#xff0c;而决策树则是构建随机森林的基本组件之一。通过深入解析决策树&#xff0c;我们可以更好地理解随机森林模型的工作原理和内在机制。 决策树是一种树状结…

虚拟现实技术(VR)

目录 1.什么是虚拟现实技术 2.虚拟现实技术的由来 3.虚拟现实技术给人类带来的好处 4.虚拟现实技术未来的走向 1.什么是虚拟现实技术 虚拟现实技术&#xff08;Virtual Reality&#xff0c;简称VR&#xff09;是一种通过计算机生成的模拟环境&#xff0c;使用户能够身临其境…

【js】经纬度位置获取navigator.geolocation.getCurrentPosition:

文章目录 一、经纬度位置获取navigator.geolocation.getCurrentPosition二、getCurrentPosition()在google chrome上不起作用 一、经纬度位置获取navigator.geolocation.getCurrentPosition 【文档】https://developer.mozilla.org/zh-CN/docs/Web/API/Window/navigator // 获取…

Redis 数据库高可用

Redis 数据库的高可用 一.Redis 数据库的持久化 1.Redis 高可用概念 &#xff08;1&#xff09;在web服务器中&#xff0c;高可用是指服务器可以正常访问的时间&#xff0c;衡量的标准是在多长时间内可以提供正常服务&#xff08;99.9%、99.99%、99.999%等等&#xff09;。 …

《MySQL 实战 45 讲》课程学习笔记(三)

事务隔离 事务就是要保证一组数据库操作&#xff0c;要么全部成功&#xff0c;要么全部失败。 隔离性与隔离级别 事务特性&#xff1a;ACID&#xff08;Atomicity、Consistency、Isolation、Durability&#xff0c;即原子性、一致性、隔离性、持久性&#xff09;。当数据库上…

Web-1-网站工作流程介绍

我们学习web开发&#xff0c;首先要知道什么是Web&#xff1f; Web: 全球广域网&#xff0c;也称为万维网(www World Wide Web)&#xff0c;能够通过浏览器访问的网站 比如我展示的这京东&#xff0c;淘宝唯品会都叫做网站&#xff0c;那么现在大家想一下&#xff0c;你还知道什…

用Ubuntu交叉编译Linux内核源码并部署到树莓派4B上

参考文章 1. 配置交叉编译环境 之前在ubuntu上配置过了&#xff0c;直接跳过 2.获取Linux内核源码 Linux内核源码链接 到链接里面选择自己合适版本的内核源码下载下来&#xff0c;然后传到ubuntu中进行解压 3.Linux内核源码的配置 参考文章 厂家配linux内核源码&#xff…

数据可视化库pyecharts简单入门

文章目录 0. 介绍1. 快速开始1.1 安装1.1.1 pip安装1.1.2 源码安装 1.2 快速上手1.2.1 柱状图1.2.2 链式调用1.2.3 使用options选项配置参数&#xff08;一切皆options&#xff09;1.2.4 渲染成图片文件1.2.5 使用主题1.2.6 地图 2. 全局配置项2.1 使用指南2.2 常用全局配置项2…