Tesseract用OpenCV进行文本检测

news2024/11/24 9:10:37

我没有混日子,只是辛苦的时候没人看到罢了

一、什么是Tesseract

  • Tesseract是一个开源的OCR(Optical Character Recognition)引擎,OCR是一种技术,它可以识别和解析图像中的文本内容,使计算机能够理解并处理这些文本。
  • Tesseract提供了丰富的配置选项和接口,使得开发者可以根据自己的需求和场景进行定制化和集成。
  • 通过使用Tesseract,你可以将一张包含文字的图像(如扫描文档、照片或截屏)输入到引擎中,然后Tesseract会通过一系列的图像处理和模式识别技术来提取出图像中的文本信息。它将识别出的文本转换为可以被计算机编辑和搜索的文本内容。

简单来说,Tesseract是一个强大的OCR引擎,适用于将图像中的文字提取出来,并将其转换为计算机可处理的文本形式。它在许多领域和应用中被广泛使用,如扫描和数字化文档、自动化数据输入、图书馆和档案管理等。

传送门

二、创建开发环境

使用conda创建一个名字为openCV的开发环境

conda create -n openCV

 引入openCV包

pip install opencv-python

 引入pytesseract包

三、代码实战

检测图片中的字符串并打印

先准备一张如下格式的图片

编写代码解析

testDectection.py

import cv2
import pytesseract

img = cv2.imread('1.png')  # 使用opencv将图片读进来
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # 将图片的颜色通道格式由BGR转化成pytesseract能识别的RGB格式
print(pytesseract.image_to_string(img))  # 调用pytesseract引擎将图片中的内容输出出来
cv2.imshow('result', img)  # 显示
cv2.waitKey(0)

 输出

以上就是通过使用pytesseract简单获取图像原始信息的方法。 

检测图中的字符并用红框标注

代码

import cv2
import pytesseract

img = cv2.imread('1.png')  # 使用opencv将图片读进来
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # 将图片的颜色通道格式由BGR转化成pytesseract能识别的RGB格式

# Detecting Characters
hImg, wImg, _ = img.shape  # 找出图片的宽度和高度
boxes = pytesseract.image_to_boxes(img)  # 使用pytesseract找出图片中字符的坐标位置
for c in boxes.splitlines():
    c = c.split(' ')
    print(c)
    x, y, w, h = int(c[1]), int(c[2]), int(c[3]), int(c[4])
    cv2.rectangle(img, (x, hImg - y), (w, hImg - h), (0, 0, 255), 3)    # 使用opencv画框框,使用红色,厚度为3

cv2.imshow('result', img)  # 显示
cv2.waitKey(0)

输入两张图片

1.png

 2.png

输出

每一个检测出来字符串的坐标

图像中添加识别的文本内容

import cv2
import pytesseract

img = cv2.imread('1.png')  # 使用opencv将图片读进来
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # 将图片的颜色通道格式由BGR转化成pytesseract能识别的RGB格式

# Detecting Characters
hImg, wImg, _ = img.shape  # 找出图片的宽度和高度
boxes = pytesseract.image_to_boxes(img)  # 使用pytesseract找出图片中字符的坐标位置
for c in boxes.splitlines():
    c = c.split(' ')
    print(c)
    x, y, w, h = int(c[1]), int(c[2]), int(c[3]), int(c[4])
    cv2.rectangle(img, (x, hImg - y), (w, hImg - h), (0, 0, 255), 3)  # 使用opencv画框框,使用红色,厚度为3
    cv2.putText(img, c[0], (x, hImg - y + 25), cv2.FONT_HERSHEY_COMPLEX, 1, (50, 50, 255), 2)   # 向图像中添加文本

cv2.imshow('result', img)  # 显示
cv2.waitKey(0)

 关键

cv2.putText(img, c[0], (x, hImg - y + 25), cv2.FONT_HERSHEY_COMPLEX, 1, (50, 50, 255), 2)

这行代码使用OpenCV库中的putText函数向图像中添加文本。

