GASで複数の画像をOCR処理してテキストファイルに保存するスクリプト

Google Apps Script コンピュータ
Google Apps Script

複数の画像ファイルを開く作業を自動化するスクリプトを書いてみました。

Googleドライブのフォルダに複数の画像ファイルをアップロードしスクリプトを実行。結果がテキストファイル(OCR_日時.txt)で保存されます。

スクリプトを実行するために、Apps Scriptのメニュー「サービス」から「Drive」を追加する必要がありす。
また、初回スクリプトを実行する際実行権限についての問い合わせがありますので応答する必要がありました。

スクリプト内でフォルダーIDを指定する場所がありますが、フォルダIDはGoogleドライブでフォルダを開いた際のURLの一番左部分(ローカルファイルのパスで言うところファイル名、例のxxxxx)がフォルダIDになります。

https://drive.google.com/drive/folders/xxxxx
function myFolderOCR() {
  const ocrFolderID = 'OCRする画像ファイルが保存されたフォルダID';

  // 画像ファイルの一覧を取得
  let files = DriveApp.getFolderById(ocrFolderID).getFiles();
 
  // OCRの設定
  let option = {
    'ocr': true,
    'ocrLanguage': 'ja',
  }

  // 結果のテキストを格納する変数
  let result = '';

  // 画像ファイル処理ループ
  while(files.hasNext()){
    let file = files.next();

    subject = file.getName(); // 件名
    let resource = { title: subject };
    
    let image = Drive.Files.copy(resource, file.getId(), option);
    let doc = DocumentApp.openById(image.id);
    let text = doc.getBody().getText();

    // ドキュメントファイルの削除
    Drive.Files.remove(doc.getId());
    result = result + text
  }

  // 結果を保存
  const textFolderID = 'テキストファイルを出力するフォルダID';

  // フォルダーオブジェクトの取得
  let folder = DriveApp.getFolderById(textFolderID);

  // 日時からファイル名を生成
  let date = new Date();
  let fileName = "ocr_" + Utilities.formatDate( date, 'Asia/Tokyo', 'yyyyMMddhhmmss') + ".txt";


  // テキストファイルに保存
  let contentType = 'text/plain'; // MIME
  let charSet = 'UTF8'; // 文字コード
  let blob = Utilities.newBlob("", contentType, fileName).setDataFromString(result, charSet);
  folder.createFile(blob);
  
  console.log(fileName);
}  

始めてGoogle Apps Script(GAS)に触れてみました。言語としてはJavaScriptだと思うのですが、操作する対象がGoogleのDocsやSheetsなのでまるで初見の言語に見えます。

OCRというと個人的には有償のアプリやサービスを使うイメージがありますが、それを無料で使えてかつバッチ処理のスクリプトを組むことが出来たりと、至れり尽くせりのサービスだと思います。

コメント