【AI测试】python文字图像识别tesseract

[AI测试]python文字图像识别tesseract

github官网:https://github.com/tesseract-ocr/tesseract

python版本:https://github.com/madmaze/pytesseract

OCR,即Optical Character Recognition,光学字符识别,是指通过扫描字符,然后通过其形状将其翻译成电子文本的过程。对于图形验证码来说,它们都是一些不规则的字符,这些字符确实是由字符稍加扭曲变换得到的内容。

tesseract-OCR是一个开源的OCR引擎,能识别100多种语言,专门用于对图片文字进行识别,并获取文本。但是它的缺点是对手写的识别能力比较差。

Tesseract支持各种图像格式,包括PNG,JPEG和TIFF。

可以识别的语言列表:Languages/Scripts supported in different versions of Tesseract | tessdoc (tesseract-ocr.github.io)

(这么多叉叉把我看迷了)

在这里插入图片描述

下载安装

第一步需要先安装Tesseract OCR引擎

第二步需要安装支持python的pytesseract库及其相关依赖

Tesseract OCR引擎下载

安装Tesseract OCR引擎:pytesseract依赖于Tesseract OCR引擎。

官方文档:Introduction | tessdoc (tesseract-ocr.github.io)

根据官方介绍我们需要知道:

  • 有两个部分需要安装,引擎本身和语言的训练数据。
  • 语言训练的数据包称为“tesseract-ocr-langcode”和“tesseract-ocr-script-scriptcode”,其中langcode 是三个字母的语言代码, scriptcode 是四个字母的脚本代码。
  • 例如:tesseract-ocr-eng(英语),tesseract-ocr-ara(阿拉伯语),tesseract-ocr-chi-sim(简体中文),tesseract-ocr-script-latn(拉丁字母),tesseract-ocr-script-deva(梵文)等。
  • 数据集下载地址:Traineddata Files for Version 4.00 + | tessdoc (tesseract-ocr.github.io)

Mac安装tesseract

1,安装有四种方式:

"安装tesseract, 同时安装训练工具"
brew install --with-training-tools tesseract "安装tesseract,同时它还会安装所有语言"
brew install --all-languages tesseract "安装附加组件"
brew install --all-languages --with-training-tools tesseract "安装tesseract,但是不安装训练工具,一般情况用这种方式就可以"
brew install tesseract 

2,安装完tesseract后,进行测试:

tesseract -v

3、安装语言数据集

sudo port install tesseract-<langcode>

支持的语言:https://ports.macports.org/search/?q=tesseract-&name=on

在这里插入图片描述

Windows安装tesseract

1、下载tesseract安装包

  • tesseract安装包下载地址: https://digi.bib.uni-mannheim.de/tesseract/

  • 在这里插入图片描述

  • 注意区分32位和64位

  • 我下载的是目前最新的,可以点击直接下载64位,tesseract-ocr-w64-setup-5.3.1.20230401.exe

  • 网速较慢的可以从我网盘下载

    • 链接:https://pan.baidu.com/s/1B5CyYZ5D5qwCXzZ9dnSGpQ?pwd=mwj6 
      提取码:mwj6
      

2、进行安装

  • (1)双击下载好的exe,建议右键以管理员身份运行

    • 在这里插入图片描述
  • (2)点击next

    • 在这里插入图片描述
  • (3)点击I Agree

    • 在这里插入图片描述
  • (4)根据需要选择,第一个是为这台电脑所有用户下载,第二个是只为当前用户下载

    • 在这里插入图片描述
  • (5)这里是配置语言包下载,可以点开Additional开头的这两个选项查看需要下载的语言,如果只想要中文那就找到Chinese下载就可以了。选好后再点击Next即可。

    • 在这里插入图片描述
  • (6)选择你要安装的路径,注意如果不使用默认路径,后续代码会报FileNotFoundError:[WinError 2]系统找不到指定文件的错误,解决办法就是用tesseract.exe的绝对路径。这里我使用默认路径安装。

    • 在这里插入图片描述
  • (7)点击Install

    • 在这里插入图片描述
  • (8)安装完成后点击Next,再点击Finish

    • 在这里插入图片描述

    • 在这里插入图片描述

2、如果上面你下载语言库失败,你可以用如下官方链接自己下载对应语言库数据,都是几十兆

https://github.com/tesseract-ocr/tessdata_best
  • 网速不好的用这个
    链接:https://pan.baidu.com/s/11k5od_fd3_THN2YiGgmH3w?pwd=mwj6 
    提取码:mwj6
    

