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.image_to_boxes的原点坐标是在左下角,而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了,感兴趣的可以点个关注,最近会一直更新,谢谢

  • 34
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值