Opencv学习项目2——pytesseract

上一次我们使用pytesseract.image_to_boxes来检测字符,今天我们使用pytesseract.image_to_data来检测文本并显示

实战教程

和上一次一样,添加opencv-python和pytesseract库

首先我们先来了解一下pytesseract.image_to_data

pytesseract.image_to_data(img) 是一个 pytesseract 库提供的函数,用于检测图像中的文本,并返回详细的文本框、文本内容及其位置信息。这个函数会返回一个包含每个检测到的文本块信息的字典列表。

每个字典包含以下信息:

  • level: 检测级别(如字块、段落等)
  • page_num: 页码
  • block_num: 块编号
  • par_num: 段落编号
  • line_num: 行号
  • word_num: 单词编号
  • left: 文本框左边缘的 x 坐标
  • top: 文本框顶部的 y 坐标
  • width: 文本框的宽度
  • height: 文本框的高度
  • conf: 文本识别的置信度
  • text: 检测到的文本内容

接一下我们使用代码打印一下pytesseract.image_to_data

import cv2
import pytesseractpytesseract.pytesseract.tesseract_cmd = 'C:\\Program Files\\Tesseract-OCR\\tesseract.exe'# 读取图像
img = cv2.imread('3.jpg')
# 将图像从 BGR 格式转换为 RGB 格式(因为 pytesseract 使用 RGB 格式)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)himg, wimg, _ = img.shape
data = pytesseract.image_to_data(img)
print(data)# 显示带有文本框和识别结果的图像
cv2.imshow( 'result', img)
# 等待按键输入来关闭窗口
cv2.waitKey(0)
# 关闭所有打开的窗口
cv2.destroyAllWindows()

5ce5e94db1fd470cb20e867c6a71bf49.png

运行后我们得到这一串,按我刚才介绍的 pytesseract.image_to_data可知各个数字的含义,大家可以对照着看一下

接下来我们使用for x, b in enumerate(data.splitlines()):来遍历并枚举文本数据中的每一行

for x,b in enumerate(data.splitlines()):if x!=0:b = b.split()print(b)

1133f1b24cae40f1a7de2076891e88c0.png

这样就将坐标和文本分离出来了

'5'  '1'  '1'  '1'  '4'  '1'  '81'  '436'  '535'  '77'  '96.205406'  'EVERYONE.'

从左往右为层级页码、块编号、段落编号、 行号、单词编号、文本框左边缘的 x 坐标、文本框顶部的 y 坐标、文本框的宽度、文本框的高度、文本识别的置信度、检测到的文本内容

接下来我们采用cv2的画矩形来画框,在这里我又发现 pytesseract.image_to_data 的原点和opencv的原点又是同一个原点了,和之前的pytesseract.image_to_boxes不同

f68593846915401b88fd1ad18a619cfb.png这样我们就可以写出代码

import cv2
import pytesseractpytesseract.pytesseract.tesseract_cmd = 'C:\\Program Files\\Tesseract-OCR\\tesseract.exe'# 读取图像
img = cv2.imread('3.jpg')
# 将图像从 BGR 格式转换为 RGB 格式(因为 pytesseract 使用 RGB 格式)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)himg, wimg, _ = img.shape
data = pytesseract.image_to_data(img)
print(data)
for x,b in enumerate(data.splitlines()):if x!=0:b = b.split()print(b)if (len(b)==12):x,y,w,h = int(b[6]),int(b[7]),int(b[8]),int(b[9])cv2.rectangle(img,(x,y),(w+x,h+y),(0,0,255),3)cv2.putText(img,b[11],(x+20,y-5),cv2.FONT_HERSHEY_COMPLEX,1,(50,50,255),2)# 显示带有文本框和识别结果的图像
cv2.imshow( 'result', img)
# 等待按键输入来关闭窗口
cv2.waitKey(0)
# 关闭所有打开的窗口
cv2.destroyAllWindows()

 这里我们使用判断每一行是否有12个数据来筛选出我们需要的文本那一行

这样就完成了,我们看一下效果