3、配置环境变量

  • 如果你用的是默认地址,C:\Program Files\Tesseract-OCR,把它加到环境变量中即可

  • 我的电脑(此电脑) -> 右键点击属性 -> 高级系统设置 -> 环境变量 -> 系统环境变量找到Path点进去 -> 新建 -> 输入你的安装地址

  • # 默认安装地址则输入以下内容
    C:\Program Files\Tesseract-OCR
    

4、验证是否安装成功

  • ctrl+R 输入cmd回车
  • 输入tesseract -v,显示出内容就证明成功,如果出现不是内部命令巴拉巴拉的,就说明环境变量没搞好,重新配一下
  • 在这里插入图片描述

安装pytesseract

pip install pytesseract

其他相关依赖安装

pip install opencv-python
pip install pillow

代码demo

from PIL import Image
import pytesseractim = Image.open('imgs\csdn_homepage.png')# 识别文字,并指定语言
string = pytesseract.image_to_string(im, lang='chi_sim')
print(string)

对应识别的图片如下:

在这里插入图片描述

运行结果如下:

在这里插入图片描述

看到这识别出来的内容,我头顶上大写的无语,甚至想给电脑一拳!我都写了这么多内容了,你就这???

调整思路(无效)

查阅相关资料发现,预下载的中文包是比较小,准确率不高。

通过官网得知,tessdata_best下的语言包识别准确度是最高的,于是我就直接去下载了。

前文也有提到:https://github.com/tesseract-ocr/tessdata_best,网盘链接也在前面了。

在这里插入图片描述

把下载好的包解压,将里面的内容复制到C:\Program Files\Tesseract-OCR\tessdata目录下(先将该目录内容全部删干净)。

之后再去运行代码。

在这里插入图片描述

此处有十几句脏话…

冷静下来,是我能力不足,是我不会训练模型,是我不应该只会捡现成用。

过了几分钟,脏话…

模型训练

可以在网上自己搜资料,参考资料里面我也放了一篇。

模型训练搜索关键词:tesseract-ocr训练方法

我不折腾了,这就是没有根据需求调研好相关资料的下场,看到一个就去莽还莽失败了。

更改方案

大家一定要记住,研究新东西,先调研,再踏进去。

简单的github搜索:

在这里插入图片描述

经过多方面的考察,发现:

Tesseract OCR

  • 优点:支持补充训练
  • 缺点:中文识别巨差!巨差!(暴躁怒吼声)

EasyOCR

  • 优点:ocr识别还可以,优于一般开源模型
  • 缺点:识别速度很慢,不支持训练

Paddle OCR

  • 优点:可以补充训练,ocr识别效果好,执行速度快,文档齐全,资料多
  • 缺点:偶尔会出现部分内容丢失的情况

CnOCR

  • 优点:支持训练自己的模型,执行速度快,识别效果也不错
  • 缺点:训练比PaddleOCR麻烦,极少更新维护

已有代码

虽然失败了,但是相关代码还是放出来,给有需要的小伙伴使用。

只拿取文字(官方代码)

import cv2
import pytesseract
from PIL import Imageim = 'imgs\csdn_homepage.png'img_cv = cv2.imread(im)
# By default OpenCV stores images in BGR format and since pytesseract assumes RGB format,
# we need to convert from BGR to RGB format/mode:
img_rgb = cv2.cvtColor(img_cv, cv2.COLOR_BGR2RGB)
print(pytesseract.image_to_string(img_rgb, lang='chi_sim'))
# OR
img_rgb = Image.frombytes('RGB', img_cv.shape[:2], img_cv, 'raw', 'BGR', 0, 0)
print(pytesseract.image_to_string(img_rgb, lang='chi_sim'))

(输出的内容很惨,还有大量文字丢失)

识别文字并返回对应坐标

# -*- coding: utf-8 -*-
'''
@Time : 2023/8/18 13:01
@Email : Lvan826199@163.com
@公众号 : 梦无矶的测试开发之路
@File : python文字识别.py
'''
__author__ = "梦无矶小仔"import cv2
import pytesseract# 设置语言数据
# 下面一行代码很重要
tessdata_dir_config = '--tessdata-dir "C:\Program Files\Tesseract-OCR\\tessdata"'# 1、加载并预处理图像
image = cv2.imread('imgs\csdn_homepage.png')  # 替换为你的图像文件路径,注意文件名不能有中文
# 根据图像的复杂性,还可以在预处理步骤中使用额外的图像处理技术,如阈值化、去噪、边缘检测等,以提高准确度和结果。
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)  # cv2让图片黑白# 2、执行文字识别和坐标提取 英语就是eng
results = pytesseract.image_to_data(gray, lang='chi_sim', config=tessdata_dir_config, output_type=pytesseract.Output.DICT)text_coords = []for i, text in enumerate(results['text']):if text.strip():x = results['left'][i]y = results['top'][i]width = results['width'][i]height = results['height'][i]text_coords.append({'text': text, 'x': x, 'y': y, 'width': width, 'height': height})# 输出结果
for coord in text_coords:print(coord['text'], '-> 坐标:[', coord['x'], ",", coord['y'], "],  ", "宽高:[", coord['width'], coord['height'], "]")

