はじめに
画像の中にある文字をテキストとして抽出しするOCR機能についての続きです。
今回は、OCRでテキスト化した情報をもとにEvernoteのノートを自動作成する処理について紹介します。
という事で、今日の課題はこれです。
今日の課題
- 画像中の文字をテキストとして抽出した結果からEvernoteのノートを自動的に作りたい。
では、どのように実現するのかを見ていきましょう。
Evernoteのノート作成について
EvernoteのPersonal版と、Professional版では、Evernoteにメールを送ることで、メールの内容を元にノートを追加できる機能があります。
この機能を使うことで、抽出したテキストをEvernoteに追加します。
また、Evernoteにメールを送る際には、以下のように指定することで格納するノートブックとタグを指定することができます。
件名に「@ノートブック」と指定することで格納するノートブックを指定できます。
件名に「#タグ名」と指定することでタグを指定できます。
指定するノートブックとタグは存在することが条件です。
例えばメールの件名として以下の脳に指定すると、「アイディア」というノートブックに、「スマホアプリ」というタグをつけてノートが作られます。
メール件名サンプル
件名:今日の思い付き @アイディア #スマホアプリ
この機能を利用して、前回作成したコードを修正します。
更に詳細については以下のEvernoteのヘルプを確認ください。
Evernoteへの送信先メールアドレスは、以下のようにアカウント情報から確認することができます。
OCR処理の実装
全てのコード
前回同様Google Driveの「<フォルダIDを指定してください>」で指定するフォルダを監視し、フォルダ内の画像全てからテキストを抽出する処理を考えます。
全てのコードは以下の通りです。
// OCRテスト(3)
// ・Drive APIを使用してOCRを行う
// ・OCR結果を元画像含めて指定メールアドレスに送信する
// ・Evernoteにメールを送信し指定したノートブックに指定のタグでノートを作る
// マイドライブ>99_その他>tmp
const folderId = '<フォルダIDを指定してください>';
// メール送信先アドレス
const mailAddress = '<Evernoteのメールアドレスを指定してください>'; // Evernoteのメールアドレス
const evernoteBook = '@.[inbox]'; // 既存のノートブックを指定する
const evernoteTag = '#ocr'; // 既存のタグを指定する
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 ') + evernoteBook + ' ' + evernoteTag;
var blb = DriveApp.getFileById(fileId).getBlob();
var options = {
"attachments":blb,
};
MailApp.sendEmail(mailAddress, title, text, options);
// 元ファイル削除
Drive.Files.remove(fileId);
}
}
「<フォルダIDを指定してください>」の部分は、OCR対象の画像を保存するフォルダIDを指定します。
「<Evernoteのメールアドレスを指定してください>」の部分は、メールを送信することでノートを作れるEvernoteのメールアドレスを指定してください。
コードを実行する前に、サービスに「Drive API」を追加することを忘れないでね。
解説
OCRの処理は前回と同じです。Evernoteに追加する部分について解説します。
Evernote送信先設定
送信先アドレスと、追加したいノートブック及びタグを指定します。
ここで指定するノートブックとタグは存在する必要があります。
// メール送信先アドレス
const mailAddress = '<Evernoteのメールアドレスを指定してください>'; // Evernoteのメールアドレス
const evernoteBook = '@.[inbox]'; // 既存のノートブックを指定する
const evernoteTag = '#ocr'; // 既存のタグを指定する
メール件名
件名に、「yyyy/MM/dd hh:mm」で指定するノート作成日に加えて、追加先のノートブックとタグを指定します。
var title = Utilities.formatDate(now, 'Asia/Tokyo', 'yyyy/MM/dd hh:mm ') + evernoteBook + ' ' + evernoteTag;
取得したテキストと元画像をメール送信
元画像も添付してEvernoteに送信することで、元画像と抽出したテキストの両方が一つのノートに記録されます。
// メール送信
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);
トリガー設定
最後に、トリガーで5分おきに特定フォルダを監視するように設定します。
最小インターバルは1分ですが、そんなに急がなくても良いので5分としておきましょう。
実行
以下の画像を使ってテキストが得られるか確認してみます。
以下の画像をOCR対象画像を保存Google Driveのフォルダに保存します。
すると、5分ごとのトリガーにより処理が起動してOCRが行われ、取得したテキストと元画像がEvernoteにメールで送られます。
結果は以下の通りです。
テキストが本文に、元画像が添付ファイルとしてメールで送られたことがわかります。
また、ノートブックとタグが指定した内容になっていることもわかります。
まとめ
いかがでしたでしょうか。
Google Driveの特定の場所に文字認識させたい画像を保存すると、結果がEvernoteに追加される仕組みができました。
研究や調査内容に沿って写真を撮り、Google Driveの指定フォルダに保存すると、文字を抽出した結果をEvernoteに自動追加できるようになります。後は、Evernote側で情報整理をして必要な形にまとめればよいというルーチンを組むことができるようになります。
あるいは、電子書籍を読んでいて、気になるフレーズを見つけたらスクリーンショットを撮り、Google Driveに保存することでEvernoteに文字を抽出した結果のノートを追加してくれます。後で気になるフレーズだけを取り出して、まとめることで入力の手間がなくなりますね。
想像力を膨らませて考えると、いろいろなシーンで使えるかと思います。
次回は、Lineとの連携について紹介します。
では、今日もよい一日を。