0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

可以提取图像文本的5大Python库

新机器视觉 来源:小白玩转Python 2023-10-30 10:30 次阅读

主要是了解并掌握文本定位和识别的OCR工具哦~

光学字符识别是一个古老但依然具有挑战性的问题,涉及从非结构化数据中(包括图像和PDF文档)检测和识别文本。它在银行、电子商务和社交媒体内容管理等领域具有广泛的应用。

但与数据科学中的每个主题一样,尝试学习如何解决OCR任务时存在大量的资源。这就是为什么我写下这篇教程,它可以帮助您入门。

在本文中,我将展示一些Python库,可以让您轻松从图像中提取文本,无需太多麻烦。这些库的说明后面附有一个实际示例。所使用的数据集均来自Kaggle。

目录:

pytesseract

EasyOCR

Keras-OCR

TrOCR

docTR

1.pytesseract

它是最流行的Python库之一,用于光学字符识别。它使用Google的Tesseract-OCR引擎从图像中提取文本。支持多种语言。

如果想知道是否支持您的语言。您只需要几行代码将图像转换为文本:

# installation
!sudo apt install tesseract-ocr
!pip install pytesseract


import pytesseract
from pytesseract import Output
from PIL import Image
import cv2


img_path1 = '00b5b88720f35a22.jpg'
text = pytesseract.image_to_string(img_path1,lang='eng')
print(text)

输出:

ba09b884-762f-11ee-939d-92fbcf53809c.png

我们还可以尝试获取图像中每个检测到的项目的边界框坐标。

# boxes around character
print(pytesseract.image_to_boxes(img_path1))

结果:

~ 532 48 880 50 0
...
A 158 220 171 232 0
F 160 220 187 232 0
I 178 220 192 232 0
L 193 220 203 232 0
M 204 220 220 232 0
B 228 220 239 232 0
Y 240 220 252 232 0
R 259 220 273 232 0
O 274 219 289 233 0
N 291 220 305 232 0
H 314 220 328 232 0
O 329 219 345 233 0
W 346 220 365 232 0
A 364 220 379 232 0
R 380 220 394 232 0
D 395 220 410 232 0
...

正如您所注意到的,它估算了每个字符的边界框,而不是每个单词!如果我们想提取每个单词的框,而不是字符,那么应该使用image_to_data的另一种方法,而不是image_to_boxes:

# boxes around words
print(pytesseract.image_to_data(img_path1))

ba15d9a2-762f-11ee-939d-92fbcf53809c.png

这是返回的结果,并不是很完美。例如,它将“AFILM”解释为一个单词。此外,它没有检测和识别输入图像中的所有单词。

2. EasyOCR

轮到另一个开源Python库:EasyOCR。与pytesseract类似,它支持80多种语言。您可以通过网络演示快速而轻松地尝试它,无需编写任何代码。它使用CRAFT算法来检测文本并使用CRNN作为识别模型。此外,这些模型是使用Pytorch实现的。

如果在Google Colab上工作,建议您设置GPU,这有助于加快此框架的速度。以下是详细代码:

# installation
!pip install easyocr


import easyocr


reader = easyocr.Reader(['en'])
extract_info = reader.readtext(img_path1)


for el in extract_info:
   print(el)

ba1e5262-762f-11ee-939d-92fbcf53809c.png

与pytesseract相比,结果要好得多。对于每个检测到的文本,我们还有边界框和置信度级别。

3. Keras-OCR

Keras-OCR是另一个专门用于光学字符识别的开源库。与EasyOCR一样,它使用CRAFT检测模型和CRNN识别模型来解决任务。与EasyOCR的不同之处在于,它使用Keras而不是Pytorch实现。Keras-OCR的唯一不足之处是它不支持非英语语言。

# installation
!pip install keras-ocr -q


import keras_ocr


pipeline = keras_ocr.pipeline.Pipeline()
extract_info = pipeline.recognize([img_path1])
print(extract_info[0][0])

这是提取的第一个单词的输出:

('from',
 array([[761.,  16.],
        [813.,  16.],
        [813.,  30.],
        [761.,  30.]], dtype=float32))

为了可视化所有结果,我们将输出转换为Pandas数据框:

diz_cols = {'word':[],'box':[]}
for el in extract_info[0]:
    diz_cols['word'].append(el[0])
    diz_cols['box'].append(el[1])
kerasocr_res = pd.DataFrame.from_dict(diz_cols)
kerasocr_res

ba22bed8-762f-11ee-939d-92fbcf53809c.png

