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

news2024/11/29 18:20:40

[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 pytesseract

im = 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 Image

im = '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.coloradmin.cn/o/975346.html

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

相关文章

骨传导耳机用久了伤耳朵吗?骨传导耳机有什么优势

骨传导耳机用久了不伤耳朵&#xff0c;相对于传统的入耳式耳机来说&#xff0c;对耳朵的压力和损伤较小。由于骨传导技术不直接通过耳道传递声音&#xff0c;而是通过振动将声音传送到内耳&#xff0c;因此相比其他类型的耳机&#xff0c;它在减少听力损伤的风险方面具有优势。…

3月面试华为被刷,准备半年,9月二战华为终于上岸,要个27K不过分吧?

终于二战上岸了&#xff0c;二战华为也并不是说非华为不可&#xff0c;只是觉得心里憋着一口气&#xff0c;这就导致我当时有其他比较好的offer&#xff0c;我也没有去&#xff0c;就是想上岸华为来证明自己,现在也算是如愿了&#xff0c;来跟大伙们分享一下~ 个人情况 我本人…

如何检查Windows 11笔记本电脑电池健康状况

如果你拥有一台运行微软最新操作系统的便携式电脑&#xff0c;那么检查Windows 11笔记本电脑的电池健康状况可能很重要。 电池寿命显然是一件大事&#xff0c;无论你是在最好的商务笔记本电脑上工作&#xff0c;还是在目前市场上最好的游戏笔记本电脑上享受马拉松式的Starfiel…

自然语言处理(七):来自Transformers的双向编码器表示(BERT)

来自Transformers的双向编码器表示&#xff08;BERT&#xff09; BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;是一种预训练的自然语言处理模型&#xff0c;由Google于2018年提出。它是基于Transformer模型架构的深度双向&#xff0…

DOM 简介 | 深入了解DOM

目录 一、DOM是什么 二、DOM的访问 三、DOM节点类型 四、DOM的分级 今天我们将了解WEB编程中一个重要的概念DOM&#xff08;Document Object Model&#xff09;文档对象模型&#xff0c;它帮助我们使用JavaScript&#xff08;或其他编程语言&#xff09;操纵文档。 一、DO…

java IDEA文件路径分层级

如下图这样 在设置里找到Compact Middle Packages&#xff0c;去掉勾选就行了

MEMS传感器的原理与构造——单片式硅陀螺仪

一、前言 机械转子式陀螺仪在很长的一段时间内都是唯一的选项&#xff0c;也正是因为它的结构和原理&#xff0c;使其不再适用于现代小型、单体、集成式传感器的设计。常规的机械转子式陀螺仪包括平衡环、支撑轴承、电机和转子等部件&#xff0c;这些部件需要精密加工和…

如何建设一个安全运营中心(SOC)?

然信息安全管理问题主要是个从上而下的问题&#xff0c;不能指望通过某一种工具来解决&#xff0c;但良好的安全技术基础架构能有效的推动和保障信息安全管理。随着国内行业IT应用度和信息安全管理水平的不断提高&#xff0c;企业对于安全管理的配套设施如安全运营中心&#xf…

PMD 检查java代码:在条件语句中避免使用硬编码的字面量(AvoidLiteralsInIfCondition )

https://docs.pmd-code.org/pmd-doc-6.55.0/pmd_rules_java_errorprone.html#avoidliteralsinifcondition 在条件语句中&#xff0c;避免避免使用硬编码的字面量。可以将字面量声明为有描述意义的静态成员或者私有成员&#xff0c;提升可维护性。默认忽略"-1" 和&qu…

Spring IoC 的工作流程

概况 IOC 是什么 Bean 的声明方式 IOC 的工作流程 IOC 是什么 IOC 的全称是 Inversion Of Control, 也就是控制反转&#xff0c;它的核心思想是把对象的管理权限交给容器。 应用程序如果需要使用到某个对象实例&#xff0c;直接从 IOC 容器中去获取就行&#xff0c;这样设计的好…

CSP 202303-1 田地丈量

样例输入 4 10 10 0 0 5 5 5 -2 15 3 8 8 15 15 -2 10 3 15 样例输出 44 答题 首先写一个计算面积的函数&#xff0c;既然大小固定就省去了比较&#xff0c;然后是将在范围之外的矩阵给忽略掉&#xff0c;接下来将碰到的矩阵大小缩小为范围之内的&#xff0c;累加即可 #in…

剪辑App的MMKV应用优化实践

作者 | 我爱吃海米 导读 移动端开发中&#xff0c;IO密集问题在很多时候没有得到充足的重视和解决&#xff0c;贸然的把IO导致的卡顿放到异步线程&#xff0c;可能会导致真正的问题被掩盖&#xff0c;前人挖坑后人踩。其实首先要想的是&#xff0c;数据存储方式是否合理&#x…

阿里云服务器2核4G5M配置一年和五年价格明细表

阿里云2核4G服务器5M带宽可以选择轻量应用服务器或云服务器ECS&#xff0c;轻量2核4G4M带宽服务器297元一年&#xff0c;2核4G云服务器ECS可以选择计算型c7、c6或通用算力型u1实例等&#xff0c;买5年可以享受3折优惠&#xff0c;阿腾云分享阿里云服务器2核4G5M带宽五年费用表&…

数字城市:科技革命下的未来之城

随着科技的不断进步&#xff0c;数字城市已经成为了未来城市发展的关键趋势。数字城市是指利用先进的信息技术、互联网和大数据等工具&#xff0c;将城市各个方面进行数字化、智能化、互联化的发展模式。它不仅仅是一种技术&#xff0c;更是一种对城市管理、发展和居民生活方式…

基于Springcloud微服务框架 +VUE框架开发的智慧工地系统源码

建筑行业快速发展&#xff0c;各建筑工程的建设规模在不断扩大&#xff0c;各岗位工作人员的工作内容所涉及的方面也越来越广泛。随着信息技术水平不断提高,人工记录的方式已经不能够满足大项目的管理要求&#xff0c;就此&#xff0c;创造出一种新型的施工管理技术——智慧工地…

题①拷贝构造相关笔试题

问&#xff1a;此代码中有几次构造&#xff0c;几次拷贝构造&#xff1f; W f&#xff08;W u&#xff09; {W v(u);W w v;return w; } int main() {w x;w y f(x);return 0;解析&#xff1a;一次构造&#xff0c;四次拷贝构造。 再来一题 W f&#xff08;W u&#xff09;…

《VulnHub》Empire:Breakout

VulnHub 1&#xff1a;靶场信息2&#xff1a;打靶2.1&#xff1a;情报收集&威胁建模2.2&#xff1a;漏洞分析&渗透攻击 3&#xff1a;总结3.1&#xff1a;命令&工具3.1.1&#xff1a;Nmap 3.2&#xff1a;关键技术 VulnHub 打靶记录。官网&#xff1a;https://www.…

F#奇妙游(28):ADT中简单值的F#实现

简单值的ADT 在领域建模中&#xff0c;我们尝尝会遇到一些简单的值&#xff0c;比如人的名字、人的编号、物品的代码。如果过早进行程序设计&#xff0c;这些值很容易就会变成程序设计语言中的基本量&#xff0c;string、int这些&#xff0c;就比如人的标号和物品的编号&#…

第十五课 状语从句

文章目录 前言一、时间状语从句时间状语从句&#xff0c;主语谓语宾语 或者 主语谓语宾语时间状语从句时间状语从句&#xff0c;主语系动词表语 或者 主语系动词表语时间状语从句1、when,while,as 引导的时间状语从句when主语谓语&#xff08;宾语&#xff09;状语when主语系动…

混合查询多家快递,快速掌握物流信息

在现代社会&#xff0c;快递服务已成为我们日常生活的重要组成部分。无论是购物还是文件传递&#xff0c;我们都需要快递服务的帮助。然而&#xff0c;不同的快递公司需要不同的查询方法&#xff0c;这无疑增加了我们的查询难度。因此&#xff0c;有没有一种方法可以让我们一次…