Azure 计算机视觉 API - PDF 文件上的 OCR 到文本

Posted

技术标签:

【中文标题】Azure 计算机视觉 API - PDF 文件上的 OCR 到文本【英文标题】:Azure Computer Vision API - OCR to Text on PDF files 【发布时间】:2019-03-04 15:42:35 【问题描述】:

我正在尝试利用计算机视觉 API 对作为扫描文档但被视为图像 PDF 的 PDF 文件进行 OCR。

我已经对其进行了测试,它告诉我 PDF 是“InvalidImageFormat”、“输入数据不是有效图像”。当我在 PNG 上测试它时,它工作得很好。

是否有针对 PDF 图像使用 API,或者是否有 Azure API 可以结合使用来执行 PDF > PNG > Text?

【问题讨论】:

【参考方案1】:

编辑

由于回答了额外的服务,虽然我没有亲自尝试过其中一些,但它们可能适合这个目的。

https://docs.microsoft.com/en-us/azure/search/cognitive-search-concept-intro

在未来的某个时间点,当它进入 GA 时。 https://aws.amazon.com/textract/

原答案

不幸的是,Azure 的计算机视觉 API 没有 PDF 集成。要使用 Azure 计算机视觉,您需要自己将 pdf 更改为图像(JPG、PNG、BMP、GIF)。

Google 现在提供 pdf 集成,到目前为止,我已经从测试中看到了一些非常好的结果。

这是通过视觉客户端的 asyncBatchAnnotateFiles 方法完成的(我一直在使用 API 的 NodeJS 变体)

它可以处理多达2000页的文件,结果分为20个页面段并输出到谷歌云存储。

https://cloud.google.com/vision/docs/pdf

【讨论】:

Azure现在好像可以OCR pdf了:For PDF and TIFF files, up to 2000 pages (only first two pages for the free tier) are processed.docs.microsoft.com/en-us/azure/cognitive-services/…【参考方案2】:

Microsoft Azure 最近提供的最新 OCR 服务称为Recognize Text,其性能明显优于之前的OCR engine。识别文本现在可以与 Read 一起使用,它可以读取和数字化多达 200 页的 PDF 文档。

【讨论】:

确实,好消息!多页 TIFF(即传真)也 识别文本现已被弃用。阅读取代它并增加了相当多的功能:Upgrade guideRead API spec【参考方案3】:

有一个名为 Azure 表单识别器(目前为预览版 - 2019 年 11 月)的新认知服务 API,应该可以完成这项工作:

https://azure.microsoft.com/en-gb/services/cognitive-services/form-recognizer/

它可以处理你想要的文件格式:

格式必须是 JPG、PNG 或 PDF(文本或扫描)。嵌入文本的 PDF 最好,因为性格上没有错误的可能性 提取和定位。

https://docs.microsoft.com/en-us/azure/cognitive-services/form-recognizer/overview

这是官方表单识别器 API 文档的链接:

https://westus2.dev.cognitive.microsoft.com/docs/services/form-recognizer-api/operations/AnalyzeWithCustomModel

注意:

表单识别器目前有英文版,还有其他语言版本 可用性不断增长 (4.12.2019) 表单识别器可用于 以下 Azure 区域 (4.12.2019): 加拿大中部、北欧、西欧、英国南部、美国中部、美国东部、美国东部 2、美国中南部、美国西部 https://azure.microsoft.com/en-in/global-infrastructure/services/?products=cognitive-services

【讨论】:

PDF 中的一些限制:页数应少于 50 页,没有单选按钮或复选框,并且不支持复杂的表格。【参考方案4】:

抱歉,您必须将 PDF 页面分解为图像(JPG 和 PNG)。然后将图像发送到计算机视觉。将其分解也是一个好主意,这样您就不必对所有页面进行 OCR,只需对重要的页面进行 OCR。

【讨论】:

【参考方案5】:

有一个新的读取 API 可以处理 PDF https://docs.microsoft.com/en-us/azure/cognitive-services/computer-vision/concept-recognizing-text

Computer Vision’s Read API is Microsoft’s latest OCR technology that extracts
printed text (seven languages), handwritten text (English only), digits, and 
currency symbols from images and multi-page PDF documents.

读取 API 参考:https://westcentralus.dev.cognitive.microsoft.com/docs/services/computer-vision-v3-ga/operations/5d986960601faab4bf452005

它工作得很好,但还没有很多语言。

【讨论】:

【参考方案6】:

您可以使用 fitz 将 pdf 转换为每个页面的图像。

# import packages
import fitz
import numpy as np
import cv2

#set path to pdf
path2doc = <path to pdf>

#open pdf with fitz
doc = fitz.open(path2doc)

# determine number of pages
pagecount = doc.pageCount

# loop over all pages and convert to image (here jpeg)
for i in range(pagecount):
    page = doc[i]
    pix = page.getPixmap().getImageData(output='JPEG')
    jpg_as_np = np.frombuffer(pix, dtype=np.uint8)
    image = cv2.imdecode(jpg_as_np, flags=1)

完成后,您可以将它们发送到 API

【讨论】:

以上是关于Azure 计算机视觉 API - PDF 文件上的 OCR 到文本的主要内容,如果未能解决你的问题,请参考以下文章

json Azure计算机视觉API OpenAPI

Azure 认知服务 计算机视觉API - 读取图片中的文字 (OCR)

用Azure上Cognitive Service的Face API识别人脸

从零开始玩人工智能—机器视觉API—01

如何使用 React 将本地图像而不是 URL 发送到计算机视觉 API

Azure 计算机视觉:识别印刷文本