Evernote Google App Script データ管理

【GAS】画像のテキスト抽出ーOCR(3) Evernote連携

はじめに

画像の中にある文字をテキストとして抽出しする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との連携について紹介します。

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

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