Распознавание изображений с Google Drive с помощью Google App Script - PullRequest
0 голосов
/ 13 июня 2018

Я реализовал следующий сценарий для распознавания одного и нескольких изображений с использованием URL-адреса изображения.

function doOCRALL() {
  var selected = SpreadsheetApp.getActiveSheet().getActiveRange().getValues().length;
  for (var i = 0; i < selected; i++) {
    var activeCol = SpreadsheetApp.getActiveSheet().getActiveCell().getColumn();
    var activeRow = SpreadsheetApp.getActiveSheet().getActiveCell().getRow();
    var valueURL = SpreadsheetApp.getActiveSheet().getRange(activeRow + i, activeCol).getValue();

    var image = UrlFetchApp.fetch(valueURL).getBlob();

    var file = {
      title: 'OCR File',
      mimeType: 'image/png'
    };

    // OCR is supported for PDF and image formats
    file = Drive.Files.insert(file, image, {ocr: true});
    var doc = DocumentApp.openByUrl(file.embedLink);
    var body = doc.getBody().getText();
    //Get link Doc that Generated
    SpreadsheetApp.getActiveSheet().getRange(activeRow + i, activeCol + 2).setValue(file.embedLink);
    //Get Content of Doc that Generated
    SpreadsheetApp.getActiveSheet().getRange(activeRow + i, activeCol + 1).setValue(body);

  }
}


function doOCR() {
  //
  var activeCol = SpreadsheetApp.getActiveSheet().getActiveCell().getColumn();
  var activeRow = SpreadsheetApp.getActiveSheet().getActiveCell().getRow();

  var valueURL = SpreadsheetApp.getActiveSheet().getRange(activeRow, activeCol).getValue();

  var image = UrlFetchApp.fetch(valueURL).getBlob();

  var file = {
    title: 'OCR File',
    mimeType: 'image/png'
  };

  // OCR is supported for PDF and image formats
  file = Drive.Files.insert(file, image, {ocr: true});
  var doc = DocumentApp.openByUrl(file.embedLink);
  var body = doc.getBody().getText();


  // Print the Google Document URL in the console
  Logger.log("body: %s", body);
  Logger.log("File URL: %s", file.embedLink);
  //Get link Doc that Generated
  SpreadsheetApp.getActiveSheet().getRange(activeRow, activeCol + 2).setValue(file.embedLink);
  //Get Content of Doc that Generated
  SpreadsheetApp.getActiveSheet().getRange(activeRow, activeCol + 1).setValue(body);
}



function onOpen() {
  var ui = SpreadsheetApp.getUi();
  // Or DocumentApp or FormApp.
  ui.createMenu('OCR Tools')
      .addItem('Extract Cell', 'doOCR')
      .addItem('Extract All Cell', 'doOCRALL')
      .addSeparator()
      .addSubMenu(ui.createMenu('About US')
          .addItem('Infomation', 'menuItem2'))
      .addToUi();
}

function menuItem2() {
  SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
     .alert('AIO Team');
}

Когда я предоставляю URL-адрес изображения для любого изображения, оно работает.Но если я загружаю одно и то же изображение на свой диск, а затем предоставляю URL-адрес изображения с диска, это дает мне только «Вход в главное меню».Для других образов дисков это дает тот же текст.Заранее спасибо.

1 Ответ

0 голосов
/ 14 июня 2018

Если контент уже находится на диске, вам не нужно получать ссылку на него - просто укажите идентификатор файла (который можно получить по ссылке на него).

Как только у вас есть идентификатор файла, вы можете просто скопировать его и использовать оптимальные аргументы для активации OCR.Полный список опций, конечно же, доступен на странице API Drive REST: https://developers.google.com/drive/api/v2/reference/files/copy#parameters Я рекомендую вам также ознакомиться с рекомендациями, такими как fields спецификация (которая является требованием более поздней версии Drive API).).

Эта функция принимает идентификатор входного файла накопителя, который вы получили откуда-то, и значение true-y, чтобы установить опцию «использовать OCR».Очевидные предположения заключаются в том, что у вас есть разрешение, идентификатор действителен, вы включили расширенную службу и Drive API в облачной консоли и т. Д.

function getIdOfCopyOfDriveFile(fileId, useOcr) {
  const options = {
    fields: "choose the metadata fields to return in the response e.g. 'id,title,parents'"
  };
  const existingMetaData = Drive.Files.get(fileId, options);

  options.ocr = !!useOcr;
  existingMetaData.title += " (copied with" + (options.ocr ? " " : "out ") + "ocr)";
  // We could do other modifications of fields we requested before
  // copying, like changing the parents array to move the new file.
  const newFileMetaData = Drive.Files.copy(existingMetaData, fileId, options);
  return newFileMetaData.id;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...