Google App Script データ管理

【GAS】画像のテキスト抽出ーOCR(2) メール送信実装

はじめに

画像の中にある文字をテキストとして抽出しするOCR機能についての続きです。

今回は、OCRでテキスト化した情報をメールで送信してみましょう。

という事で、今日の課題はこれです。

今日の課題

  • 画像中の文字をテキストとして抽出した結果をメールで送信したい

では、どのように実現するのかを見ていきましょう。

Google Apps Scriptのメール送信について

ただメールを送信するだけであれば、以下のようにMailApp.sendMail()を呼び出すだけで実現できます。

var mailAddress = 'test@test.com';  // 宛先メールアドレス
var title = 'test mail';            // 件名
var text = 'これはテストです。';      // メール本文
MailApp.sendEmail(mailAddress, title, text);

今回は、OCRを行う元画像を添付ファイルとして送信します。

この場合は、元画像ファイルをBlobデータとしてオプションを指定してsendEmail()関数に渡すことで実現できます。

var mailAddress = 'test@test.com';
var title = 'test mail';
var text = 'これはテストです。';
var fileId = file.getId();
var blb = DriveApp.getFileById(fileId).getBlob();
var options = {
  "attachments":blb,
  };
MailApp.sendEmail(mailAddress, title, text, options);

OCR処理の実装

全てのコード

Google Driveの特定フォルダの中にある画像を全てOCRにかける処理を考えます。

全てのコードは以下の通りです。

// OCRテスト(2)
// ・Drive APIを使用してOCRを行う
// ・OCR結果を元画像含めて指定メールアドレスに送信する
//

// 画像保存場所
const folderId = '<フォルダIDを指定してください>';

// メール送信先アドレス
const mailAddress = 'test@test.com'

function ocrMailSend() {
  var folder = DriveApp.getFolderById(folderId);
  var files = folder.getFiles();

  while(files.hasNext()){
    var file = files.next();
    Logger.log(file);
    
    // 一時ファイル名
    var resource = {
      title: "tmp"
    };

    // OCR設定
    var option = {
      "ocr": true,        // OCRを行う
      "ocrLanguage": "ja",// OCRの言語設定
    }

    // ファイルコピー時にOCR処理を行う
    var fileId = file.getId();
    var image = Drive.Files.copy(resource, fileId, option);   // ファイルコピー(OCR処理実施)
    var text = DocumentApp.openById(image.id).getBody().getText();  // OCRテキスト取得
    Drive.Files.remove(image.id);  // 一時ファイル削除

    // メール送信
    var now = new Date();
    var title = Utilities.formatDate(now, 'Asia/Tokyo', 'yyyy/MM/dd hh:mm ');
    var blb = DriveApp.getFileById(fileId).getBlob();
    var options = {
      "attachments":blb,
      };
    MailApp.sendEmail(mailAddress, title, text, options);

    // 元ファイル削除
    Drive.Files.remove(fileId);
  }
}

「<フォルダIDを指定してください>」の部分は、OCR対象の画像を保存するフォルダIDを指定します。

コードを実行する前に、サービスに「Drive API」を追加することを忘れないでね。

解説

OCRの処理は前回と同じです。取得したtextをMailApp.sendEmail()の本文に指定します。

OCR設定

    // OCR設定
    var option = {
      "ocr": true,        // OCRを行う
      "ocrLanguage": "ja",// OCRの言語設定
    }

OCR実行(一時ファイルにコピー)

    // 一時ファイル名
    var resource = {
      title: "tmp"
    };

    var fileId = file.getId();
    var image = Drive.Files.copy(resource, fileId, option);   // ファイルコピー(OCR処理実施)

OCR結果テキストの取得

    var text = DocumentApp.openById(image.id).getBody().getText();  // OCRテキスト取得

取得したテキストと元画像をメール送信

    // メール送信
    var now = new Date();
    var title = Utilities.formatDate(now, 'Asia/Tokyo', 'yyyy/MM/dd hh:mm ');
    var blb = DriveApp.getFileById(fileId).getBlob();
    var options = {
      "attachments":blb,
      };
    MailApp.sendEmail(mailAddress, title, text, options);

元画像削除

OCRを行ったら元画像は削除します。

    // 元ファイル削除
    Drive.Files.remove(fileId);

トリガー設定

特定フォルダを監視し、定期的にこのスクリプトを実行させることで、OCRを実行させたいときにいちいちGoogle Apps Scriptを起動しなくても良いようになります。

最小インターバルは1分ですが、そんなに急がなくても良いので5分としておきましょう。

実行

以下の画像を使ってテキストが得られるか確認してみます。

以下の画像をOCR対象画像を保存Google Driveのフォルダに保存します。

すると、5分ごとのトリガーにより処理が起動してOCRが行われ、取得したテキストと元画像がメールで送られます。

結果は以下の通りです。

テキストが本文に、元画像が添付ファイルとしてメールで送られたことがわかります。

まとめ

いかがでしたでしょうか。

Google Driveの特定の場所に文字認識させたい画像を保存すると、結果がメールで送られてくる仕組みができました。

例えば、PCからGoogle Driveの指定フォルダに画像ファイルをコピーすると、OCRの結果をメールで得ることができるといった使い方ができるようになります。

これで文字認識させたいときにいつもGoogle Apps Scriptを起動する必要がなくなったので、少し汎用性が高くなったと思います。これで、通常使う分には十分になったかと思います。

次回は、更に汎用性を上げようと思います。

では、今日もよい一日を。

-Google App Script, データ管理
-, ,