来自网址列表的ocr图像,并将结果存储在电子表格中

时间:2017-02-10 06:10:30

标签: google-apps-script google-drive-api ocr

您好我有一个包含数字的图片网址列表,我想要对其进行OCR并将结果存储在Google电子表格中 我发现这些谷歌脚本是ocr图像

1- https://gist.github.com/tagplus5/07dde5ca61fe8f42045d

2- https://ctrlq.org/code/20128-extract-text-from-image-ocr

但我不知道如何创建请求变量,所以我用URL变量替换了请求变量,如下所示:

function doGet(url) {
  if (url != undefined && url != "") {
    var imageBlob = UrlFetchApp.fetch(url).getBlob();
    var resource = {
      title: imageBlob.getName(),
      mimeType: imageBlob.getContentType()
    };
    var options = {
      ocr: true
    };

    var docFile = Drive.Files.insert(resource, imageBlob, options);
    var doc = DocumentApp.openById(docFile.id);
    var text = doc.getBody().getText().replace("\n", "");
    Drive.Files.remove(docFile.id);
    return ContentService.createTextOutput(text);
  }
  else {
    return ContentService.createTextOutput("request error");
  }
}
问题是,当我调用像doGet(B1)这样的函数时,其中B1包含google电子表格中图像的url来执行OCR并在单元格C1中获取结果文本它表示Drive变量未定义

希望很快得到回答

2 个答案:

答案 0 :(得分:0)

代码没问题。 V2 API仍然存在。见this documentation。您所需要的只是启用高级驱动器服务。在脚本编辑器中,选择资源>高级Google服务并启用云端硬盘(仅可选择 v2 )。然后你的代码实际上有效。

答案 1 :(得分:0)

好的,我修改了你的脚本并制作了一张表来展示一个例子。工作表是here(任何人都可以编辑),其脚本如下。应启用Advanced Drive Service的Drive API(v2)来运行此脚本。

function onOpen() {
  var ss = SpreadsheetApp.getActive();
  var menuItems = [
    {name: 'RUN', functionName: 'doGet2'}
  ];

  ss.addMenu('OCR', menuItems);
}    


function doGet2() {
  var ROW_START = 3;
  var URL_COL = 1;
  var TEXT_COL = 2;

  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getActiveSheet();

  var urls = sheet.getRange(ROW_START,URL_COL, sheet.getLastRow()-ROW_START+1,1).getValues();
  var texts = [];
  for(var i=0; i<urls.length; i++) {
    var url = urls[i];
    if(url != undefined && url != "") {
      var imageBlob = UrlFetchApp.fetch(url).getBlob();
      var resource = {
        title: imageBlob.getName(),
        mimeType: imageBlob.getContentType()
      };
      var options = {
        ocr: true
      };

      var docFile = Drive.Files.insert(resource, imageBlob, options);
      var doc = DocumentApp.openById(docFile.id);
      var text = doc.getBody().getText().replace("\n", "");

      texts.push([text]);
      Drive.Files.remove(docFile.id);
    }
    else {
      texts.push("request error");
    }
  }
  sheet.getRange(ROW_START,TEXT_COL, urls.length,1).setValues(texts);
}