Tesseract-OCR使用 jTessBoxEditor 进行训练及python调用

Python-tesseract 是 python 的光学字符识别 (OCR) 工具。 也就是说,它将识别并“读取”嵌入在图像中的文本。

1、下载安装 jTessBoxEditor和tesseract-ocr

我下载的是jTessBoxEditor-2.2.0版本的,里面自带tesseract-ocr。

两种下载的地方都行

阿里云盘分享  提取码: 47oh

或者各位可以去官网下载jTessBoxEditor: VietOCR - Browse /jTessBoxEditor at SourceForge.net

下载完成之后解压

里面有tesseract-ocr。

所以我们需要配置环境变量,右键此电脑图标,点击属性。

再点击高级系统设置.

在系统环境变量path路径下添加tesseract-ocr文件夹的路径。

之后在新建字库tessdata的系统变量,变量名为:TESSDATA_PREFIX
变量值为:E:\jTessBoxEditorFX\tesseract-ocr\tessdata,这个是例子,具体是你们自己的文件夹路径。

字库的训练图片格式最好是png的,注意图片数字周围的空白区域不能太窄,tesseract无法识别空白区域太窄的字符。

这个我是用某个网站的验证码脚本生成的

打开jTessBoxEditorFX.jar,打开这个的前提是要下载java环境,网上的话java环境配置一大堆,这里我就不讲了,只要你有java环境的话直接打开就行了。

选择 Tools -> Merge TIFF,打开对话框,选择训练样本所在文件夹,并选中所有要参与训练的样本图片。

直接ctrl +A全选了,注意文件类型,选取自己使用的文件类型,不然显示不出来。

选好了之后,点击打开按钮,出现文件保存对话框,输入文件名:num_1.font.exp0.tif

保存在自己想放的位置。

2、使用tesseract生成.box文件

进入刚才存储num_1.font.exp0.tif文件所在目录,进入终端模式。

tesseract num_1.font.exp0.tif num_1.font.exp0 –l eng batch.nochop makebox

 

读取不出图片。

 但是有些人可能会出现我这种情况,网上很多都没写,研究了很久之后才解决,浪费了我很多时间,所以我才想写这一篇文章,同时也记录一下问题。

tesseract num.font.exp0.tif num.font.exp0 -l eng  --psm 11 batch.nochop makebox

这里加上了--psm参数,以下是psm参数的一些作用

  1. PSM 0 - Orientation and script detection (OSD) only: 仅检测文本方向和脚本,不执行 OCR 识别。

  2. PSM 1 - Automatic page segmentation with OSD: 使用方向和脚本检测的自动页面分割。这是默认模式。

  3. PSM 2 - Automatic page segmentation, but no OSD, or OCR: 自动页面分割,但不进行方向检测和 OCR 识别。适用于单一方向的文档。

  4. PSM 3 - Fully automatic page segmentation, but no OSD: 完全自动页面分割,但不进行方向和脚本检测。

  5. PSM 4 - Assume a single column of text of variable sizes: 假设文本为单列,文本大小可变。

  6. PSM 5 - Assume a single uniform block of vertically aligned text: 假设文本为单一块,垂直对齐的文本。

  7. PSM 6 - Assume a single uniform block of text: 假设文本为单一块,统一大小的文本。

  8. PSM 7 - Treat the image as a single text line: 将图像作为单行文本处理。

  9. PSM 8 - Treat the image as a single word: 将图像作为单个单词处理。

  10. PSM 9 - Treat the image as a single word in a circle: 将图像作为圆圈中的单个单词处理。

  11. PSM 10 - Treat the image as a single character: 将图像作为单个字符处理。

  12. PSM 11 - Sparse text. Find as much text as possible in no particular order: 稀疏文本,尽可能多地查找文本,无特定顺序。

  13. PSM 12 - Sparse text with OSD: 带有方向和脚本检测的稀疏文本。

  14. PSM 13 - Raw line. Treat the image as a single text line, bypassing hacks that are Tesseract-specific: 处理原始文本行,绕过特定于 Tesseract 的修正。