输出样式:

在这里插入图片描述

相关参考资料

# 官方文档
https://tesseract-ocr.github.io/tessdoc/
# 里面提到了艺术字的识别
https://www.jianshu.com/p/3326c7216696
# 简单的安装教程
https://zhuanlan.zhihu.com/p/186225362
# 比较详细的安装教程及pytesseract基本使用
https://zhuanlan.zhihu.com/p/341306710
# mac安装pytesseract
https://blog.csdn.net/wodedipang_/article/details/84585914
# 模型训练
https://www.cnblogs.com/cnlian/p/5765871.html
# OCR调研报告
https://blog.csdn.net/weixin_41021342/article/details/127203654

下一篇更新PaddleOCR,祝我成功!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工程制造领域:企业IT架构

一、IT组织规划架构图 1.1 IT服务保证梯队与指导思想 二、整体业务规划架构图 三、数据化项目规划架构图 四、应用系统集成架构图

CSS Flex布局

前言 Flex布局&#xff08;弹性盒子布局&#xff09; 是一种用于在容器中进行灵活和自适应布局的CSS布局模型。通过使用Flex布局&#xff0c;可以更方便地实现各种不同尺寸和比例的布局&#xff0c;使元素在容器内自动调整空间分配。 目录 容器属性 &#x1f341;display属性 &…

数据结构与算法复杂度介绍

目录 一、基本概念 二、时间复杂度 【2.1】时间复杂度概念 【2.2】大O的渐进表示法 【2.3】举例时间复杂度计算 三、空间复杂度 一、基本概念 数据结构&#xff1a;相互之间存在一种或者多种特定关系的数据元素的集合。在逻辑上可以分为线性结构&#xff0c;散列结构、树…

单片机电子元器件-按键

电子元器件 按键上有 四个引脚 1 2 、 3 4 按下之后 导通 1 3 、 2 4 初始导通 通常按键开关为机械弹性开关&#xff0c;开关在闭合不会马上稳定的接通&#xff0c;会有一连串的抖动 抖动时间的长短有机械特性来决定的&#xff0c;一般为5ms 到10 ms 。 消抖的分类 硬件消…

【大数据Hive】hive 加载数据常用方案使用详解

目录 一、前言 二、load 命令使用 2.1 load 概述 2.1.1 load 语法规则 2.1.2 load语法规则重要参数说明 2.2 load 数据加载操作演示 2.2.1 前置准备 2.2.2 加载本地数据 2.2.3 HDFS加载数据 2.2.4 从HDFS加载数据到分区表中并指定分区 2.3 hive3.0 load 命令新特性 …

vue项目配置MongoDB的增删改查操作

在Vue中配置MongoDB的增删改查操作&#xff0c;需要先安装mongoose模块来连接MongoDB数据库。 1. 在Vue项目的根目录中&#xff0c;使用命令行安装mongoose模块&#xff1a; npm install mongoose --save 2. 找到启动node的app.js文件&#xff08;我这里是在server文件中&…

Java开发之Redis(面试篇 持续更新)

文章目录 前言一、redis使用场景1. 知识分布2. 缓存穿透① 问题引入② 举例说明③ 解决方案④ 实战面试 3. 缓存击穿① 问题引入② 举例说明③ 解决方案④ 实战面试 4. 缓存雪崩① 问题引入② 举例说明③ 解决方案④ 实战面试 5. 缓存-双写一致性① 问题引入② 举例说明③ 解决…

Linux执行命令

命令格式 主命令 选项 参数&#xff08;操作对象&#xff09;例如&#xff1a; 修改主机名 hostname set-hostname 新名称显示/目录下的文件的详细信息 ls -l /命令 内置命令&#xff08;builtin&#xff09;&#xff1a;shell程序自带的命令。 外部命令&#xff1a;有独立…

多通道振弦数据记录仪应用桥梁安全监测的关键要点

多通道振弦数据记录仪应用桥梁安全监测的关键要点 随着近年来桥梁建设和维护的不断推进&#xff0c;桥梁安全监测越来越成为公共关注的焦点。多通道振弦数据记录仪因其高效、准确的数据采集和处理能力&#xff0c;已经成为桥梁安全监测中不可或缺的设备。本文将从以下几个方面…

