見出し画像

【Google App Script】GASのOCRがハンパなさすぎるので今更ながら布教したい

こんにちは。久しぶりの記事です。
一貫性のない記事の連続、すみませんねー。

本日はGAS(Google App Script)について記事を書きたいと思います。

参考にさせていただいたQiitaの記事

今回はこの記事を参考にOCRを実行してみましたが、あまりにも凄すぎたので実践編ということでやってみた!を解説させていただきたいと思います。

codeの引用と内容の引用を僭越さながらさせていただきます。

GoogleフォトでOCR機能が使えることはご存じですか?

OCRとは「Optical Character Recognition」の略。
Googleフォトのアプリで、Googleレンズの機能を利用すると、画像データ文字認識が可能です。精度もすごく高い。写真撮れば画像の文字全部起こせるとか脅威ですよね。

GASでOCR機能を使うためには

GASの中でOCR機能を利用するためにはいくつか操作が必要です。Drive APIが必要になります。

使い方はコチラ!

1. スクリプトエディタで「サービス」をクリック

画像9

2.  サービスを追加で「Driva API」を選択して追加をクリック

画像2

準備はこれでOKです!

【完全引用】実際にPDFファイルからOCR結果を出力するスクリプト

完全引用です。便利すぎたのでご紹介させてください。

function convertTextFromPDFFile(file, folder{
 return convertTextFromPDF_(convertDocumentFromPDFFile, file, folder);
}
function convertTextFromPDFBlob(blob, folder{
 return convertTextFromPDF_(convertDocumentFromPDFBlob, blob, folder);
}
function convertTextFromPDF_(convertDocument, pdf, folder{
 const document = convertDocument(pdf, folder);
 const text = DocumentApp.openById(document.getId()).getBody().getText();
 document.setTrashed(true);
 return text;
}
function convertDocumentFromPDFFile(file, folder{
 if (!folder)
   folder = file.getParents().next();
 const blob = file.getBlob();
 return convertDocumentFromPDFBlob(blob, folder);
}
function convertDocumentFromPDFBlob(blob, folder{
 const fileMeta = {title: blob.getName(), mimeType: MimeType.PDF};
 const result = Drive.Files.insert(fileMeta, blob, {
   converttrue,
   ocrtrue,
   ocrLanguage'ja'
  });
  const file = DriveApp.getFileById(result.id);
  if (folder) {
    const parents = file.getParents();
    while (parents.hasNext())
      parents.next().removeFile(file);
    folder.addFile(file);
  }
  return file;
} 

いや神サービス。こんなコードをご紹介いただき、本当にありがとうございます。@kijuky様に大感謝。本記事は引用です!!!
両記事が多いので是非アクセスを!

Googleフォームにデータをアップしたら自分のメールアドレスにOCRの結果が返ってくるスクリプト

上記のコードでOCRの結果は取得できます。
その威力を知るためのサンプルを作ってみましょう。

1. GoogleフォームでPDFをアップするフォームを作ってみます。

設定はこんな感じ。Google Formはアカウントがあれば誰でも作れます。

画像3

2. 回答はスプレッドシートに記録するように紐づけてね

画像5

3. OCR結果を返すスクリプトはスプレッドシートに書きます!

画像5

フォームの回答結果を取得して返すスクリプトはスプレッドシートに書きます。私が陥った罠です。(笑)

4. 自分のメールアドレスにOCR結果を返すスクリプト

// フォームの回答をキャッチして動くスクリプト
function onFormSubmit(e{
 // フォームの回答を取得
 var email = Session.getActiveUser().getUserLoginId();
 const regExpGid = new RegExp("id=(.*?)(&|$)");
 var url = e.namedValues['アップしても問題ないPDF限定です'][0];
 const gid = url.match(regExpGid)[1];
 // 自動返信メール件名
 var subject = 'メールの内容がOCRの結果です';
 const pdf = DriveApp.getFileById(gid);
 var body = convertTextFromPDFFile(pdf);
 var options = {
   noReplytrue
 };
 GmailApp.sendEmail(email, subject, body, options); 
 pdf.setTrashed(true);
 deleteTrashedFiles;
}
// アップしたファイルはGoogleドライブにプールされてしまうので消します。
function deleteTrashedFiles({
 var contents = DriveApp.getTrashedFiles();
 var i = 0;
 while(contents.hasNext()) {
   var file = contents.next();
   var id = file.getId();
   i++;
   Drive.Files.remove(id);// この行のコメントを外して実行すると削除されます
 }
}

PDFファイルはドライブにアップしたときに付帯するファイルIDから特定。
メールの文面はvar body = convertTextFromPDFFile(pdf);で取得しています。

Google Workspaceを利用している組織であればnoReply設定も可能です。

出戻りガツオさんコードこれしか書いてないじゃんってツッコミは・・・、まあそうですねって感じです。

◆トリガーの設定も忘れずに!

画像6

スプレッドシートのスクリプトのトリガーをバインドしているフォーム送信時にセットすることができます。

※事前にGoogleの承認忘れずにね!参考はこちら

実際にやってみよ~!

みんな大好き!厚生労働省からPDFファイルをダウンロードしてテストに使ってみるよー!

画像7

厚生労働省広報基本指針(平成24年3月6日)[PDF形式:613KB]をダウンロードします。

Googleフォームにアップしてみましょう!

画像8

【結果】メールが来ました!!スゲ~!!!

画像9

信じられる?これ無料なんだぜ!

是非これ一回試してみてください。無料で、だれでもできます!!
凄すぎ!!精度高!(実際にやってみて体感してください!)

出戻りガツオ Google App Scriptは入門書を読んだくらいで全然自力で書けるレベルには達していませんがこんなこともできます。

Google App Script【GAS】はGoogle Workspaceを導入している会社の社員であればマジシャンになれるので是非やってみてください!

以上、興奮が収まらないことから記事化した初めてのGoogle App Scriptの記事でした!!


この記事が気に入ったらサポートをしてみませんか?