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  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])
    # 绘制矩形框(注意 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了,感兴趣的可以点个关注,最近会一直更新,谢谢

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

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

相关文章

探究 IP 地址被网站封禁的原因

在我们登录各种网站、APP浏览时,可能会遇到 IP 地址被某些网站封禁的情况。很多人奇怪这是为什么呢? 首先,违反网站的使用规则是比较常见的原因之一。比如,频繁发送垃圾邮件、恶意评论、进行网络攻击或试图破解网站的安全机制等不…

关于Windows系统下redis的闪退问题。

一、问题分析 首先,有这个问题的一般是如下操作: 1、在运行项目时发现无法连接到redis服务器, 2、进入Redis安装目录(如图)——>鼠标双击打开redis-server.exe,然后闪退, 3、运行redis-cli时提示:“由…

kafka学习笔记07

Kafka高可用集群搭建节点需求规划 开放端口。 Kafka高可用集群之zookeeper集群搭建环境准备 删除之前的kafka和zookeeper。 重新进行环境部署: 我们解压我们的zookeeper: 编辑第一个zookeeper的配置文件: 我们重复类似的操作,创建三个zookeeper节点: 记…

Android Glide, first start based on loadThumbnail, Kotlin(二)

Android Glide, first start based on loadThumbnail, Kotlin(二) Android Glide, first start based on loadThumbnail, Kotlin(一)中有个小问题,通过loadThumbnail()采集到的缩略图真的就是整张图片的完整缩略图&…

PTP简介及Linux phy ptp驱动实现

1、PTP简介 PTP(precision time protocol)精确时间协议,是一种时间同步的协议,对应 IEEE 1588 标准,是基于网络数据包的一种时间同步协议,1588v2的同步精度可以达到ns级,但1588协议对硬件有依赖。 2、PTP原理 时间同…

Part 6.2.3 欧拉函数

欧拉函数φ(x) 表示了小于x的数字中&#xff0c;与x互质的数字个数。 关于欧拉函数的基本知识>欧拉函数的求解< [SDOI2008] 仪仗队 题目描述 作为体育委员&#xff0c;C 君负责这次运动会仪仗队的训练。仪仗队是由学生组成的 N N N \times N NN 的方阵&#xff0c;…

使用Docker在Mac上部署OnlyOffice,预览编辑word、excel、ppt非常好

前端编辑word、ppt文档&#xff0c;开源免费方案并没有找到合适的&#xff0c;像wps、石墨文档都是自研的方案。实现过程中wps采用的svg方案&#xff0c;而石墨文档采用的是canvas&#xff0c;它们均是自己来实现编辑器&#xff0c;不依赖浏览器提供的编辑器&#xff08;conten…

如何用python调用C++处理图片

一. 背景 用pyhton可直接调用C&#xff0c;减少重写的工作量&#xff1b;部分逻辑运算&#xff0c;C的执行效率高&#xff0c;可进行加速。 下面就一个简单的C滤镜&#xff08;彩色图转灰度图&#xff09;为例&#xff0c;展示python调用C 二. 代码实现 代码结构如下&#x…

Windows桌面运维----第四天

1、U盘故障打不开&#xff1a; 操作方式&#xff1a;WinR打开运行&#xff0c;输入cmd确定&#xff0c;在&#xff08;C:\Users\Administrator>&#xff09;后输入chkdsk,空格&#xff0c;输入U盘盘符&#xff0c;例如F:/F&#xff0c;回车&#xff0c;等待修复完成。 2、…

韩国裸机云站群服务器托管租用方案

随着网络技术的飞速发展&#xff0c;站群服务器在网站运营中扮演着越来越重要的角色。韩国裸机云站群服务器&#xff0c;以其独特的优势&#xff0c;如地理位置优越、价格相对较低、技术实力雄厚等&#xff0c;吸引了众多企业的关注。本文将为您详细介绍韩国裸机云站群服务器的…

【TB作品】MSP430G2553,单片机,口袋板, 现场数据采集装置设计

