はじめに
画像の中にある文字をテキストとして抽出しする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を起動する必要がなくなったので、少し汎用性が高くなったと思います。これで、通常使う分には十分になったかと思います。
次回は、更に汎用性を上げようと思います。
では、今日もよい一日を。