tesseract

tesseract,第1张

文章目录
  • 前言
  • 一、OCR的作用
  • 二、使用步骤
    • 1.引入库
    • 2.单字符识别
    • 3.整体识别
    • 4.完整代码
  • 总结


前言

本篇文章主要是学习记录使用,给大家本文章的源视频地址,虽然是英语的不过有中英双字幕,还是蛮好听懂的。


一、OCR的作用

OCR,即 Optical Character Recognition,光学字符识别,是指通过扫描字符,然后通过其形状将其翻译成电子文本的过程。通常技术中广泛流传的 OCR 指的就是“将图片转成文字”的智能技术。OCR描述原文

二、使用步骤 1.引入库

代码如下(示例):
简单使用还是仅仅依赖两个库:
pip install opencv-python
pip install pytesseract
(没下载库的)

import cv2
import pytesseract
2.单字符识别

代码如下(示例):

# 获取图像大小
img_H, img_W, _ = img.shape
# 单个图像识别数据
boxes = pytesseract.image_to_boxes(img)
# 处理图片数据
for boxe in boxes.splitlines():
    # 分割数据
    boxe = boxe.split(" ")
    # print(boxe)
    # 获取图像识别的位置坐标
    x, y, w, h = int(boxe[1]), int(boxe[2]), int(boxe[3]), int(boxe[4])
    # 添加位置方框
    cv2.rectangle(img, (x, img_H - y), (w, img_H - h), (0, 0, 255), 2)
    # 添加识别文字
    cv2.putText(img, boxe[0], (x, img_H - y + 25), cv2.FONT_HERSHEY_COMPLEX, 1, (255, 0, 0), 1)

识别结果演示:

3.整体识别

代码如下(示例):

# 获取图像大小
img_H, img_W, _ = img.shape
# 图像识别数据
boxes = pytesseract.image_to_data(img)
# 处理图片数据
for boxe in boxes.splitlines()[1:]:
    # 分割数据
    boxe = boxe.split()
    print(boxe)
    # 判断图像数据长度(只有数据长度为12时才存储有识别结果)
    if len(boxe) == 12:
        # 获取图像识别的位置坐标
        x, y, w, h = int(boxe[6]), int(boxe[7]), int(boxe[8]), int(boxe[9])
        # 添加位置方框
        cv2.rectangle(img, (x, y), (w + x, h + y), (0, 0, 255), 2)
        # 添加识别文字
        cv2.putText(img, boxe[11], (x, y + 30), cv2.FONT_HERSHEY_COMPLEX, 0.5, (0, 255, 0), 1)


识别结果演示:


4.完整代码

代码如下(示例):

import cv2
import pytesseract

# 注意:OCR只接受RGB值 openCV为BGR值 在使用时需要格式转换
# 启动tesseract_OCR
pytesseract.pytesseract.tesseract_cmd = r"D:\PyCharm\Tesseract-OCR\tesseract.exe"

# 导入图像
img = cv2.imread("./img/b.bmp")
# 处理图像 (BGR转RGB格式才能OCR识别)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)


# 窗口格式化转换(才能显示中文)
def winname(name):
    return name.encode("gbk").decode(errors="ignore")


# 显示图像
cv2.imshow(winname("原图"), img)

# 识别结果
# print(pytesseract.image_to_string(img))


# 识别整体
# 获取图像大小
img_H, img_W, _ = img.shape
# 图像识别数据
boxes = pytesseract.image_to_data(img)
# 处理图片数据
for boxe in boxes.splitlines()[1:]:
    # 分割数据
    boxe = boxe.split()
    print(boxe)
    # 判断图像数据长度(只有数据长度为12时才存储有识别结果)
    if len(boxe) == 12:
        # 获取图像识别的位置坐标
        x, y, w, h = int(boxe[6]), int(boxe[7]), int(boxe[8]), int(boxe[9])
        # 添加位置方框
        cv2.rectangle(img, (x, y), (w + x, h + y), (0, 0, 255), 2)
        # 添加识别文字
        cv2.putText(img, boxe[11], (x, y + 30), cv2.FONT_HERSHEY_COMPLEX, 0.5, (0, 255, 0), 1)

cv2.imshow(winname("识别"), img)
cv2.waitKey(0)

"""
# 单个识别
# 获取图像大小
img_H, img_W, _ = img.shape
# 单个图像识别数据
boxes = pytesseract.image_to_boxes(img)
# 处理图片数据
for boxe in boxes.splitlines():
    # 分割数据
    boxe = boxe.split(" ")
    # print(boxe)
    # 获取图像识别的位置坐标
    x, y, w, h = int(boxe[1]), int(boxe[2]), int(boxe[3]), int(boxe[4])
    # 添加位置方框
    cv2.rectangle(img, (x, img_H - y), (w, img_H - h), (0, 0, 255), 2)
    # 添加识别文字
    cv2.putText(img, boxe[0], (x, img_H - y + 25), cv2.FONT_HERSHEY_COMPLEX, 1, (255, 0, 0), 1)

# 数字识别
cong = r"--oem 3 --psm 6 outputbase digits"
# 获取图像大小
img_H, img_W, _ = img.shape
# 图像数字识别数据
boxes = pytesseract.image_to_data(img, config=cong)
# 处理图片数据
for boxe in boxes.splitlines()[1:]:
    # 分割数据
    boxe = boxe.split()
    print(boxe)
    if len(boxe) == 12:
        # 获取图像识别的位置坐标
        x, y, w, h = int(boxe[6]), int(boxe[7]), int(boxe[8]), int(boxe[9])
        # 添加位置方框
        cv2.rectangle(img, (x, y), (w + x, h + y), (0, 0, 255), 2)
        # 添加识别文字
        cv2.putText(img, boxe[11], (x, y), cv2.FONT_HERSHEY_COMPLEX, 1, (255, 0, 0), 1)

"""



总结

提示:这个整体是不难的,而且识别正确率也还是蛮高的。只要下载了相对应的库和tesseract_OCR就可以了。tesseract_OCR下载可以借鉴知乎-海阔and天空。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/793698.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存