OCR--基于Tesseract详细教程(python)

这篇具有很好参考价值的文章主要介绍了OCR--基于Tesseract详细教程(python)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.介绍

2. 准备工作

2.1 安装Tesseract

2.2 安装pytesseract

3. Tesseract的基础应用

 3.1 翻译图像文字——image_to_string

 3.2 获取单个字符的外框——image_to_boxes

 3.3  输出区域、置信度 文字内容以及其他——image_to_data

3.4 设定配置实现过滤功能 

3.4.1  OEM

3.4.2  PEM

3.4.3 示例:只检测数字


1.介绍

        Tesseract 的开发始于 2006 年,由惠普公司的 Mike J. Bradbury 带领团队进行。当时,他们希望开发一款能够识别印刷体和手写体的 OCR(Optical Character Recognition,光学字符识别) 引擎。2009 年,Tesseract 被移植到 C++,并成为 Google 的开源项目。随着时间的推移,Tesseract 逐渐成为最受欢迎的 OCR 引擎之一,被广泛应用于各种场景。它可以将图像中的文字提取出来,并将其转化为机器可读的文本。Tesseract 不仅支持多种语言,还可以进行多种格式的图像处理,包括常见的 PDF、JPG、PNG 等。

2. 准备工作

2.1 安装Tesseract

Tesseract下载地址为:
Tesseract User Manual | tessdocTesseract documentationhttps://tesseract-ocr.github.io/tessdoc/

↓↓↓  按照如下步骤进行安装 

tesseract-ocr,opencv项目实战,ocr,opencv,python,图像处理

tesseract-ocr,opencv项目实战,ocr,opencv,python,图像处理

 tesseract-ocr,opencv项目实战,ocr,opencv,python,图像处理

勾选下面的选项下载一些语言包,可以翻译中文和一些其他语言 

tesseract-ocr,opencv项目实战,ocr,opencv,python,图像处理

下载不成功的朋友可以点击下面的链接进行下载

https://github.com/tesseract-ocr/tessdatahttps://github.com/tesseract-ocr/tessdatatesseract-ocr,opencv项目实战,ocr,opencv,python,图像处理

选择下载路径 

tesseract-ocr,opencv项目实战,ocr,opencv,python,图像处理

tesseract-ocr,opencv项目实战,ocr,opencv,python,图像处理

点击Finish下载完毕 

tesseract-ocr,opencv项目实战,ocr,opencv,python,图像处理

2.2 安装pytesseract

执行命令安装pytesseract库

pip install pytesseract

3. Tesseract的基础应用

如果你想先了解一下pytesseract都有什么功能的话可以先Ctrl + 鼠标左键 点进去大致浏览一下

这里Franpper帮大家把pytesseract的功能先列出来

tesseract-ocr,opencv项目实战,ocr,opencv,python,图像处理

下面正式开始

首先进行一些基础操作:导入相关包、设置 Tesseract OCR 引擎的路径、加载图片等

# 导入一些需要的包
import cv2
import pytesseract

# 设置Tesseract OCR引擎路径
pytesseract.pytesseract.tesseract_cmd = r'D:\Program Files\Tesseract-OCR\tesseract.exe'

# 加载一张图片
img = cv2.imread(r'E:\csdn\tesseract\Snipaste.jpg')

 下面是Franpper读入的图片(就是本文的简介)tesseract-ocr,opencv项目实战,ocr,opencv,python,图像处理

 3.1 翻译图像文字——image_to_string

text = pytesseract.image_to_string(img, lang="chi_sim") # 指定语言

print(text)

输出如下(其实看结果翻译的情况并不好):

tesseract-ocr,opencv项目实战,ocr,opencv,python,图像处理

 3.2 获取单个字符的外框——image_to_boxes

boxes = pytesseract.image_to_boxes(img, lang="chi_sim")  # 使用
image_h, image_w, _ = img.shape


def cv2ImgAddText(img, text, left, top, textColor=(0, 255, 0), textSize=20):
    """

    :param img: 图像
    :param text: 文字内容
    :param left: 字体左边开始位置
    :param top: 字体上面开始位置
    :param textColor: 字体颜色
    :param textSize: 字体大小
    :return: 绘制后的图片
    """

    import numpy as np
    from PIL import Image, ImageDraw, ImageFont
    if isinstance(img, np.ndarray):  # 判断是否OpenCV图片类型
        img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    # 创建一个可以在给定图像上绘图的对象
    draw = ImageDraw.Draw(img)
    # 字体的格式
    fontStyle = ImageFont.truetype(
        "STSONG.TTF", textSize, encoding="utf-8")
    # 绘制文本
    draw.text((left, top), text, textColor, font=fontStyle)
    # 转换回OpenCV格式
    return cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)