解释如下:

  • img:表示要添加文本的图像。
  • c[0]:表示要添加的文本内容,c[0]可能是一个字符串变量,用于指定要添加的文本。
  • (x, hImg - y + 25):表示文本的起始位置,该位置是一个元组(x, y),其中x表示文本的横坐标,hImg - y + 25表示文本的纵坐标。hImg可能是整个图像的高度,y是用于定位白色文本的轮廓的顶端位置的变量。通过hImg - y + 25可以使文本出现在轮廓下方一些距离的位置。
  • cv2.FONT_HERSHEY_COMPLEX:表示所使用的字体类型,这里使用的是复杂的字体类型。
  • 1:表示文本的字体缩放因子,1表示原始大小。
  • (50, 50, 255):表示文本的颜色,该颜色为一个元组(B, G, R),其中BGR分别表示蓝色、绿色、红色通道的值。在这个例子中,文本颜色是一种深红色。
  • 2:表示文本的线宽,即文本边框的宽度。这里设置为2,使得文本边框较粗。

输出

检测连续的字符串

实际中一般不关注一个字符,更多是关注连起来的字符串

import cv2
import pytesseract

img = cv2.imread('1.png')  # 使用opencv将图片读进来
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # 将图片的颜色通道格式由BGR转化成pytesseract能识别的RGB格式

# Detecting Characters
hImg, wImg, _ = img.shape  # 找出图片的宽度和高度
boxes = pytesseract.image_to_data(img)  # 使用pytesseract找出图片中字符的坐标位置
for x, c in enumerate(boxes.splitlines()):
    if x != 0:
        c = c.split()
        print(c)
        if len(c) == 12:
            x, y, w, h = int(c[6]), int(c[7]), int(c[8]), int(c[9])
            cv2.rectangle(img, (x, y), (x + w, h + y), (0, 0, 255), 3)  # 使用opencv画框框,使用红色,厚度为3
            cv2.putText(img, c[11], (x, y), cv2.FONT_HERSHEY_COMPLEX, 1, (50, 50, 255), 2)  # 向图像中添加文本

cv2.imshow('result', img)  # 显示
cv2.waitKey(0)

 输出

每个字段的含义:

  • level:代表文本在页面中的级别。这里的级别是从1开始的,表示文本的嵌套层级。
  • page_num:代表文本所在的页码。在多页文档中,每一页都有一个唯一的页码。
  • block_num:代表文本所在的文本块的编号。文本块是文档中的一个矩形区域,包含多个段落或行。
  • par_num:代表文本所在的段落的编号。段落是文档中的一个文本段落,通常由一组相关的句子组成。
  • line_num:代表文本所在行的编号。行通常是段落中的一个文本行。
  • word_num:代表文本所在单词的编号。单词是文本的最小单位,通常由一个或多个字符组成。
  • left:代表文本区域的左边界相对于页面的位置。
  • top:代表文本区域的上边界相对于页面的位置。
  • width:代表文本区域的宽度。
  • height:代表文本区域的高度。
  • conf:代表文本的置信度,通常在0到100之间。置信度表示OCR算法对所识别文本的可信程度。
  • text:代表识别出的文本内容。

只识别图片中的数字

import cv2
import pytesseract

img = cv2.imread('1.png')  # 使用opencv将图片读进来
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # 将图片的颜色通道格式由BGR转化成pytesseract能识别的RGB格式

# Detecting Characters
hImg, wImg, _ = img.shape  # 找出图片的宽度和高度
cong = r'--oem 3 --psm 6 outputbase digits'
boxes = pytesseract.image_to_data(img, config=cong)  # 使用pytesseract找出图片中字符的坐标位置
for x, c in enumerate(boxes.splitlines()):
    if x != 0:
        c = c.split()
        print(c)
        if len(c) == 12:
            x, y, w, h = int(c[6]), int(c[7]), int(c[8]), int(c[9])
            cv2.rectangle(img, (x, y), (x + w, h + y), (0, 0, 255), 3)  # 使用opencv画框框,使用红色,厚度为3
            cv2.putText(img, c[11], (x, y), cv2.FONT_HERSHEY_COMPLEX, 1, (50, 50, 255), 2)  # 向图像中添加文本

