您好我有一个包含数字的图片网址列表,我想要对其进行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变量未定义
希望很快得到回答
答案 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);
}