什么参数对 Node js 的 Google Document AI 客户端库无效?

Posted

技术标签:

【中文标题】什么参数对 Node js 的 Google Document AI 客户端库无效?【英文标题】:What argument is invalid for Google Document AI client library for Node js? 【发布时间】:2021-03-01 10:58:49 【问题描述】:

我正在尝试使用 Node js 应用从 Google 运行 Document OCR。 所以我使用了Node js的客户端库@google-cloud/documentai

我做了所有像文档sample中一样的事情

这是我的代码

const projectId = '*******';
const location = 'eu'; // Format is 'us' or 'eu'
const processor = '******'; // Create processor in Cloud Console
const keyFilename = './secret/******.json';

const  DocumentProcessorServiceClient  = require('@google-cloud/documentai').v1beta3;

const client = new DocumentProcessorServiceClient(projectId, keyFilename);

async function start(encodedImage) 

  console.log("Google AI Started")
  const name = `projects/$projectId/locations/$location/processors/$processor`;

  const request = 
    name,
    document: 
      content: encodedImage,
      mimeType: 'application/pdf',
    ,
  

  try 
    const [result] = await client.processDocument(request);

    const  document  = result;

    const  text  = document;

    const getText = textAnchor => 
      if (!textAnchor.textSegments || textAnchor.textSegments.length === 0) 
        return '';
      

      // First shard in document doesn't have startIndex property
      const startIndex = textAnchor.textSegments[0].startIndex || 0;
      const endIndex = textAnchor.textSegments[0].endIndex;

      return text.substring(startIndex, endIndex);
    ;

    const [page1] = document;
    const  paragraphs  = page1;

    for (const paragraph of paragraphs) 
      const paragraphText = getText(paragraph.layout.textAnchor);
      console.log(`Paragraph text:\n$paragraphText`);
    
    return paragraphs;
  
  catch (error) 
    console.error(error);
  


module.exports = 
  start

图片编码在这里

const start: google = require('./document-ai/index')

if (mimeType === 'application/pdf') 
        pdf = true;
        encoded = Buffer.from(file).toString('base64');
      

await google(encoded);

结果我得到这个错误

Google AI Started
Error: 3 INVALID_ARGUMENT: Request contains an invalid argument.
    at Object.callErrorFromStatus (C:\Users\NIKIGAN\WebstormProjects\papper-project\server\node_modules\google-gax\node_modules\@grpc\grpc-js\build\src\call.js:31:26)
    at Object.onReceiveStatus (C:\Users\NIKIGAN\WebstormProjects\papper-project\server\node_modules\google-gax\node_modules\@grpc\grpc-js\build\src\client.js:176:52)
    at Object.onReceiveStatus (C:\Users\NIKIGAN\WebstormProjects\papper-project\server\node_modules\google-gax\node_modules\@grpc\grpc-js\build\src\client-interceptors.js:342:141)
    at Object.onReceiveStatus (C:\Users\NIKIGAN\WebstormProjects\papper-project\server\node_modules\google-gax\node_modules\@grpc\grpc-js\build\src\client-interceptors.js:305:181)
    at C:\Users\NIKIGAN\WebstormProjects\papper-project\server\node_modules\google-gax\node_modules\@grpc\grpc-js\build\src\call-stream.js:124:78
    at processTicksAndRejections (internal/process/task_queues.js:79:11) 
  code: 3,
  details: 'Request contains an invalid argument.',
  metadata: Metadata 
    internalRepr: Map  'grpc-server-stats-bin' => [Array] ,
    options: 
  ,
  note: 'Exception occurred in retry method that was not classified as transient'

我的请求中有哪些无效参数?

环境详情

操作系统:Windows 10 Node.js 版本:12.18.3 npm 版本:6.14.8 @google-cloud/documentai 版本:2.2.1

【问题讨论】:

您使用的是 v1beta3 API 版本吗?另外,目标文档文件有多大(以页数计)?根据documentation,对于小文件(最好少于 5 页,最多 10 页)您可以使用在线处理,这是您正在使用的代码。但是,对于较大的文件,您需要使用 “离线” 处理。 是的,我使用的是 v1beta3,我的文档只有一页。 您的代码与您共享的链接略有不同。由于错误与无效参数有关,您可以使用第 46 行 const encodedImage = Buffer.from(imageFile).toString('base64'); 中的图像编码代替吗? 【参考方案1】:

我也为此苦苦挣扎,结果证明解决方案非常简单:当您的位置不是"us" 时,您必须设置参数apiEndpoint

这是位置"eu"的示例:

const client = new DocumentProcessorServiceClient( 
  keyFilename, 
  apiEndpoint: 'eu-documentai.googleapis.com' 
);

更多信息在这里:GitHub: googleapis / nodejs-document-ai

【讨论】:

以上是关于什么参数对 Node js 的 Google Document AI 客户端库无效?的主要内容,如果未能解决你的问题,请参考以下文章

Google的App引擎添加了对Node.js的支持

是否有任何 Node.js 客户端库可以对 Twitter、Facebook、Google、LinkedIn 等进行 OAuth 和 OAuth2 API 调用?

多个用户如何在 Node.js 中使用 Gmail 别名发送电子邮件,而无需 Google 开发人员控制台对每个用户进行用户身份验证?

Google Adwords 和 Node.js:库还是访问 API 的不同方式?

服务帐户是在 node.js 中查询 google bigquery 的正确凭据吗?

有没有办法取消 node.js 对 require 模块的缓存