Opencv学习项目1——pytesseract

最近开始学习opencv使用,跟着b站一起做实战项目,跟大家分享一下学习成果,大佬勿喷

项目演示

pytesseract 是一个用于文字识别(OCR,光学字符识别)的 Python 库,它是 Tesseract OCR 引擎的 Python 封装。

  1. 功能

    • 文字识别:pytesseract 可以将图像中的文字转换为文本。它支持多种语言和文字的识别。
    • 多平台支持:适用于 Windows、macOS 和 Linux 操作系统。
    • 简单易用:提供简单的 API,方便在 Python 中集成和使用。
  2. 基于Tesseract OCR

    • Tesseract 是一个开源的OCR引擎,由 Google 开发和维护。它支持多种文件格式和语言,能够进行精确的文字识别。
    • pytesseract 则为 Python 提供了便捷的接口,使开发者能够利用 Tesseract 的强大功能进行文字识别。
  3. 安装与配置

    • 安装:通常使用 pip install pytesseract 命令来安装。
    • 配置:pytesseract 需要 Tesseract OCR 引擎的支持,因此在使用前需要先安装 Tesseract,并将其路径配置到 pytesseract 中,以便程序能够找到并调用 Tesseract。
  4. 使用方法

    • 简单的文字识别:使用 pytesseract.image_to_string() 方法进行基本的图像文字识别。
    • 详细控制:通过 pytesseract.image_to_boxes()pytesseract.image_to_data() 等方法可以获取更详细的识别结果,如字符的位置、置信度等信息。
  5. 适用场景:

    • 文档数字化:将扫描的文档转换为可编辑的文本。
    • 图像处理:处理包含文本的图像,提取关键信息。
    • 自动化任务:在自动化流程中,从图像中提取所需的文字信息。

总体来说,pytesseract 是一个强大且广泛使用的 Python 库,为开发者提供了便捷的方式来实现图像中的文字识别功能。

实战教程

首先我们在Pycharm中新建一个项目,然后添加pytesseract库和opencv-python库

import  cv2
import  pytesseract# 设置 pytesseract 使用的 Tesseract OCR 引擎路径
pytesseract.pytesseract.tesseract_cmd='C:\\Program Files\\Tesseract-OCR\\tesseract.exe'
img = cv2.imread('2.png')
# 将图像从 BGR 格式转换为 RGB 格式(pytesseract 要求输入为 RGB 格式)
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
cv2.imshow('result',img)# 显示处理后的图像窗口,窗口名为 'result'
cv2.waitKey(0)# 等待用户按下任意键后关闭窗口(参数为0表示无限等待)

写下这段代码后运行即可读取2.png并显示为‘result’

接下来我们要给这些字母画上框框,首先需要得到这些字母的坐标

因此我们使用pytesseract.image_to_boxes(img)来获取字母的坐标

Z 728 8 832 110 0
从左到右依次为:字符;左下角的横坐标;左下角的纵坐标;右上角的横坐标;右上角的纵坐标;OCR 引擎对该字符识别的置信度。

 获取到坐标后,我们将使用for b in boxes.splitlines():对每一个边界框信息进行遍历,使用b = b.split(' ')将每行的信息分割成单独的元素。

使用x, y, w, h = int(b[1]), int(b[2]), int(b[3]), int(b[4]) 提取边界框的坐标信息。x为左下角的横坐标;y为左下角的纵坐标;w为右上角的横坐标;h为右上角的纵坐标

接下来就可以使用cv2.rectangle来进行画矩形了

cv2.rectangle(img,(x,himg-h),(w,himg-y),(0,0,255),3)