神奇的是,我们可以看到我们有更清晰和更精确的结果。

4. TrOCR

TrOCR是一种基于transformers的生成式图像模型,用于从图像中检测文本。它由编码器和解码器组成:TrOCR使用预训练的图像变换器作为编码器和预训练的文本变换器作为解码器。有关更多详细信息,请查看论文。Hugging Face平台上还有这个库的良好文档。首先,我们加载预训练模型:

# installation
!pip install transformers


from transformers import TrOCRProcessor, VisionEncoderDecoderModel
from PIL import Image


model_version = "microsoft/trocr-base-printed"
processor = TrOCRProcessor.from_pretrained(model_version)
model = VisionEncoderDecoderModel.from_pretrained(model_version)

在传递图像之前,我们需要调整其大小并进行规范化。一旦图像已经转换,我们可以使用.generate()方法提取文本。

image = Image.open(img_path1).convert("RGB")
pixel_values = processor(image, return_tensors="pt").pixel_values
generated_ids = model.generate(pixel_values)
extract_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
print('output: ',extract_text)
# output: 2.50

这与先前的库不同,它返回一个无意义的数字。为什么?TrOCR仅包含识别模型,而没有检测模型。要解决OCR任务,首先需要检测图像中的对象,然后提取输入中的文本。由于它只关注最后一步,它的性能不佳。要使其正常工作,最好使用边界框裁剪图像的特定部分,如下所示:

crp_image = image.crop((750, 3.4, 970, 33.94))
display(crp_image)

然后,我们尝试再次应用模型:

pixel_values = processor(crp_image, return_tensors="pt").pixel_values
generated_ids = model.generate(pixel_values)
extract_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(extract_text)

ba3ed05a-762f-11ee-939d-92fbcf53809c.png

此操作可以重复应用于图像中包含的每个单词/短语。

5. docTR

最后,我们涵盖了用于从文档中检测和识别文本的最后一个Python包:docTR。它可以将文档解释为PDF或图像,然后将其传递给两阶段方法。在docTR中,文本检测模型(DBNet或LinkNet)后跟文本识别的CRNN模型。由于使用了这两个深度学习框架,这个库要求安装Pytorch和Tensorflow

! pip install python-doctr
# for TensorFlow
! pip install "python-doctr[tf]"
# for PyTorch
! pip install "python-doctr[torch]"

然后,我们导入使用docTR的相关库并加载模型,它是一个两步方法。实际上,我们需要指定文本检测和文本识别的DBNet和CRNN的模型,文本检测和文本识别的后端模型:

from doctr.io import DocumentFile
from doctr.models import ocr_predictor
model = ocr_predictor(det_arch = 'db_resnet50',
                      reco_arch = 'crnn_vgg16_bn',
                      pretrained = True
                     )

我们最终读取文件,使用预训练模型,并将输出导出为嵌套字典:

# read file
img = DocumentFile.from_images(img_path1)


# use pre-trained model
result = model(img)


# export the result as a nested dict
extract_info = result.export()

这是非常长的输出:

