Azure Computer Vision API - OCR 到 PDF 文件上的文本

Azure Computer Vision API - OCR to Text on PDF files

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

我已经测试过了,它告诉我 PDF 是 "InvalidImageFormat"、"Input data is not a valid image"。当我在 PNG 上测试它时,它工作得很好。

是否可以对 PDF 图像使用 API,或者是否可以结合使用 Azure API 来生成 PDF > PNG > 文本?

编辑

由于回答附加服务已经可用,虽然我没有亲自尝试其中的一些,但它们可能适合这个目的。

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

并在未来的某个时候正式发布。 https://aws.amazon.com/textract/

原答案

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

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

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

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

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

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

Microsoft Azure 最近提供的最新 OCR 服务称为 Recognize Text, which significantly outperforms the previous OCR engine. Recognize Text can now be used with Read,它可以读取和数字化多达 200 页的 PDF 文档。

有一个名为 Azure Form Recognizer 的新认知服务 API(目前处于预览状态 - 2019 年 11 月)可用,应该可以完成这项工作:

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

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

Format must be JPG, PNG, or PDF (text or scanned). Text-embedded PDFs are best because there's no possibility of error in character extraction and location.

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

这是 link 官方表单识别器 API 文档:

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

注:

有一个新的阅读 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

它运行良好,但还没有很多语言。

您可以使用 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