for box in boxes.splitlines():
    box = box.split(' ')
    print(box)
    """
    opencv中坐标系是基于左上点的
    但是tesseract检测出的框是基于左下点的
    输出的数据分别是:字符, 左下角横坐标, 左下角纵坐标, 右上角横坐标, 右上角纵坐标(均是基于左下点原点)
    所以在绘制的时候要进行坐标转换
    """
    x1, y1, x2, y2 = int(box[1]), int(box[2]), int(box[3]), int(box[4])

    cv2.rectangle(img, (x1, image_h - y1), (x2, image_h - y2), (0, 255, 0), 1)
    # cv2.putText函数无法添加中文字符,所以使用PIL库(RGB)添加中文字符后转为opencv格式(BGR)
    img = cv2ImgAddText(img, box[0], x1, image_h - y1 - 30, (255, 0, 0), 15)

cv2.imshow("img", img)
cv2.waitKey(0)

输出如下,可以获取单个文字外框的左下角横坐标、左下角纵坐标、右上角横坐标、右上角纵坐标(基于左下点原点坐标系)

tesseract-ocr,opencv项目实战,ocr,opencv,python,图像处理

 3.3  输出区域、置信度 文字内容以及其他——image_to_data

data = pytesseract.image_to_data(img, output_type=pytesseract.Output.STRING, lang="chi_sim")

for level, infor in enumerate(data.splitlines()):
    if level != 0:
        infor = infor.split()
        # 每一行的输出为:level、page_num、block_num、par_num、line_num、word_num、left、top、width、height、conf、text
        print(infor)
        if len(infor) == 12:
            x, y, w, h = int(infor[6]), int(infor[7]), int(infor[8]), int(infor[9])  # 这里的坐标邮与opencv相同了,即左上加宽高
            cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 1)
            img = cv2ImgAddText(img, infor[11], x, y - 20, (255, 0, 0), 15)

cv2.imshow("img", img)
cv2.waitKey(0)

执行结果如下:可以看到把一些字母合并成单词整体进行输出了 

tesseract-ocr,opencv项目实战,ocr,opencv,python,图像处理

3.4 设定配置实现过滤功能 

在编辑配置时有两个重要的参数,分别是OEM与PSM,下面Franpper给大家介绍一下

3.4.1  OEM

即 OCR Engine Mode(引擎模式),共有四种,如下图:

tesseract-ocr,opencv项目实战,ocr,opencv,python,图像处理

  • 0 — Legacy engine only
  • 1 — Neural nets LSTM engine only
  • 2 — Legacy + LSTM engines
  • 3 — Default, based on what is available
3.4.2  PEM

即Page Segmentation Mode(图片分割模式),共有13种, 如下图:

tesseract-ocr,opencv项目实战,ocr,opencv,python,图像处理

  • 0 — Orientation and script detection (OSD) only. 方向及语言检测(Orientation and script detection,OSD)
  • 1 — Automatic page segmentation with OSD. 自动图片分割
  • 2 — Automatic page segmentation, but no OSD, or OCR. 自动图片分割,没有OSD和OCR
  • 3 — Fully automatic page segmentation, but no OSD. (Default) 完全的自动图片分割,没有OSD
  • 4 — Assume a single column of text of variable sizes. 假设有一列不同大小的文本
  • 5 — Assume a single uniform block of vertically aligned text. 假设有一个垂直对齐的文本块
  • 6 — Assume a single uniform block of text. 假设有一个对齐的文本块
  • 7 — Treat the image as a single text line. 图片为单行文本
  • 8 — Treat the image as a single word. 图片为单词
  • 9 — Treat the image as a single word in a circle. 图片为圆形的单词
  • 10 — Treat the image as a single character. 图片为单个字符
  • 11 — Sparse text. Find as much text as possible in no particular order. 稀疏文本。查找尽可能多的文本,没有特定的顺序
  • 12 — Sparse text with OSD. OSD稀疏文本
  • 13 — Raw line. Treat the image as a single text line, bypassing hacks that are Tesseract-specific. 原始行。将图像视为单个文本行
3.4.3 示例:只检测数字
config = r'--oem 3 --psm 6 outputbase digits'  # 添加配置
data = pytesseract.image_to_data(img, output_type=pytesseract.Output.STRING, lang="chi_sim", config=config)