cv2.imshow('result', img)  # 显示
cv2.waitKey(0)

 重点

cong = r'--oem 3 --psm 6 outputbase digits'
boxes = pytesseract.image_to_data(img, config=cong)

参数解释:

  • oem是一个参数,用于指定OCR引擎的OCR引擎模式(OCR Engine Mode)。OCR引擎模式控制Tesseract在文本识别过程中的行为和算法。
  • psm是一种页分割模式(Page Segmentation Mode),用于指定OCR引擎在识别文本时如何处理页面布局和分割问题。psm参数控制Tesseract在识别文本时如何将图像分割为单个字符、单词、行和文本块。

 

 

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

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

相关文章

Dalsa线阵相机说明(Linea Color GigESeries 2k and 4K)

文章目录 一. Dalsa相机软件整体架构二. 相机编号说明以及软件要求三. 相机硬件参数三. 相机基本参数四. 软件参数设置列表1. Sensor Control Category2. I/O Control Category3. Counter and Timer Control Category4. Advanced Processing Control Category(1) 平场校正介绍(…

蚂蚁聚合支付系统源码完美版+附安装教程

这是我上个月花重金购买的四fang系统源码,现在分享给大家。 源码内附安装教程,20多项功能及安全方面的更新文档,源码说明等,小白也能轻松搭建。 能够轻松应对高并发,等以前版本无法应对的并发问题,也不会被…

JIRA:项目管理的秘密武器

引言 在当今动态且快速变化的商业环境中,项目管理已经成为任何组织成功的关键因素。能够有效地管理项目,保证项目在设定的时间和预算内按照预期的质量完成,是每个项目经理的目标。为了实现这个目标,项目经理需要依赖强大的工具&a…

由于找不到vcruntime140_1.dll,无法继续执行代码该怎么修复呢?

我最近遇到了一个vcruntime140_1.dll的问题,导致我的某些应用程序无法正常运行。当我第一次遇到这个问题时,我对这个dll文件的作用一无所知。我开始搜索并了解了vcruntime140_1.dll是Microsoft Visual C Redistributable的一部分,并为使用Vis…

FreeRTOS(计数信号量)

资料来源于硬件家园:资料汇总 - FreeRTOS实时操作系统课程(多任务管理) 目录 一、计数信号量的定义与应用 1、计数信号量的定义 2、计数信号量的应用 二、计数信号量的运作机制 1、任务间计数信号量的实现 三、计数信号量常用的API函数 1、计数信号量典型流程…

泛型编程| 模板初阶——懒人福音!

目录 前言介绍 函数模板 函数模板格式 函数模板的原理 函数模板的实例化 隐式实例化 显示实例化 模板参数匹配规则 类模板 总结 前言介绍 之前c语言实现swap函数的时候,我们不仅要修改参数的类型,还要修改函数的名字 而在学完函数重载之后&am…

东南大学齿轮箱故障诊断(Python代码,MSCNN结合LSTM结合注意力机制模型,代码有注释)

运行代码要求: 代码运行环境要求:Keras版本>2.4.0,python版本>3.6.0 1.东南大学采集数据平台: 数据 该数据集包含2个子数据集,包括轴承数据和齿轮数据,这两个子数据集都是在传动系动力学模拟器&am…

Android JNI实现锅炉压力显示系统详解

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。 &#x1f449;点击跳转到教程 第一步创建GuoLu.c文件 // // Created by DELL on 2023/8/13. // #include <stdio.h…

Python 潮流周刊#15:如何分析 FastAPI 异步请求的性能?

你好&#xff0c;我是猫哥。这里每周分享优质的 Python、AI 及通用技术内容&#xff0c;大部分为英文。标题取自其中一则分享&#xff0c;不代表全部内容都是该主题&#xff0c;特此声明。 本周刊精心筛选国内外的 250 信息源&#xff0c;为你挑选最值得分享的文章、教程、开源…

记录一下关于word存放代码出现的问题

如下图所示&#xff0c;从 Word 中复制代码并粘贴到其他地方&#xff0c;例如文本编辑器或代码编辑器中&#xff0c;有时会出现额外的连字符或破折号。这是因为 Word 使用了特定的字符编码和格式&#xff0c;而这些字符在代码中可能不被支持或解析为特殊字符。   可见有时从…

Java线程调度以及算法

线程调度概况 Java的线程调度程序是JVM的一部分&#xff0c;它决定应该运行哪个线程。无法保证线程调度程序将选择运行哪个可运行线程。 一次只能有一个线程在一个进程中运行。线程调度程序主要使用抢占式或时间切片调度来调度线程。 抢占式调度与时间分片的区别 在抢占式调…

边缘计算:下一代计算模式的突破

章节一&#xff1a;引言 随着物联网、人工智能和大数据等技术的不断发展&#xff0c;计算需求变得越来越复杂&#xff0c;传统的云计算模式已经难以满足快速增长的数据处理需求。在这样的背景下&#xff0c;边缘计算作为一种全新的计算模式崭露头角&#xff0c;为我们带来了更加…

Pytorch深度学习-----实现神经网络模型在GPU上进行训练的方法

系列文章目录 PyTorch深度学习——Anaconda和PyTorch安装 Pytorch深度学习-----数据模块Dataset类 Pytorch深度学习------TensorBoard的使用 Pytorch深度学习------Torchvision中Transforms的使用&#xff08;ToTensor&#xff0c;Normalize&#xff0c;Resize &#xff0c;Co…

css3新增选择器总结

目录 一、属性选择器 二、结构伪类选择器 三、伪元素选择器 四、UI状态伪类选择器 五、反选伪类选择器 六、target选择器 七、父亲选择器、后代选择器 八、相邻兄弟选择器、兄弟们选择器 一、属性选择器 &#xff08;除IE6外的大部分浏览器支持&#xff09; E&#…

数据库设计,理解第二范式和第三范式的区别

在学习数据库范式的时候&#xff0c;很多人搞不清第二范式和第三范式他到底是有啥区别。 想讲清楚第二范式与第三范式的区别&#xff0c;不得不聊到键和相关属性的概念 键和相关属性的概念 范式的定义会使用到主健和候选健&#xff0c;数据库中的健&#xff08;Key)由一个或…

STM32F103C8T6开发笔记1:有线陀螺仪二自由度机械臂

经过之前几天的快速学习&#xff0c;今日尝试组装一款基于MPU6050陀螺仪控制的二自由度机械臂&#xff0c;本文对其使用器材以及基本原理进行介绍~ 组装效果图&#xff1a; 主要元器件如下&#xff1a; 器件个数15 KG以上 舵机3适合舵机的金属夹爪118650电池电源12V1云台支架2…

工博士与纷享销客达成战略合作,开启人工智能领域合作新篇章

近日&#xff0c;工博士与纷享销客在上海正式签署了战略合作协议&#xff0c;正式拉开了双方在人工智能与数字营销领域的合作序幕。这次合作将为双方带来更多机遇和发展空间&#xff0c;并为全球人工智能领域的客户提供更高效、智能的CRM解决方案。 < 双方项目人员合影 >…

React如何配置env环境变量

React版本&#xff1a; "react": "^18.2.0" 1、在package.json平级目录下创建.env文件 2、在‘.env’文件里配置环境变量 【1】PUBLIC_URL 描述&#xff1a;编译时文件的base-href 官方描述&#xff1a; // We use PUBLIC_URL environment variable …

③ vue组件

vue组件创建 在App.vue中添加。 技巧&#xff1a;先import&#xff0c;把vue组件地址写出来。然后在template中写名字。剩下的就自动生成。要看下import有没有多生成什么。 注意1&#xff1a; 注意2&#xff1a; 不只是能在App.vue中引入组件。任意组件中都可以引用其他组件…

msvcp110.dll丢失怎样修复,msvcp110.dll丢失修复方法

msvcp110.dll是Microsoft C库的一部分&#xff0c;它是运行依赖于该库的程序所必需的动态链接库文件。它的作用是提供C运行时库函数的实现&#xff0c;这些函数用于处理程序的内存管理、异常处理、多线程支持等。当系统中缺少或损坏了msvcp110.dll文件时&#xff0c;请及时修复…