AIプログラミング

LineBotを使用してOCRで画像を文字にしてみる

投稿日:

LineBotを使用してOCRで画像を文字にしてみる

前回はユーザが何かしらの言葉をつぶやくと、その言葉に対して連想されるURLを3つまで返してくれるLine Botを作成しました。Docomo 知識Q&AのAPIを使用しており、Line BotとAIを融合したアプリケーションでした。

今回は、画像データを入力としたアプリケーションを作成しようと思います。

単純に画像データを読み込ませただけでは芸がないので、LineBotで入力した画像に対してOCRにより文字おこしを行ってみます。

LineBotでの文字おこし

「読み上げるクマ」という言葉のうしろに、OCRで変換した文章が出てきます。

Line BotとGoogle App Scriptを使用して作成していきます。

アプリケーション構成図

次のサービスを組み合わせることでアプリケーションを作成します。

・Line Bot
・Google App Script
・GoogleDrive

アプリケーション構成図

① Lineからメッセージを送信し、Google App Scriptで受け取る
② GoogleDriveに対して画像データを送信する
③ 画像データをOCR変換し結果を返却する
④ Google App Scriptにて結果を整形してLineにメッセージを返却する

ソースコード

Google App Scriptのコードです。

ソースコードの詳細

トークンの設定

★の箇所にLineのアクセストークンを設定してください

LineBotからのメッセージ受信

Line Botからメッセージを受信した場合はdoPost関数が起動されるので、受信したメッセージをJSON形式で解析を行います。

今回対象となるのは、メッセージ且つイメージです。
event.typeが"message"、event.message.typeが'image'です。

message.typeが'image'の場合は画像が入力されたということなので、画像データをOCRで文字おこしをおこなうために、以下の関数を起動します。

・getImageUrlByLine関数
・getImageBlobByImageUrl関数
・GetOcrTextByimageBlob関数
・GetTransByText関数

イメージ画像のURLを取得する

イメージ画像のURLを取得します。

Lineで入力された画像データは、すぐに画像を取り出せるということではありません。いくつかの順番を経る必要があります。

①Lineに対して画像データが格納されているURLを教えてもらう
②教えてもらったURLに対してGETメソッドで画像の取得依頼を行う

ここでは①のLineに対して画像データが格納されているURLを教えてもらうという作業を行っています。

URLから画像を取り出す

先ほど、Lineに対して画像データが格納されているURLを教えてもらったので、そのURLに対してGETメソッドで画像の取得を依頼します。

画像をOCRで文字起こしを行う

先ほど取得した画像データを引数としてOCRの関数を起動します。

GoogleDriveに一旦画像データを保存して、OCRオプションをONにすることにより画像データをOCR変換することができます。文字おこしを行った文章はtextという変数に格納して返却しています。

メッセージを追加する

今のところはあっても無くてもいいのですが、文字おこしを行ったテキストに対して"読み上げるクマ"という文言を追加しています。

Lineのメッセージを返却する

LineBotへメッセージを返却します。引数としてはLineBotにより受信したイベントと返却するメッセージを指定します。UrlFetchApp.fetch関数を使用することにより、LineBotに返却することが出来ます。

前回作成したDocomo 知識Q&Aを使用したアプリケーションのコーディングと比べるとコードが長くなってしまいました。入力された画像データに対して、URLの変換や画像の取得を行っているためです。

しかし、一つ一つ見てみると意外と単純だったのではないでしょうか?

今回、文字おこしを行うことができたので、次回は画像データから日本語に翻訳してくれる機能を追加したいと思います。

-AIプログラミング
-,

Copyright© AI人工知能テクノロジー , 2019 All Rights Reserved.