cv2.rectangle(img, pt1, pt2, color, thickness, lineType, shift) 

  1. img: 这是要绘制矩形的图像对象,通常是一个 NumPy 数组。

  2. pt1: 这是矩形的顶点之一,用元组 (x1, y1) 表示,其中 (x1, y1) 是矩形左上角的坐标。

  3. pt2: 这是矩形的对角线顶点,用元组 (x2, y2) 表示,其中 (x2, y2) 是矩形右下角的坐标。

  4. color: 这是矩形的颜色。它可以是一个表示颜色的元组,如 (B, G, R),其中 BGR 分别是蓝色、绿色和红色的强度。例如,红色可以用 (0, 0, 255) 表示。如果你在灰度图像上工作,可以直接传入一个灰度值。

  5. thickness: 这是矩形边框的粗细(以像素为单位)。如果设置为负值(例如 cv2.FILLED),则函数会填充矩形内部。

  6. lineType: 这是可选参数,用于指定线条类型。默认情况下,它是 cv2.LINE_8,表示8连通线条。你也可以使用 cv2.LINE_AA 来获取抗锯齿线条。

  7. shift: 这是可选参数,指定坐标点的小数位数。通常情况下,不需要设置,使用默认值即可。

在这里我发现pytesseract库的原点坐标是在左下角,而opencv库的原点是在左上角,因此我画了一个示例图,以便大家理解

这时我们的代码是这样的

import  cv2
import  pytesseractpytesseract.pytesseract.tesseract_cmd='C:\\Program Files\\Tesseract-OCR\\tesseract.exe'
img = cv2.imread('2.png')
# 将图像从 BGR 格式转换为 RGB 格式(pytesseract 要求输入为 RGB 格式)
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
himg, wimg, _ = img.shape# 获取图像的高度和宽度
# 使用 pytesseract 进行图像文本检测,并返回每个检测框的坐标信息
boxes = pytesseract.image_to_boxes(img)
# 遍历每个检测框
for b in boxes.splitlines():b = b.split(' ') #将每行的信息分割成单独的元素print(b)x,y,w,h = int(b[1]),int(b[2]),int(b[3]),int(b[4])# 绘制矩形框(注意 OpenCV 的坐标系统以左上角为原点)cv2.rectangle(img,(x,himg-h),(w,himg-y),(0,0,255),3)
cv2.imshow('result',img)
cv2.waitKey(0)

运行后得到这个图像,可以看出来我们的每一个字母都被完整的框出来了,接下来我们使用cv2.putText()将他的内容显示在字母旁边

cv2.putText(img, text, org, fontFace, fontScale, color, thickness, lineType, bottomLeftOrigin)

  1. img:需要绘制文本的图像,必须是一个 numpy 数组。

  2. text:要绘制的文本内容,通常是一个字符串。

  3. org:文本的起始坐标,即文本左下角的位置,以 (x, y) 形式表示,其中 (0, 0) 是图像的左上角。

  4. fontFace:字体类型/字体族,例如 cv2.FONT_HERSHEY_SIMPLEXcv2.FONT_HERSHEY_PLAIN 等。这些字体类型可以通过 cv2.putText() 函数来调用。

  5. fontScale:字体大小因子,指定字体大小相对于字体的基础大小的比例。

  6. color:文本颜色,通常是一个元组 (B, G, R),每个颜色通道的取值范围是 0 到 255。

  7. thickness:文本线条的粗细,默认值为 1。如果设置为大于 1 的整数,则会增加文本的粗细。

  8. lineType:文本线条的类型,默认值是 cv2.LINE_8,表示 8 连通线条。可以选择 cv2.LINE_AA 来获得抗锯齿线条。

  9. bottomLeftOrigin:可选参数,默认为 False。如果设置为 True,则文本的起始点是左下角。通常为 False,表示文本的起始点是左上角。

 在这里我们附上完整代码

