🎞️
【GAS】フォルダ内の複数の画像ファイルに一括でOCRをかけてシートに書き出す
事前準備
-
OCR 用のフォルダを作成して出力用のシートを作成する
-
GAS コードエディタから Drive API を有効化(左メニューの
サービス
から探して追加)
コード
フォルダIDは URL の https://drive.google.com/drive/folders/
に続く部分、シートIDは https://docs.google.com/spreadsheets/d/
と /edit#gid=0
の間の部分です。
/*
フォルダ内の画像に対してOCRをかけてシートに出力
*/
const FOLDER_ID = "(ここはフォルダIDを入れる)";
const SHEET_ID = "(ここはシートIDを入れる)";
const SHEET_OBJ = SpreadsheetApp.openById(SHEET_ID);
const LOG_SHEET = SHEET_OBJ.getSheets()[0];
const runOCR = () => {
const resource = {
title: "temp"
};
const option = {
"ocr": true,
"ocrLanguage": "ja",
}
const files = DriveApp.getFolderById(FOLDER_ID).getFiles();
let trial = 100; // 念のための上限
while (files.hasNext()) {
if (trial < 1) { break }
const file = files.next();
const name = file.getName();
if (name.endsWith(".png") || name.endsWith(".jpeg") || name.endsWith(".jpg")) {
console.log(`converting file '${name}'...`)
const fileId = file.getId();
const image = Drive.Files.copy(resource, fileId, option)
const content = DocumentApp.openById(image.id).getBody().getText();
Drive.Files.remove(image.id)
LOG_SHEET.appendRow([new Date(), name, fileId, content]);
}
trial -= 1;
}
}
実行例
このような画像化した表から数値を起こしたいときに、画像全体に対して OCR を実行してしまうと、罫線が文字として認識されたりレイアウトを再現しようとスペースが入りまくったりして余計に面倒なことになります。
そんなときは必要な列ごとに OCR 処理すると精度が上がります。
各列ごとの短冊状になった画像を OCR 用のフォルダにアップロードし、
コードエディタで runOCR
を選択した状態で 実行
ボタンを押すか ctrl+r
で関数を実行すると、
結果がシートに書き出されます(実行時タイムスタンプ、ファイル名、ファイルID、OCR 結果の4列)。
Discussion