GASで画像ファイルをまとめてOCR処理しテキストを抽出する方法

IT・プログラミング

この記事では、Google Apps Scriptを利用して、Google Drive内の画像ファイルにOCRを適用し、テキストを抽出する方法を説明します。
特に、手書きや印刷された文書が含まれる画像ファイルが多く、これらを自動的にテキスト化することで、内容の検索や分析を効率的に行うことが可能になります。

Google Apps Scriptの準備

まず、Google Apps Scriptの新しいプロジェクトを作成します。Google Driveにアクセスし、新規 > Google Apps Script で新しいプロジェクトを作成します。

Google Driveから画像ファイルを取得

Google Apps Scriptを使って、Google Drive上の特定のフォルダから画像ファイルを取得するためのコードを記述します。画像ファイルのタイプとしてJPEGやPNGを指定します。

function processImages() {
  var folderId = 'あなたのフォルダID';  // 対象のフォルダIDを指定
  var folder = DriveApp.getFolderById(folderId);
  var images = folder.getFilesByType('image/jpeg');  // JPEG画像を取得(PNGも追加可能)

  var outputText = '';  // テキストデータを格納する変数

  while (images.hasNext()) {
    var image = images.next();
    var imageName = image.getName();

    // OCR処理を実行
    var docText = ocrImage(image);
    outputText += 'ファイル名: ' + imageName + '\n' + docText + '\n\n';

    // 処理後の画像を削除または他の操作を実施する場合
    // image.setTrashed(true); // 画像をゴミ箱に移動
  }

  // 最終的に抽出したテキストを1つのファイルとして保存
  var textFile = folder.createFile('extracted_text.txt', outputText, MimeType.PLAIN_TEXT);
  Logger.log('OCR処理が完了しました。出力ファイル: ' + textFile.getUrl());
}

OCR処理の実行

OCR処理を行うには、Google Drive APIを使って画像をGoogleドキュメントに変換します。以下の関数で画像ファイルをOCR処理します。

function ocrImage(image) {
  var docName = image.getName().split('.')[0];  // ファイル名を取得

  var requestBody = {
    title: docName, // 変換後のGoogleドキュメント名
    mimeType: 'image/jpeg'
  };

  // OCR処理を実行(画像をGoogleドキュメントに変換)
  try {
    var newDoc = Drive.Files.insert(requestBody, image, { ocr: true });

    // 変換後のGoogleドキュメントを開き、テキストを取得
    var doc = DocumentApp.openById(newDoc.id);
    var text = doc.getBody().getText();

    // ドキュメントをゴミ箱に移動してクリーンアップ
    DriveApp.getFileById(newDoc.id).setTrashed(true);

    return text;
  } catch (e) {
    Logger.log('OCR処理中にエラーが発生しました: ' + e.message);
    return '';
  }
}

Drive APIを使います。
AppScriptのサービスからDrive APIを選択し、v2を有効にしてください。
(v3では動きません)

4. OCRのレート制限を避けるためのインターバル

Google APIのレート制限に引っかからないように、OCRリクエスト間に適切な間隔を空ける必要があります。Utilities.sleep() を使用して、リクエスト間に遅延を挿入することができます。例えば、1秒間隔でOCR処理を行う場合は以下のようにします。

Utilities.sleep(1000);  // 1秒待機

これを画像処理のループ内に挿入することで、過剰なリクエストを防ぐことができます。

抽出したテキストをファイルに保存

最後に、OCRで抽出したテキストを1つのテキストファイルにまとめて保存します。Google Drive APIを使って、生成したテキストをファイルとして保存します。

var textFile = folder.createFile('extracted_text.txt', outputText, MimeType.PLAIN_TEXT);
Logger.log('OCR処理が完了しました。出力ファイル: ' + textFile.getUrl());

まとめ

このスクリプトでは、指定したGoogle Driveのフォルダ内にあるJPEG画像を順次OCR処理し、抽出したテキストを1つのファイルにまとめて出力します。Drive.Files.insert() を使って画像をGoogleドキュメントに変換し、その後ドキュメントからテキストを抽出します。レート制限を避けるために、各OCR処理の間に待機時間を入れることを忘れないようにしましょう。

タイトルとURLをコピーしました