题2 现场数据采集装置设计 便携式数据采集装置将在现场采集到的数据装入装置的内部数存贮器&#xff0c;以待送实验室或试验中心的计算机进行分析处理&#xff0c;由于现场不一定有交流电供电&#xff0c;而且采集到的数据必须保存到送实验室&#xff0c;因此装置必须以电池或蓄…

红米手机RedNot11无法使用谷歌框架,打开游戏闪退的问题,红米手机如何开启谷歌框架

红米手机RedNot11无法使用谷歌框架&#xff0c;打开游戏闪退的问题&#xff0c; 1.问题描述2.问题原因3.解决方案3.1配置谷歌框架&#xff1a;3.1软件优化 4.附图 1.问题描述 红米手机打开安卓APP没有广告&#xff0c;直接闪退&#xff0c;无法使用谷歌框架 异常关键词中包含&…

NavicatforMySQL11.0软件下载-NavicatMySQL11最新版下载附件详细安装步骤

我们必须承认Navicat for MySQL 支援 Unicode&#xff0c;以及本地或远程 MySQL 服务器多连线&#xff0c;使用者可浏览数据库、建立和删除数据库、编辑数据、建立或执行 SQL queries、管理使用者权限&#xff08;安全设定&#xff09;、将数据库备份/复原、汇入/汇出数据&…

SAS副总裁Jason Mann:物联网如何让世界变得更美好

TechForge最近采访了数据和人工智能领导者 SAS的物联网副总裁 Jason Mann &#xff0c;他解释了公司如何有效利用物联网&#xff0c;以及该技术如何改善全球的可持续性。 您认为今年物联网领域的最新发展趋势是什么&#xff1f; 一个主要趋势是GenAI的不断涌现&#xff0c;这进…

计算机网络:运输层 - TCP 流量控制 拥塞控制

计算机网络&#xff1a;运输层 - TCP 流量控制 & 拥塞控制 滑动窗口流量控制拥塞控制慢开始算法拥塞避免算法快重传算法快恢复算法 滑动窗口 如图所示&#xff1a; 在TCP首部中有一个窗口字段&#xff0c;该字段就基于滑动窗口来辅助流量控制和拥塞控制。所以我们先讲解滑…

Spark Core内核调度机制详解(第5天)

系列文章目录 如何构建DAG执行流程图 (掌握)如何划分Stage阶段 (掌握)Driver底层是如何运转 (掌握)确定需要构建多少分区(线程) (掌握) 文章目录 系列文章目录引言一、Spark内核调度&#xff08;掌握&#xff09;1.1、内容概述1.2、RDD的依赖1.3、DAG和Stage1.4、Spark Shuffl…

Flink 1.19.1 standalone 集群模式部署及配置

flink 1.19起 conf/flink-conf.yaml 更改为新的 conf/config.yaml standalone集群: dev001、dev002、dev003 config.yaml: jobmanager address 统一使用 dev001&#xff0c;bind-port 统一改成 0.0.0.0&#xff0c;taskmanager address 分别更改为dev所在host dev001 config.…

M1失效后,哪个是观察A股的关键新指标?

M1失效后&#xff0c;哪个是观察A股的关键新指标&#xff1f; 央地支出增速差&#xff08;地方-中央支出增速的差值&#xff09;或许是解释沪深300定价更有效的前瞻指标。该数值扩张&#xff0c;则有利于大盘指数&#xff0c;反之亦然&#xff0c;该指标从2017年至今对大盘指数…

网络程序通信的流程---socket与TCP的简单认识

网络程序通信的流程 网络程序通信的流程&#xff1a; 1.通过ip地址找到网络中的设备 2.通过端口号找到对应进程的端口 3.传输数据时还需要使用传输协议&#xff08;TCP&#xff09;&#xff0c;保证数据的可靠性 4.socket完成进程之间网络数据的传输 ip地址的介绍 IP地址…

在小程序wxml中截取字符串

在微信小程序的WXML中直接进行字符串截取是不被支持的&#xff0c;因为WXML主要负责布局和渲染&#xff0c;不包含数据处理逻辑。 但你可以通过使用微信小程序提供的wxs&#xff08;WeiXin Script&#xff09;来实现字符串的截取。 wxs是一种运行在客户端的脚本语言&#xff…