Tesseract用OpenCV进行文本检测

这篇具有很好参考价值的文章主要介绍了Tesseract用OpenCV进行文本检测。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

一、什么是Tesseract

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

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

传送门

二、创建开发环境

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

conda create -n openCV

 引入openCV包

pip install opencv-python

 引入pytesseract包

Tesseract用OpenCV进行文本检测,openCV实战项目,ocr,目标检测,opencv

三、代码实战

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

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

Tesseract用OpenCV进行文本检测,openCV实战项目,ocr,目标检测,opencv

编写代码解析

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)

 输出

Tesseract用OpenCV进行文本检测,openCV实战项目,ocr,目标检测,opencv

Tesseract用OpenCV进行文本检测,openCV实战项目,ocr,目标检测,opencv

以上就是通过使用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

Tesseract用OpenCV进行文本检测,openCV实战项目,ocr,目标检测,opencv

 2.png

Tesseract用OpenCV进行文本检测,openCV实战项目,ocr,目标检测,opencv

输出

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

Tesseract用OpenCV进行文本检测,openCV实战项目,ocr,目标检测,opencv

Tesseract用OpenCV进行文本检测,openCV实战项目,ocr,目标检测,opencv

Tesseract用OpenCV进行文本检测,openCV实战项目,ocr,目标检测,opencv

图像中添加识别的文本内容
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,使得文本边框较粗。

输出

Tesseract用OpenCV进行文本检测,openCV实战项目,ocr,目标检测,opencv

检测连续的字符串

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

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)

 输出

Tesseract用OpenCV进行文本检测,openCV实战项目,ocr,目标检测,opencv

每个字段的含义:

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

Tesseract用OpenCV进行文本检测,openCV实战项目,ocr,目标检测,opencv

只识别图片中的数字
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在识别文本时如何将图像分割为单个字符、单词、行和文本块。

Tesseract用OpenCV进行文本检测,openCV实战项目,ocr,目标检测,opencv

 文章来源地址https://www.toymoban.com/news/detail-645736.html

 

到了这里,关于Tesseract用OpenCV进行文本检测的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Mac 上使用 Tesseract OCR 识别图片文本

    Tesseract OCR 引擎:Tesseract是一个开源的OCR引擎,你需要先安装它。可以从Tesseract官方网站(https://github.com/tesseract-ocr/tesseract)下载适用于你的操作系统的安装程序或源代码,并按照官方文档进行安装。 Tesseract OCR 对于低分辨率或模糊的图片可能无法准确识别。尝试使用更高分

    2024年02月15日
    浏览(39)
  • 使用Microsoft认知服务进行文本检测和 OCR

    (Microsoft Cognitive Services MCS) Microsoft认知服务 这篇博客将介绍 Microsoft Cognitive Services (MCS) OCR API。尽管与Amazon Rekognition API相比,实现和使用起来稍微困难一些,但Microsoft Cognitive Services OCR API表明它非常强大,并且能够在许多情况下(包括低质量图像)进行OCR文本。 在处理

    2024年02月09日
    浏览(34)
  • Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之六 简单进行人脸训练与识别

    目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之六 简单进行人脸训练与识别 一、简单介绍 二、简单进行人脸训练与识别 1、LBPH(Local Binary Patterns Histograms)算法进行人脸训练和识别 2、实现步骤: 3、判断是谁的人脸: 案例中涉及的关键函数说

    2024年04月26日
    浏览(86)
  • 提取图像中的文本信息(Tesseract OCR 和 pytesseract)

    安装Tesseract:点这里参考本人博客 这个库只自带了一个英语的语言包,这个时候如果我们图片中有对中文或者其他语言的识别需求,就需要去下载其他语言包 进入官网以后进入Traineddata Files 找到这个位置 tessdata_best适用于愿意以大量速度换取稍微好一点的准确性的人。它也是

    2024年02月12日
    浏览(50)
  • 【OpenCV实现图像:OpenCV进行OCR字符分割】

    在处理OCR(Optical Character Recognition,光学字符识别)时,利用传统的图像处理方法进行字符切分仍然是一种有效的途径。即便当前计算机视觉领域主导的是卷积神经网络,但对于一些相对简单的实际应用场景,传统方法仍然表现出良好的效果。 在OCR任务中,字符切分是一个关

    2024年01月18日
    浏览(38)
  • 树莓派项目:使用 OpenCV 树莓派相机进行面部和眼睛检测

    该项目涵盖了在Raspberry Pi 4上安装OpenCV 的人脸和眼睛检测系统。 数字图像处理和计算机视觉是科技领域相互交织的领域。图像处理的核心就是细化和调整图像。结果通常是另一个增强的图像。相比之下,计算机视觉更进一步——它不仅仅处理图像;它还处理图像。它解释它。

    2024年02月04日
    浏览(36)
  • 用OpenCV进行OCR字符分割

    本文重点介绍如何利用传统的图像处理的方法来进行OCR字符切分,进而可以用分割后的单个字符做相应的后续任务,虽然现在计算机视觉依然是卷积神经网络的天下,但是对于一些相对简单的落地场景传统方案还是很有效的。 闲话少说,我们直接开始吧! OCR : 全称 Optical C

    2024年02月14日
    浏览(31)
  • java使用tesseract-ocr进行文字识别

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 公司使用AI进行OCR文字识别效果不好,并且提供的服务不稳定,本次查找到使用java也能连接的OCR开源项目进行识别的学习 tesseract-ocr是一个开源的OCR文字识别项目,目前版本已经更新到5.X.X了,并且提供

    2024年02月04日
    浏览(40)
  • 工业缺陷检测项目实战(一)——基于opencv的工件缺陷检测C++和python实现

    作为研究生,每一个项目都很重要,这里给大家分享一个好入门项目,代码纯自己写,网上都是python的,但是有些企业要求C++编写项目,所以希望大家能学到东西。 一. 问题陈述 工件的展示,这是一个视频,然后工件一个个经过,要检测出哪个工件有缺陷,并且分类缺陷的种

    2024年02月04日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包