import cv2
import pytesseract# 设置 pytesseract 的路径(根据你的安装路径修改)
pytesseract.pytesseract.tesseract_cmd = 'C:\\Program Files\\Tesseract-OCR\\tesseract.exe'# 读取图像
img = cv2.imread('2.png')# 将图像从 BGR 格式转换为 RGB 格式(因为 pytesseract 使用 RGB 格式)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)# 获取图像的高度和宽度
himg, wimg, _ = img.shape# 使用 pytesseract 库识别图像中的文本,并返回文本框的信息
boxes = pytesseract.image_to_boxes(img)# 遍历每个文本框的信息
for b in boxes.splitlines():b = b.split(' ')  # 将每行文本框信息分割成列表print(b)  # 打印每个文本框的信息# 提取文本框的坐标信息(左下角和右上角)x, y, w, h = int(b[1]), int(b[2]), int(b[3]), int(b[4])# 在图像上绘制矩形框cv2.rectangle(img, (x, himg - h), (w, himg - y), (0, 0, 255), 3)# 在矩形框上方显示文本内容cv2.putText(img, b[0], (x - 20, himg - y), cv2.FONT_HERSHEY_COMPLEX, 1, (100, 100, 255))# 显示带有文本框和识别结果的图像
cv2.imshow('result', img)# 等待按键输入来关闭窗口
cv2.waitKey(0)# 关闭所有打开的窗口
cv2.destroyAllWindows()

 最后再看一下我们的项目结果展示

项目结果

这样就OK了,感兴趣的可以点个关注,最近会一直更新,谢谢

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

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

相关文章

ARM服务器虚拟化手机,云手机推流应用案例

大家都知道,ARM 服务器虚拟化手机和云手机推流技术可算是热门话题,不止是企业,个人卖家也会通过云手机推流来获得更多的客源,实现经济自由,但是针对云手机的推流,很多人还是不知道有哪些应用场景~我们可以展…

一文详解分布式 ID

分布式系统中,我们经常需要对数据、消息等进行唯一标识,这个唯一标识就是分布式 ID,那么我们如何设计它呢?本文将详细讲述分布式 ID 及其生成方案。 一、为什么需要分布式 ID 目前大部分的系统都已是分布式系统,所以在…

Python的三种方式显示图片

from PIL import Image import numpy as np im Image.open("img.png") #方法一:使用PIL库显示图片 a np.array(im) imImage.fromarray(a) im.show() import matplotlib.pyplot as plt #方法二:使用matplotlib库显示图片 plt.imshow(a) plt.s…

人工智能中的监督学习和无监督学习

欢迎来到 Papicatch的博客 目录 🍉引言 🍉监督学习 🍈基本思想 🍈具体过程 🍍数据收集 🍍数据预处理 🍍模型选择 🍍模型训练 🍍模型评估 🍍模型部署…

示例:WPF中绑定枚举到ComboBox想显示成中文或自定义名称如何实现