f3304ead819947798cd44d5d6876b848.png

我们发现文本被正确框出和显示出来 。

有兴趣的可以关注一下,近期一直更新,谢谢

 

 

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

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

相关文章

红队内网攻防渗透:内网渗透之内网对抗:横向移动篇入口切换SMB共享WMI管道DCOM组件Impacket套件CS插件

红队内网攻防渗透 1. 内网横向移动1.1 WMI进行横向移动1.1.1 利用条件:1.1.1 利用详情1.1.1.1 wmic1.1.1.1.1 正向shell上线1.1.1.1.2 反向shell上线1.1.1.2 cscript(不建议使用)1.1.1.3 wmiexec-impacket1.1.1.4 cs插件1.2 SMB横向移动1.2.1 利用条件:1.2.2 利用详情1.2.2…

基于YOLOv5的火灾检测系统的设计与实现(PyQT页面+YOLOv5模型+数据集)

基于YOLOv5的火灾检测系统的设计与实现 概述系统架构主要组件代码结构功能描述YOLOv5检测器视频处理器主窗口详细代码说明YOLOv5检测器类视频处理类主窗口类使用说明环境配置运行程序操作步骤检测示例图像检测视频检测实时检测数据集介绍数据集获取数据集规模YOLOv5模型介绍YOL…

对日期的处理

对日期的处理 对编码进行统一,在脚本最开始: # -*- coding: utf-8 -*-这里涉及到两个操作,一个是将数据进行标准化,比如有些日期是2024/05/06这并不符合日期的标准格式,需要转换成这样的2024-05-06 def tran_std(st…

java基于ssm+jsp 社区疫情防控管理信息系统

1前台首页功能模块 社区疫情防控管理信息系统,在社区疫情防控管理信息系统可以查看首页、物品信息、论坛信息、新闻资讯、我的、跳转到后台等内容,如图1所示。 图1系统首页界面图 用户登录、用户注册,通过注册填写账号、密码、姓名、身份证、…

【linuxC语言】第一个简单的TCP/IP服务器

文章目录 前言一、服务器开发结构图二、深度解析服务器三、服务器开发相关函数htonl函数bind函数listen函数accept函数INADDR_ANY 宏struct sockaddr_in的不同场景区别tcp/ip服务器示例代码总结前言 在计算机网络中,TCP/IP 是一种非常重要的通信协议。它是互联网的基础,也是…

正则表达式,linux文本三剑客

正则表达式匹配的是文本内容,linux的文本三剑客都是针对文本内容,按行进行匹配 文本三剑客: grep 过滤文本内容 sed 针对文本内容进行增删改查 awd 按行取列 一.grep命令 作用就是使用正则表达式来匹配文本内容 -m 数字:匹配…

在linux系统中使用docker、mysql实例

systemctl 是一个命令行工具,用于控制和管理基于 systemd 的 Linux 发行版中的系统和服务。 启动服务 :使用 systemctl start [service-name] 开始一个服务。 如启动docker:systemctl start docker 停止服务 :使用 systemctl st…

直播预约丨《袋鼠云大数据实操指南》No.3:数据资产管理实操,如何有效进行数据治理

近年来,新质生产力、数据要素及数据资产入表等新兴概念犹如一股强劲的浪潮,持续冲击并革新着企业数字化转型的观念视野,昭示着一个以数据为核心驱动力的新时代正稳步启幕。 面对这些引领经济转型的新兴概念,为了更好地服务于客户…

[Shell编程学习路线]——While循环应用技巧 (详细讲解)

🏡作者主页:点击! 🛠️Shell编程专栏:点击! ⏰️创作时间:2024年6月20日16点30分 🀄️文章质量:95分 目录 ————前言———— 基本结构 图示原理 示例 测试 …

链动2+1模式:解锁用户留存与复购的增长密码

大家好,我是吴军,来自一家业界领先的软件开发公司,专注于为用户打造卓越的产品体验。今天,我想与大家探讨一个在我们产品运营中取得显著成效的策略——链动21模式,以及它是如何助力我们提升用户留存和复购率的。 尽管链…