【JavaEE】_HTML

目录 1.HTML结构 2. HTML常用标签 2.1 注释标签 2.2 标题标签&#xff1a;h1~h6 2.3 段落标签&#xff1a;p 2.4 换行标签&#xff1a;br 2.5 格式化标签 2.6 图片标签&#xff1a;img 2.7 超链接标签&#xff1a;a 2.8 表格标签 2.9 列表标签 2.10 表单标签 2.10…

PPO算法

PPO算法 全称Proximal Policy Optimization&#xff0c;是TRPO(Trust Region Policy Optimization)算法的继承与简化&#xff0c;大大降低了实现难度。原论文 算法大致流程 首先&#xff0c;使用已有的策略采样 N N N条轨迹&#xff0c;使用这些轨迹上的数据估计优势函数 A ^ …

TCP 和 UDP 的区别、TCP 是如何保证可靠传输的?

先来介绍一些osi七层模型 分为应用层、表示层、会话层、运输层、网络层、链路层、物理层。 应用层(数据)&#xff1a;确定进程之间通信的性质以及满足用户需要以及提供网络和用户应用&#xff0c;为应用程序提供服务&#xff0c;DNS&#xff0c;HTTP&#xff0c;HTTPS&#xf…

【LeetCode】剑指 Offer <二刷>(7)

目录 题目&#xff1a;剑指 Offer 14- I. 剪绳子 - 力扣&#xff08;LeetCode&#xff09; 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 题目&#xff1a;剑指 Offer 14- II. 剪绳子 II - 力扣&#xff08;…

Java“牵手”唯品会商品详情数据,唯品会商品详情API接口,唯品会API接口申请指南

唯品会平台商品详情接口是开放平台提供的一种API接口&#xff0c;通过调用API接口&#xff0c;开发者可以获取唯品会商品的标题、价格、库存、月销量、总销量、库存、详情描述、图片等详细信息 。 获取商品详情接口API是一种用于获取电商平台上商品详情数据的接口&#xff0c;…

Rhinoceros(犀牛)使用技巧:有关曲线和曲面的分析

Rhinoceros&#xff08;犀牛&#xff09; for Mac破解版是一款功能强大的高级建模软件&#xff0c;可以创建、编辑、分析、提供、渲染、动画与转换 NURBS 线条、曲面、实体与多边形网格。不受精度、复杂、阶数或是尺寸的限制&#xff0c;在本篇文章中&#xff0c;为您介绍的是有…

CUDA 问题 ,一直头大。。。。

1.卸载cuda ubuntu系统安装/卸载cuda和cudnn_怎么删除cudnn_Zhijun.liStudio的博客-CSDN博客ubuntu系统安装/卸载cuda和cudnn_怎么删除cudnnhttps://blog.csdn.net/weixin_45921929/article/details/128849198?ops_request_misc%257B%2522request%255Fid%2522%253A%252216939…

复现XSS漏洞及分析

XSS漏洞概述&#xff1a; 类型一&#xff1a;反射型 类型二&#xff1a;存储型 类型三&#xff1a;DOM型 复现20字符短域名绕过 一、安装BEEF 1、在Kali中运行apt install beef-xss 2、运行beef 3、在浏览器访问 二、安装galleryCMS *遇到一点小问题 提示"last…

ping: www.baidu.com: Name or service not known 写了DNS还是不行

环境描述&#xff1a;ESXI平台上&#xff0c;一台Centos7虚拟主机。 问题描述&#xff1a;平台上的其他的虚拟机可以正常ping通&#xff0c;就这台ping IP地址可以通&#xff0c;ping域名解析失败。 排查过程&#xff1a; 1、检查网卡配置文件和/etc/resolv.conf配置文件是否…

postgis数据库导出csv表再导入postgis

1、导出csv表 from settings_Address import * from sqlalchemy import create_engine, MetaData import pandas as pd def create_conn(Postgis_user,Postgis_password,Postgis_host,Postgis_port,dbname_PG):# return create_engine(PostgispyPostgis://{}:{}{}:{}/{}.forma…

FOXBORO FBM232 P0926GW 自动化控制模块

Foxboro FBM232 P0926GW 是 Foxboro&#xff08;福克斯博罗&#xff09;自动化控制系统的一部分&#xff0c;通常用于监测和控制工业过程。以下是关于这种类型的自动化控制模块可能具有的一些常见功能&#xff1a; 数字输入通道&#xff1a; FBM232 P0926GW 控制模块通常具有多…