一、目的:在开发过程中绑定的枚举不想显示成英文字段怎么办,这里通过TypeConverter的方式来实现绑定的枚举从定义的特性中读取 二、实现 首先定义如下枚举 [TypeConverter(typeof(DisplayEnumConverter))]public enum MyEnum{[Display(Name "无&q…

Flink 资源静态调度

本内容是根据 Flink 1.18.0-Scala_2.12 版本源码梳理而来。本文主要讲述任务提交时,为 Task 分配资源的过程。 以下是具体步骤讲解: TaskManager 资源注册 TaskManager 在启动时,会向 ResourceManager 注册资源。ResourceManager 会将 Tas…

斯坦福CS229机器学习中文速查笔记.pdf

斯坦福CS229是一门经典的机器学习课程,算是机器学习领域的明星课,相信不少人在B站上看过这门课的视频。 这门课主要介绍了机器学习和统计模式识别。内容包括:监督学习(生成/鉴别学习,参数/非参数学习,神经…

JavaSE 面向对象程序设计高级 方法引用 2024详解

在编程中,方法引用(Method Reference)是一种技术,它让你能够直接引用一个现有的函数或方法,而无需通过对象实例来调用。这种方法在函数式编程和高阶函数中非常有用,因为它提供了简洁的方式来传递函数行为&a…

业务谈判的过程中多让客户做选择

之前还在工厂的时候,开分享会,经理会反复强调的一个跟进思路就是一定要学会让客户跟着我们的节奏走,而不是被客户牵着鼻子走。 前者会让客户顺着我们设计好的谈判路径,把客户引导到我们想要的结果上,业务员是主动角色…

模版与策略模式

一,怎么选择 如果需要固定的执行流程,选模版 如果不需要固定的执行流程,只需要对一个方法做具体抽象,选策略 参考文章: 常用设计模式汇总,告诉你如何学习设计模式 二,常用写法 子类 exten…

穿越时空的家书——黑夫与惊的不朽传奇

1975年,湖北云梦县睡虎地的一次考古发掘,揭开了一段尘封的历史,两枚刻有527个字的木牍,成为了我国最早的家书实物。这两枚木牍,记录了战国时期秦国士兵黑夫和惊的家书。 两件木犊出土时被放置在墓地陪葬器物箱子里的中…

Nuxt3 实战 (十):使用 Supabase 实现 RESTful 风格 API 接口

前言 本篇文章我们来使用 Supabase 实现 RESTful 风格的 API 接口,以此来实现网站分类和子站点的 CURD 功能。 表设计 这里需要用到两张表: ds_categorys:存储网站分类 列名类型备注iduuid主键,分类 idnametext分类名称desct…

python 魔术方法备忘录

python 魔术方法备忘录 网上收集了一些,列出了比较常用的,特别是第一张。 Python中的魔术方法(Magic Methods),也被称为特殊方法(Special Methods)或双下划线方法(Dunder Methods&a…

渗透测试之存储型跨站脚本攻击(高危)

一、定义 跨站脚本攻击&#xff0c;指的是恶意用户往web页面里插入恶意HTML代码。当普通用户访问该web页面&#xff0c;嵌入其中的HTML代码会被执行&#xff0c;从而达到破坏的效果。 二、风险定级 高危 三、可输入的HTML标签示例 图片标签 <img src"#"> 超…

有监督学习——决策树、集成学习

1. 决策树 熵 在热力学中&#xff0c;熵&#xff08;entropy&#xff09;被用来衡量系统的不稳定程度。香农在论文《通信的数学原理》中提出信息熵的概念&#xff0c;目的是_量化数字信息的价值_。 信息熵的定义 香农提出的量化信息方式&#xff1a; \[H(P_1,P_2,\cdots P…

吴恩达机器学习作业ex3:多类分类和前馈神经网络(Python实现)详细注释

文章目录 1 多类分类1.1数据集1.2 数据可视化1.3 向量化逻辑回归1.3.1 向量化代价函数1.3.2 矢量化梯度下降以及正则化表达1.4 一对多分类 2.神经网络2.1模型表示 总结&#xff08;自己训练求解参数全流程&#xff09; 1 多类分类 在本练习中&#xff0c;您将使用逻辑回归和神…

Redis学习|Jedis、SpringBoot整合Redis

Jedis 我们要使用Java 来操作 Redis,知其然并知其所以然&#xff0c;授人以渔!学习不能急躁&#xff0c;慢慢来会很快!什么是Jedis 是 Redis 官方推荐的java连接开发工具!使用java 操作Redis 中间件!如果你要使用 java操作redis&#xff0c;那么一定要对Jedis 十分的熟悉! 1、…

MySQL之复制(五)

复制 复制的原理 复制文件 3.master.info 这个文件用于保存备库连接到主库所需要的信息&#xff0c;格式为纯文本(每行一个值)&#xff0c;不同的MySQL版本&#xff0c;其记录的信息也可能不同。此文件不能删除&#xff0c;否则备库在重启后无法连接到主库。这个文件以文本的…

电脑ffmpeg.dll丢失原因解析,找不到ffmpeg.dll的5种解决方法

在数字化时代&#xff0c;多媒体文件的处理已经成为我们日常生活和工作中不可或缺的一部分。在计算机使用过程中&#xff0c;丢失ffmpeg.dll文件是一个特定但常见的问题&#xff0c;尤其是对于那些经常处理视频编解码任务的用户来说。下面小编讲全面分析ffmpeg.dll丢失原因以及…

Python数据分析与建模库之从入门到四大库(Numpy、Pandas、Matplotl、Seaborn )教学课程下载

第一阶段课程-Python快速入门&#xff1a; 含&#xff1a;1.系列课程环境配置&#xff1b;2.Python快速入门&#xff1b;3.变量类型&#xff1b;4.LIST基础&#xff1b;5.List索引&#xff1b;6.循环结构&#xff1b;7.判断结构&#xff1b;8.字典&#xff1b;9.文件处理&#…