当前位置:首页 > 科技  > 软件

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

来源: 责编: 时间:2023-10-30 17:23:33 262观看
导读光学字符识别是一个古老但依然具有挑战性的问题,涉及从非结构化数据中(包括图像和PDF文档)检测和识别文本。它在银行、电子商务和社交媒体内容管理等领域具有广泛的应用。但与数据科学中的每个主题一样,尝试学习如何解决O

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

sDK28资讯网——每日最新资讯28at.com

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

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

1. pytesseract

它是最流行的Python库之一,用于光学字符识别。它使用Google的Tesseract-OCR引擎从图像中提取文本。支持多种语言。sDK28资讯网——每日最新资讯28at.com

如果想知道是否支持您的语言,请查看这个链接:https://tesseract-ocr.github.io/tessdoc/Data-Files-in-different-versions.html。您只需要几行代码将图像转换为文本:sDK28资讯网——每日最新资讯28at.com

# installation!sudo apt install tesseract-ocr!pip install pytesseractimport pytesseractfrom pytesseract import Outputfrom PIL import Imageimport cv2img_path1 = '00b5b88720f35a22.jpg'text = pytesseract.image_to_string(img_path1,lang='eng')print(text)

输出:sDK28资讯网——每日最新资讯28at.com

sDK28资讯网——每日最新资讯28at.com

我们还可以尝试获取图像中每个检测到的项目的边界框坐标。sDK28资讯网——每日最新资讯28at.com

# boxes around characterprint(pytesseract.image_to_boxes(img_path1))

结果:sDK28资讯网——每日最新资讯28at.com

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

正如您所注意到的,它估算了每个字符的边界框,而不是每个单词!如果我们想提取每个单词的框,而不是字符,那么应该使用image_to_data的另一种方法,而不是image_to_boxes:sDK28资讯网——每日最新资讯28at.com

# boxes around wordsprint(pytesseract.image_to_data(img_path1))

sDK28资讯网——每日最新资讯28at.com

这是返回的结果,并不是很完美。例如,它将“AFILM”解释为一个单词。此外,它没有检测和识别输入图像中的所有单词。sDK28资讯网——每日最新资讯28at.com

2. EasyOCR

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

sDK28资讯网——每日最新资讯28at.com

如果在Google Colab上工作,建议您设置GPU,这有助于加快此框架的速度。以下是详细代码:sDK28资讯网——每日最新资讯28at.com

# installation!pip install easyocrimport easyocrreader = easyocr.Reader(['en'])extract_info = reader.readtext(img_path1)for el in extract_info:   print(el)

sDK28资讯网——每日最新资讯28at.com

与pytesseract相比,结果要好得多。对于每个检测到的文本,我们还有边界框和置信度级别。sDK28资讯网——每日最新资讯28at.com

3. Keras-OCR

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

# installation!pip install keras-ocr -qimport keras_ocrpipeline = 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数据框:sDK28资讯网——每日最新资讯28at.com

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

sDK28资讯网——每日最新资讯28at.com

神奇的是,我们可以看到我们有更清晰和更精确的结果。sDK28资讯网——每日最新资讯28at.com

4. TrOCR

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

# installation!pip install transformersfrom transformers import TrOCRProcessor, VisionEncoderDecoderModelfrom PIL import Imagemodel_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_valuesgenerated_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任务,首先需要检测图像中的对象,然后提取输入中的文本。由于它只关注最后一步,它的性能不佳。要使其正常工作,最好使用边界框裁剪图像的特定部分,如下所示:sDK28资讯网——每日最新资讯28at.com

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

sDK28资讯网——每日最新资讯28at.com

然后,我们尝试再次应用模型:sDK28资讯网——每日最新资讯28at.com

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

sDK28资讯网——每日最新资讯28at.com

此操作可以重复应用于图像中包含的每个单词/短语。sDK28资讯网——每日最新资讯28at.com

5. docTR

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

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

然后,我们导入使用docTR的相关库并加载模型,它是一个两步方法。实际上,我们需要指定文本检测和文本识别的DBNet和CRNN的模型,文本检测和文本识别的后端模型:sDK28资讯网——每日最新资讯28at.com

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

我们最终读取文件,使用预训练模型,并将输出导出为嵌套字典:sDK28资讯网——每日最新资讯28at.com

