【问题标题】:Document AI OCR processor returning error 3 Unsupported input file format randomlyDocument AI OCR 处理器随机返回错误 3 Unsupported input file format
【发布时间】:2022-12-15 01:51:41
【问题描述】:

我正在为 OCR 处理器使用 Google Cloud Document AI,并且随机遇到代码 3“不支持的输入文件格式”。错误。

我可以提交同一个文件 5 次,而这个错误可能会在 5 次中出现 1-2 次。其他时候,处理器完全按预期工作。

我正在使用在线处理器端点,并且正在使用 PDFBox 将较大的 pdf 分成 10 个块。我已经进行了检查以验证发送到 Document AI 的 pdf 是否出错或没有损坏或任何东西。我已尽我所能确保我这边没有任何问题,一切都指向 Document AI 上的某些内容。我已经研究了这个错误,但没有发现可能发生的事情。有任何想法吗?

编辑: 一些附加信息……这是我用来将 PDF 分成 10 页的组的 PDFBox 代码:

        File file = new File(doc);
        PDDocument document = Loader.loadPDF(file);
        Splitter splitter = new Splitter();

        splitter.setSplitAtPage(pageSplits);
        List<PDDocument> splittedList = splitter.split(document);

        List<String> base64List = new ArrayList<String>();
        for (PDDocument listDoc : splittedList) {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            listDoc.save(baos);
            String base64String = Base64.getEncoder().encodeToString(baos.toByteArray());
            base64List.add(base64String);
            listDoc.close();
        }

        System.out.println("{\"pages\":" + document.getNumberOfPages() + ", \"pdfs\":[" + wrapWithQuotesAndJoin(base64List)+ "]}");

        document.close();

我从来没有对它产生的输出有任何问题。就像我上面说的,每当我从任何输出数组中收到“不支持的输入文件格式”错误时,我都会将 base64 转换并保存到磁盘以检查是否损坏,并且文件永远不会损坏。

我发送到 Document AI 的代码:

const location = 'us';
...
const name = `projects/${projectId}/locations/${location}/processors/${processorId}`;
const keys = require('./google-service-account-credentials.json');
// Instantiates a client
const client = new DocumentProcessorServiceClient({
  authClient: new JWT({
    email: keys.client_email,
    key: keys.private_key,
    scopes: ['https://www.googleapis.com/auth/cloud-platform'],
  })
});

...
const output = await exec('java -jar ./docSplitter.jar '+ '"'+filePath.replace(/\&/g, "\\$&")+'"', {maxBuffer: 1000000000}); // 1GB buffer
let pages = JSON.parse(output.stdout);
const numSplits = Math.ceil(pages.pages / 10);
... 
  
for(let i=0; i<numSplits; i++) {
  const request = {
    name,
    rawDocument: {
      content: output.pdfs[i],
      mimeType: 'application/pdf',
    },
  };
  try {
    const [result] = await client.processDocument(request);
    console.log("processDocument complete "+i)
  }
  catch(e) {
    // THIS IS WHERE THE ERROR IS BEING CAUGHT
    // THE CODE BELOW SAVES THE 'FAILED' CHUNK AND IS NEVER CORRUPT
    fs.writeFileSync("failedChunk.pdf", json.pdfs[i], 'base64');
  }
}

【问题讨论】:

  • 你能分享你使用的代码 sn-p 吗?拆分可能会增加内容损坏的风险。也许尝试另一个图书馆来拆分 pdf 或考虑发送批量请求,如果是一个文档,因为它一次支持 200 页。
  • 我可以为此请求一个示例文件吗?您也可以为此提供复制步骤吗? @Yannick 提到的 Python 客户端库和代码 sn-ps。
  • 我实际上也遇到过几次这个问题。您能否提供您用于发送文档和示例文件的代码?如果您有操作 ID,那也会有所帮助。
  • @HoltSkinner 我添加了拆分代码和提交代码的代码示例。我无法提供 pdf 示例,因为文档不是公开的,但我使用的文件是 3145 页。

标签: google-cloud-platform cloud-document-ai


【解决方案1】:

我已与产品开发团队确认,OCR 和表单解析器的 Release Candidate 处理器版本偶尔会出现此行为。但这是一个暂时性问题,可以通过重新调用 API 来解决。

建议对任何生产用例使用稳定处理器版本。

我们正在努力提高错误消息的清晰度,这个不稳定的Unsupported file type 是我们正在解决的误导性消息。

【讨论】:

    猜你喜欢
    • 2021-11-22
    • 2018-11-11
    • 2022-11-10
    • 2018-12-11
    • 1970-01-01
    • 2020-11-20
    • 2020-08-28
    • 1970-01-01
    • 2014-01-21
    相关资源
    最近更新 更多