Какой аргумент недопустим для клиентской библиотеки Google Document AI для Node js?

Я пытаюсь запустить Document OCR из Google с помощью приложения Node js. Поэтому я использовал клиентскую библиотеку для Node js @google-cloud/documentai

Я сделал все как в документации образец < / а>

Вот мой код

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

person nikigan    schedule 18.11.2020    source источник
comment
Вы используете версию API v1beta3? Кроме того, насколько велик целевой файл документа (в количестве страниц)? Согласно документации, для небольших файлов (в идеале менее 5 страниц, максимум из 10) вы можете использовать онлайн-обработку, то есть код, который вы используете. Однако для больших файлов необходимо использовать автономную обработку.   -  person Alexandre Moraes    schedule 19.11.2020
comment
Да, я использую v1beta3, мой документ имеет длину всего одну страницу.   -  person nikigan    schedule 20.11.2020
comment
Ваш код немного отличается от ссылки, которой вы поделились. Поскольку ошибка связана с недопустимым аргументом, не могли бы вы вместо этого использовать кодирование изображения, например, в строке 46 const encodedImage = Buffer.from(imageFile).toString('base64');?   -  person Alexandre Moraes    schedule 20.11.2020


Ответы (1)


Я тоже боролся с этим, и решение оказалось довольно простым: вы должны установить параметр apiEndpoint, когда ваше местоположение не "us".

Вот пример местоположения "eu":

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

Дополнительная информация здесь: noreferred_processor_service_client"> googleapis_processor_service_client_client_processor_service_client " nodejs-document-ai

person Julius B    schedule 23.03.2021