# read fileimg = DocumentFile.from_images(img_path1)# use pre-trained modelresult = model(img)# export the result as a nested dictextract_info = result.export()
这是非常长的输出:
{'pages': [{'page_idx': 0, 'dimensions': (678, 1024), 'orientation': {'value': None, 'confidence': None},...

为更好地可视化,最好使用双重循环,仅获取我们感兴趣的信息:sDK28资讯网——每日最新资讯28at.com

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

sDK28资讯网——每日最新资讯28at.com

docTR是从图像或PDF中提取有价值信息的另一个好选择。sDK28资讯网——每日最新资讯28at.com

结论

五个工具各有优点和缺点。当选择这些软件包之一时,首先考虑您正在分析的数据的语言。如果考虑到非英语语言,EasyOCR可能是最适合的选择,因为它具有更广泛的语言覆盖和更好的性能。sDK28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-15857-0.html可以提取图像文本的五大 Python 库

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Python时间序列分析库介绍:statsmodels、tslearn、tssearch、tsfresh

下一篇: 教你利用二叉树的思想,轻松解决合并排序和快速

标签:
  • 热门焦点
  • Find N3入网:最高支持16+1TB

    Find N3入网:最高支持16+1TB

    OPPO将于近期登场的Find N3折叠屏目前已经正式入网,型号为PHN110。本次Find N3在外观方面相比前两代有很大的变化,不再是小号的横向折叠屏,而是跟别的厂商一样采用了较为常见的
  • K60至尊版刚预热 一加Ace2 Pro正面硬刚

    K60至尊版刚预热 一加Ace2 Pro正面硬刚

    Redmi这边刚如火如荼的宣传了K60 Ultra的各种技术和硬件配置,作为竞品的一加也坐不住了。一加中国区总裁李杰发布了两条微博,表示在自家的一加Ace2上早就已经采用了和PixelWo
  • 线程通讯的三种方法!通俗易懂

    线程通讯的三种方法!通俗易懂

    线程通信是指多个线程之间通过某种机制进行协调和交互,例如,线程等待和通知机制就是线程通讯的主要手段之一。 在 Java 中,线程等待和通知的实现手段有以下几种方式:Object 类下
  • 签约井川里予、何丹彤,单视频点赞近千万,MCN黑马永恒文希快速崛起!

    签约井川里予、何丹彤,单视频点赞近千万,MCN黑马永恒文希快速崛起!

    来源:视听观察永恒文希传媒作为一家MCN公司,说起它的名字来,可能大家会觉得有点儿陌生,但是说出来下面一串的名字之后,或许大家就会感到震惊,原来这么多网红,都签约这家公司了。根
  • 大厂卷向扁平化

    大厂卷向扁平化

    来源:新熵作者丨南枝 编辑丨月见大厂职级不香了。俗话说,兵无常势,水无常形,互联网企业调整职级体系并不稀奇。7月13日,淘宝天猫集团启动了近年来最大的人力制度改革,目前已形成一
  • 认真聊聊东方甄选:如何告别低垂的果实

    认真聊聊东方甄选:如何告别低垂的果实

    来源:山核桃作者:财经无忌爆火一年后,俞敏洪和他的东方甄选依旧是颇受外界关心的“网红”。7月5日至9日,为期5天的东方甄选“甘肃行”首次在自有App内直播,
  • 三星Galaxy Z Fold5官方渲染图曝光:13.4mm折叠厚度依旧感人

    三星Galaxy Z Fold5官方渲染图曝光:13.4mm折叠厚度依旧感人

    据官方此前宣布,三星将于7月26日在韩国首尔举办Unpacked活动,届时将带来带来包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy Z Flip 5、
  • 7月4日见!iQOO 11S官宣:“鸡血版”骁龙8 Gen2+200W快充加持

    7月4日见!iQOO 11S官宣:“鸡血版”骁龙8 Gen2+200W快充加持

    上半年已接近尾声,截至目前各大品牌旗下的顶级旗舰都已悉数亮相,而下半年即将推出的顶级旗舰已经成为了数码圈爆料的主流,其中就包括全新的iQOO 11S系
  • 上海举办人工智能大会活动,建设人工智能新高地

    上海举办人工智能大会活动,建设人工智能新高地

    人工智能大会在上海浦江两岸隆重拉开帷幕,人工智能新技术、新产品、新应用、新理念集中亮相。8月30日晚,作为大会的特色活动之一的上海人工智能发展盛典人工
Top