【异常错误】ValueError: rdkit.Chem.rdchem.BondType.DATIVE is not in list

在处理MoleculeNet_datasets的HIV数据集的时候出现了下面的错误&#xff1a; 35275 35276 35277 35278 Traceback (most recent call last): File "data/MoleculeNet_datasets/splitters.py", line 283, in <module> dataset MoleculeDataset(f{data_path}, d…

(新)Spring Security如何实现跨域

浏览器出于安全的考虑&#xff0c;使用 XMLHttpRequest对象发起 HTTP请求时必须遵守同源策略&#xff0c;否则就是跨域的HTTP请求。 默认情况下是被禁止的。 同源策略要求源相同才能正常进行通信&#xff0c;即协议、域名、端口号都完全一致。 前后端分离项目&#xff0c;前端…

Android13 WMS窗口层级树

1&#xff0c;认识层级树 可以通过dumpsys activity containers 看到 WMS 层级树的结构 ACTIVITY MANAGER CONTAINERS (dumpsys activity containers) ROOT typeundefined modefullscreen override-modeundefined requested-bounds[0,0][0,0] bounds[0,0][1440,2960]#0 Displa…

中国能源统计年鉴(1986-2023年)

数据年份&#xff1a;1986-2023年&#xff0c;无1987、1988、1990三年&#xff0c;1991-2023年齐 数据格式&#xff1a;pdf、excel 数据内容&#xff1a;《中国能源统计年鉴》是一部反映中国能源建设、生产、消费、供需平衡的权威性资料书。 共分为7个篇章&#xff1a;1.综合&a…

论文学习_多平台二进制代码分类与相似性检测技术研究

0. 摘要 研究背景:二进制代码分类与相似性检测是恶意代码家族分析、软件代码溯源的基础,对保障网络空间安全具有重要作用。 现存问题:在多种平台下,二进制代码包括 PE、ELF、DEX 等形态的文件格式,并设计 X86、ARM、MIPS、PPC 等指令架构。而在同一平台下,同一份软件代…

excel按模板文件导出多个文件并压缩为ZIP格式返回前端

思路&#xff1a;先准备好模板文件和与之对应的实体类&#xff0c;数据库数据等&#xff0c;还是之前思路&#xff0c;根据查出的数据&#xff0c;填充模板文件&#xff0c;生成一个临时文件&#xff0c;最后将这些个临时文件打包为zip返回前端&#xff0c;并将多个临时文件删除…

51-52Windows密码安全性测试与Windows提权

目录 Windows密码安全性测试 一、本地管理员密码如何直接提取 1、直接通过mimikatz读取管理员密码 2、使用laZagne工具读取管理员密码 二、利用Hash远程登录系统 window提权 三、远程webshell执行命令解决 不能执行原因&#xff1a; 解决方法&#xff1a;单独上传cmd.e…

计算机专业如何自学?经验交流分享

想自学计算机的小伙伴一定要学会自己找信息&#xff0c;然后制定自己的学习计划去好好执行下去&#xff0c;要不然永远都是停留在想的阶段&#xff0c;找了一大堆资料&#xff0c;却永远不真正开始学习&#xff0c;这样的话&#xff0c;估计给你再多的时间也没法入门&#xff0…

MPI 介绍MPI 全名叫 Message Passing Interface,

一、MPI 介绍 MPI 全名叫 Message Passing Interface&#xff0c;即信息传递接口&#xff0c;作用是可以通过 MPI 可以在不同进程间传递消息&#xff0c;从而可以并行地处理任务&#xff0c;即进行并行计算。需要注意的是&#xff0c;尽管我们偶尔会说使用 MPI 编写了某某可执…

linux系统cpu飙高如何排查

1.通过top命令查看cpu占比较高的进程ID 2.通过top -H -p <进程ID>命令查看该进程中具体线程&#xff0c;可以看到第一个线程 4311 占用了88.2%的cpu 3.通过 printf "%x\n" <线程ID> 把10进制的线程id转为16进制 4.通过jstack <进程ID> | grep &…