这里选用psm 11的原因我认为图片识别的时候认为我文本太稀疏,识别不出图片内容。

正常生成。

使用jTessBoxEditor调整.box训练文件.box文件中记录了每个字符在图片上的位置以及识别出的内容,但是我们需要对里面的内容进行修改,毕竟有些识别不是很准确。

对每张图片的识别字符和识别框进行纠正,如果字符识别错了,我们就改成正确的,如果识别出现偏差,我们也要进行调整。

打开进行手动调整

图片识别出4811。肯定是错的。

这种只要调整识别的数字就行了,接下来这个需要调整识别框的大小。

split分割,insert插入框,delete删除框。

X和Y调整位置,W和H调整宽度和高度。

这样就调整好了,每个都要有错误都要调整一下。搞完之后要save一下。每个图片都要处理一下。

3、创建一个文件创建字体特征文件

在刚才文件夹内右键新建一个txt文件输入

font 0 0 0 0 0

表示字体 font 的粗体、倾斜等共计5个属性全都设置为0。保存好之后吧txt后缀名去掉。文件名为font_properties。

4、使用tesseract生成num.font.exp0.tr训练文件

tesseract num.font.exp0.tif num.font.exp0 nobatch box.train

 还是错的,还是得加上--psm11.。

tesseract num.font.exp0.tif num.font.exp0 --psm 11 nobatch box.train

生成成功。

​ 5、生成字符集文件

unicharset_extractor num.font.exp0.box

执行之后在当前目录生成unicharset文件。

6、生成数据字典

mftraining -F font_properties -U unicharset -O num.unicharset num.font.exp0.tr

cntraining num.font.exp0.tr

 

改名字。

需要手动修改名称,这里我们修改成num.inttemp、num.pffmtable、num.normproto、num.shapetable。

7、合并数据文件,生成字库文件。

combine_tessdata num.

 

生成字库文件。把字库文件放到F:\jtessboxeditor\jTessBoxEditor\tesseract-ocr\tessdata。

文件路径写自己的。

输入命令:

tesseract --list-langs

tesseract 3.png stdout -l num --psm 11

 试看看。

基本全部正确。

tesseract-ocr也可以当做接口使用。

8、tesseract-ocr接口python使用。

pip install pytesseract

第一种方法:

下载pytesseract库。下载好了之后去python库文件地方修改pytesseract.py

cmd修改成自己tesseract文件夹的位置。

接下来就可以使用了。

使用例子:

import pytesseract
import cv2
from PIL import Image
import os

def recognize_text(input_path):
    #调整图片宽高
    def resize_image(input_path, output_path, scale_factor, interpolation=cv2.INTER_CUBIC):
        # 读取输入图像
        img = cv2.imread(input_path)
        # 如果图像读取失败,则返回错误消息
        if img is None:
            print("无法读取输入图像,请检查文件路径!")
            return
        # 获取输入图像的高度和宽度
        height, width = img.shape[:2]
        
        # 根据缩放因子计算输出图像的大小
        new_width = int(width * scale_factor)
        new_height = int(height * scale_factor)
        
        # 调整图像大小
        resized_img = cv2.resize(img, (new_width, new_height), interpolation=interpolation)
        
        #删除原本图像
        os.remove(input_path)
        # 保存调整后的图像
        cv2.imwrite(output_path, resized_img)
        print("已保存调整大小后的图像:", output_path)
    output_path = input_path
    resize_image(input_path,output_path, 6)
    image=Image.open(input_path)
    configdigit='--psm 11' #参数配置
    text=pytesseract.image_to_string(image,lang='num',config=configdigit)  #选用自己的训练的数据集num
    return text #返回识别结果

 这个的话我有对输入进去的图片进行处理,我那个图片太小了,得把他调大。主要使用都是最后的几行。

第二种改进方法是:

每次在代码中加入以下代码,指明tesseract_cmd命令的位置,方便pytesseract调用:

tesseract_cmd = r'C:\Program Files (x86)\Tesseract-OCR\tesseract'
pytesseract.pytesseract.tesseract_cmd =tesseract_cmd

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

哪款桌面便签软件安全好用?2024好用便签app推荐

桌面便签软件已经成为许多人日常生活和工作中不可或缺的工具,它们实用、灵活,能够帮助我们快速记录重要信息,提醒任务事项。随着科技的进步,市面上的便签软件层出不穷,功能也越发强大和实用。在众多的便签软件中&#…

Linux网络-使用Tcp协议进行网络通信并通过网络接口实现远端翻译

文章目录 Tcp协议Tcp协议常见API接口1. int socket(int domain, int type, int protocol);2. int bind(int socket, const struct sockaddr *address, socklen_t address_len);struct sockaddr 3. int listen(int socket, int backlog);4. int accept(int socket, struct socka…

[.NET开发者的福音]一个方便易用的在线.NET代码编辑工具.NET Fiddle

前言 今天给大家分享一个方便易用的.NET在线代码编辑工具,能够帮助.NET开发人员快速完成代码编写、测试和分享的需求(.NET开发者的福音):.NET Fiddle。 .NET Fiddle介绍 我们可以不用再担心环境与庞大的IDE安装的问题&#xff0…

python实现——分类类型数据挖掘任务(图形识别分类任务)

分类类型数据挖掘任务 基于卷积神经网络(CNN)的岩石图像分类。有一岩石图片数据集,共300张岩石图片,图片尺寸224x224。岩石种类有砾岩(Conglomerate)、安山岩(Andesite)、花岗岩&am…

github有趣项目:自制“我的世界” project make

videocodehttps://www.youtube.com/watch?v4O0_-1NaWnY,https://www.bilibili.com/video/BV1oj411p7qM/?https://github.com/jdah/minecraft-weekend MAKE git clone --recurse-submodules https://github.com/jdah/minecraft-weekend.git 正克隆到 minecraft-weekend... …

【笔记】关于brew install ffmpeg出现问题解决

Macos系统需要安装ffmpeg使用,通过brew install ffmpeg安装相关依赖时,当安装至flac时出现下列问题 环境:有代理开启 使用国内数据源 brew install ffmpeg --verbose --debug 安装过程中显示日志 curl: (35) error:1400442E:SSL routines:C…

前端3剑客(第1篇)-初识HTML

100编程书屋_孔夫子旧书网 当今主流的技术中,可以分为前端和后端两个门类。 前端:简单的理解就是和用户打交道 后端:主要用于组织数据 而前端就Web开发方向来说, 分为三门语言, HTML、CSS、JavaScript 语言作用HT…

Apache Pulsar 中文社区有奖问卷调查(2024 上半年度)

Apache Pulsar 中文社区有奖问卷调查(2024 上半年度) 📣 📣 📣 Hi,Apache Pulsar 社区的小伙伴们,社区 2024 上半年度的有奖问卷调查来啦! 🙌 本次调查旨在了解用户使用 …

EIS 2019 webshell

请求中可以确定是http POST流量 同时可以判断是 蚁剑的流量 进一步过滤 http.request.method "POST" 直接追踪其tcp流 得到 列举部分 eVAl(cHr(0x40).ChR(0x69).ChR(0x6e).ChR(0x69).ChR(0x5f).ChR(0x73).ChR(0x65).ChR(0x74).ChR(0x28)直接输出一下 内容 <…

数据治理基础知识

文章目录 基本概念相关名词术语数据治理对象 基本概念 1&#xff09;从管理者视角看数据治理 数据治理是企业发展战略的组成部分&#xff0c;是指导整个集团进行数字化变革的基石&#xff0c;要将数据治理纳入企业的顶 层规划&#xff0c;各分/子公司、各业务部门都需要按照企…

智慧园区整理技术方案(ppt,软件全套建设方案)

智慧园区管控平台整体技术方案 1.平台概述 2.公共安全 3.物业管理 4.综合管理 5.企业服务 平台规划&#xff0c;整理技术架构搭建&#xff0c;统一门户&#xff0c;lot物联平台&#xff0c;视频云管理平台&#xff0c;GIS服务平台&#xff0c;服务器架构&#xff0c;统一身份认…

发现一个ai工具网站

网址 https://17yongai.com/ 大概看了下&#xff0c;这个网站收集的数据还挺有用的&#xff0c;有很多实用的ai教程。 懂ai工具的可以在这上面找找灵感。

HTML如何让文字底部线条不紧贴在文字下面(既在内容下方又超出内容区域)

hello&#xff0c;大家好&#xff0c;星途小鹏今天给大家带来的内容是如何让文字底部线条不紧贴在文字下面。 话不多说&#xff0c;先上效果图 简单来说就是padding和margin的区别。 在网页设计中&#xff0c;有时我们想要给某个元素添加一个装饰性的线条&#xff0c;比如底部…

【设计模式】创建型-建造者模式

前言 在面向对象的软件开发中&#xff0c;构建复杂对象时经常会遇到许多挑战。一种常见的解决方案是使用设计模式&#xff0c;其中建造者模式是一个强大而灵活的选择。本文将深入探讨建造者模式的原理、结构、优点以及如何在实际项目中应用它。 一、复杂的对象 public class…

安卓如何书写注册和登录界面

一、如何跳转一个活动 左边的是本活动名称&#xff0c; 右边的是跳转界面活动名称 Intent intent new Intent(LoginActivity.this, RegisterActivity.class); startActivity(intent); finish(); 二、如果在不同的界面传递参数 //发送消息 SharedPreferences sharedPreferen…

【再探】设计模式—中介者模式、观察者模式及模板方法模式

中介者模式让多对多的复杂引用关系变成一对多&#xff0c;同时能通过中间类来封装多个类中的行为&#xff0c;观察者模式在目标状态更新时能自动通知给订阅者&#xff0c;模版方法模式则是控制方法的执行顺序&#xff0c;子类在不改变算法的结构基础上可以扩展功能实现。 1 中…

Python 之SQLAlchemy使用详细说明

目录 1、SQLAlchemy 1.1、ORM概述 1.2、SQLAlchemy概述 1.3、SQLAlchemy的组成部分 1.4、SQLAlchemy的使用 1.4.1、安装 1.4.2、创建数据库连接 1.4.3、执行原生SQL语句 1.4.4、映射已存在的表 1.4.5、创建表 1.4.5.1、创建表的两种方式 1、使用 Table 类直接创建表…

【稳定检索/投稿优惠】2024年商务、信息管理与大数据经济国际会议(BIMBDE 2024)

2024 International Conference on Business, Information Management, and Big Data Economy 2024年商务、信息管理与大数据经济国际会议 【会议信息】 会议简称&#xff1a;BIMBDE 2024 大会地点&#xff1a;中国北京 会议官网&#xff1a;www.bimbde.com 会议邮箱&#xff…

MySql part1 安装和介绍

MySql part1 安装和介绍 数据 介绍 什么是数据库&#xff0c;数据很好理解&#xff0c;一般来说数据通常是我们所认识的 描述事物的符号记录&#xff0c; 可以是数字、 文字、图形、图像、声音、语言等&#xff0c;数据有多种形式&#xff0c;它们都以经过数字化后存入计算机…

CS4344国产替代音频DAC数模转换芯片DP7344采样率192kHz

目录 DAC应用简介DP7344简介结构框图DP7344主要特性微信号&#xff1a;dnsj5343参考原理图 应用领域 DAC应用简介 DAC&#xff08;中文&#xff1a;数字模拟转换器&#xff09;是一种将数字信号转换为模拟信号&#xff08;以电流、电压或电荷的形式&#xff09;的设备。电脑对…