{'pages': [{'page_idx': 0, 'dimensions': (678, 1024), 'orientation': {'value': None, 'confidence': None},...

为更好地可视化,最好使用双重循环,仅获取我们感兴趣的信息:

for obj1 in extract_info['pages'][0]["blocks"]:
    for obj2 in obj1["lines"]:
        for obj3 in obj2["words"]:
            print("{}: {}".format(obj3["geometry"],obj3["value"]))

ba4cd218-762f-11ee-939d-92fbcf53809c.png

docTR是从图像或PDF中提取有价值信息的另一个好选择。

结论

五个工具各有优点和缺点。当选择这些软件包之一时,首先考虑您正在分析的数据的语言。如果考虑到非英语语言,EasyOCR可能是最适合的选择,因为它具有更广泛的语言覆盖和更好的性能。免责声明:该数据集根据知识共享署名4.0国际许可(CC by 4.0)许可。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66767
  • python
    +关注

    关注

    51

    文章

    4675

    浏览量

    83466
  • 数据集
    +关注

    关注

    4

    文章

    1178

    浏览量

    24351
  • OCR
    OCR
    +关注

    关注

    0

    文章

    137

    浏览量

    16128

原文标题:可以提取图像文本的 5 大 Python 库

文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Python机器学习常用

    、Scikit-Learn在机器学习和数据挖掘的应用中,Scikit-Learn是一个功能强大的Python包,我们可以用它进行分类、特征选择、特征提取和聚集。二、StatsmodelsStatsmodels是另一个聚焦在
    发表于 03-26 16:29

    常用python机器学习盘点

    现在人工智能非常火爆,机器学习应该算是人工智能里面的一个子领域,而其中有一块是对文本进行分析,对数据进行深入的挖掘提取一些特征值,然后用一些算法去学习,训练,分析,甚至还能预测,那么Python中常
    发表于 05-10 15:20

    【建议收藏】Python大全

    (需要html5lib)。sanitize -为混乱的数据世界带来清明。文本处理用于解析和操作简单文本。杨通用difflib - (Pytho
    发表于 09-06 15:58

    NLPIR在文本信息提取方面的优势介绍

    构建知识图谱需要满足三项要素要求,分别是实体,关系和属性。文本信息提取,则是在文本中提出三元信息,包括实体和关系的信息,实体和属性的信息,然后将这些关系设置成数据的过程。 进行信息
    发表于 09-12 15:33

    如何在Python中将语音转换为文本

      语音识别是计算机软件识别口语中的单词和短语,并将其转换为可读文本的能力。那么如何在Python中将语音转换为文本?如何使用SpeechRecognition
    发表于 07-29 18:12

    基于灰度直方图和谱聚类的文本图像二值化方法

    基于灰度直方图和谱聚类的文本图像二值化方法:在自动文本提取中,经定位获得的字符区域需二值化后方能有效识别,由于背景的复杂,常用的阈值化方法不能有效分割自然环境下
    发表于 10-29 13:08 18次下载

    一种实用的标志牌文本提取算法

    根据对自然场景图像分割后具有标志牌和背景明显分开等特点,提出了一种基于边框删除的标志牌文本提取算法,首先在二值化图像中采用基于边缘检测和投影算法对标志牌区域
    发表于 01-22 12:03 12次下载

    基于多小波变换的文本图像文种识别

    采用了基于多 小波变换 的文本图像文种识别方法,提取多小波变换各子带系数的能量特征,构造特征矢量,并采用LIBSVM进行多文种的分类。通过对10种语言文字的文本图像进行实验,表
    发表于 08-15 10:34 25次下载
     基于多小波变换的<b class='flag-5'>文本图像</b>文种识别

    如何使用Python编写能够从原始文本提取信息的程序

    自然语言处理(Natural Language Processing,NLP)是人工智能的子领域之一,其重点是使计算机能够理解和处理人类语言。在本文中,我们将知晓NLP是如何工作的,并学习如何使用Python编写能够从原始文本提取
    的头像 发表于 08-13 10:02 1.1w次阅读

    如何使用TensorFlow Lite从Android设备图像提取文本

    将向您展示如何使用 TensorFlow Lite 从 Android 设备上的图像提取文本。我们将引导您完成最近开源的光学字符识别 (OCR) Android 参考应用的关键步骤,您可参考该处获取完整代码。在下方动画中,
    的头像 发表于 11-02 15:34 2888次阅读

    如何使用OpenCV和Python图像提取感兴趣区域

    今天我们将一起探究如何使用OpenCV和Python图像提取感兴趣区域(ROI)。 在之间的文章中,我们完成了图像边缘提取,例
    的头像 发表于 02-07 14:42 1437次阅读

    分享5个用于图像处理的Python

    图像处理是操纵图像以从中提取特征的现象。 在当今计算机视觉和深度学习的世界中,大量使用不同的图像处理算法对图像数据集进行边缘检测、识别
    的头像 发表于 02-08 16:23 1066次阅读
    分享5个用于<b class='flag-5'>图像</b>处理的<b class='flag-5'>Python</b>库

    Camelot:Python超强大的PDF表格提取

    如果你有从PDF中批量提取表格的需求,那么这篇文章就是你的福音。 Python 第三方模块 Camelot 能够精准识别PDF中的表格信息,并提取为pandas数据结构,而且还能导出为多种格式
    的头像 发表于 10-21 10:57 726次阅读
    Camelot:<b class='flag-5'>Python</b>超强大的PDF表格<b class='flag-5'>提取</b>器

    Newspaper:用于提取和整理文章的python

    Newspaper 是一个很棒的python库,用于提取和整理文章。 它有以下的优点: 多线程文章下载框架 识别新闻网址 从html提取文本 从html
    的头像 发表于 10-30 14:24 295次阅读

    Newspaper:能下载38种语言新闻文章的 Python 模块

    Newspaper 是一个很棒的python库,用于提取和整理文章。 它有以下的优点: 多线程文章下载框架 识别新闻网址 从html提取文本 从html
    的头像 发表于 10-31 11:09 200次阅读