for level, infor in enumerate(data.splitlines()):
    if level != 0:
        infor = infor.split()
        # 每一行的输出为:level、page_num、block_num、par_num、line_num、word_num、left、top、width、height、conf、text
        print(infor)
        if len(infor) == 12:
            x, y, w, h = int(infor[6]), int(infor[7]), int(infor[8]), int(infor[9])  # 这里的坐标邮与opencv相同了,即左上加宽高
            cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 1)
            img = cv2ImgAddText(img, infor[11], x, y - 20, (255, 0, 0), 15)

cv2.imshow("img", img)
cv2.waitKey(0)

运行结果如下,可以看到只有数字被提取了出来

tesseract-ocr,opencv项目实战,ocr,opencv,python,图像处理

 

4. 结语

        Tesseract不仅仅是一个OCR工具,它代表了人工智能和机器学习在文本识别领域的突破性技术。它不仅为我们提供了从图像中提取文字的强大能力,而且通过持续的研发和优化,Tesseract的能力还将进一步提升。然而,Tesseract并非万能的。虽然它对于一些常规的文本识别任务有着出色的表现,但在处理一些复杂或特定的任务时,我们可能还需要进行更多的预处理或者后处理工作。尽管如此,Tesseract仍然是一个非常强大且灵活的工具,值得我们深入学习和探索。文章来源地址https://www.toymoban.com/news/detail-859488.html

到了这里,关于OCR--基于Tesseract详细教程(python)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Python OCR库比较:pyocr、pytesseract和python-tesseract

    在接口自动化工作中,经常需要处理文字识别的任务,而OCR(Optical Character Recognition,光学字符识别)库能够帮助我们将图像中的文字提取出来。Python中有几个常用的OCR库,包括pyocr、pytesseract和python-tesseract。本文将对它们进行比较,并提供一些示例代码来演示它们在实际接口

    2024年02月07日
    浏览(53)
  • 基于Tesseract模块Python实现提取图片中的文字信息(安装+使用教程)

    Python实现提取图片中的文字可以使用Optical Character Recognition (OCR) 技术来解决。OCR是指将图像中的文本转换成可编辑的文本的过程。Python有许多OCR库,但最流行和最广泛使用的是Tesseract库。 下面是一个使用Python和Tesseract来提取图像中的文本的简单示例代码。 OCR,即光学字符识

    2024年02月05日
    浏览(43)
  • OCR之Tesseract安装

    Tesseract是常用的开源OCR识别引擎,后续的图片文字识别项目我们将会调用该库进行识别,本文针对Tesseract的安装配置进行相关说明。 下载地址:Tesseract 选择最新的版本进行下载,下载完成后,解压安装在自己设定的安装路径,一直选择next即可完成安装。 打开系统属性页面,

    2024年02月14日
    浏览(41)
  • Tesseract OCR安装与简单使用

    1.下载Tesseract OCR 下载地址:https://digi.bib.uni-mannheim.de/tesseract/ 2.安装Tesseract OCR 双击安装程序,进入安装界面。 接受协议,下一步。 选择用户 选择组件 如果电脑配置够好、网速够快,可以之间勾选”Additional language data(download)“,下载全部额外的语言数据。 直接全选的话,后

    2024年02月12日
    浏览(45)
  • Mac 上使用 Tesseract OCR 识别图片文本

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

    2024年02月15日
    浏览(39)
  • Android开发:通过Tesseract第三方库实现OCR

    一、引言         什么是 OCR ?OCR(Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程。简单地说,OCR是一种技术,该项技术采用光学的

    2024年02月16日
    浏览(62)
  • 提取图像中的文本信息(Tesseract OCR 和 pytesseract)

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

    2024年02月12日
    浏览(50)
  • Qt利用VCPKG和CMake和OpenCV和Tesseract实现中英文OCR

      今天看 OpenCV 方面的教程,pdf 格式的,因为一些强迫症的习惯,喜欢添加一些书签,手动是不太愿意的,自然就想到利用OCR来实现。   想要自己编码实现OCR,方案比较简单就是 Tesseract 。单独使用 Tesseract 也可以,但最好利用 OpenCV 来进行图像方面的处理,一大堆方法可

    2024年02月05日
    浏览(48)
  • 从零开发短视频电商 Tesseract OCR 的 Java 拓展库 javacpp-presets

    项目地址:https://github.com/bytedeco/javacpp-presets JavaCPP: JavaCPP 是一个用于在 Java 中使用本地库的工具,它允许通过 Java 代码访问本地(C/C++)库,而无需编写过多的本地代码。这种方法可以使 Java 与其他语言编写的库进行集成,提供了对性能关键的原生功能的访问。JavaCPP 使用

    2024年01月21日
    浏览(44)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包