人の話を聞いて、写真撮影、画像解析するAIカメラを完成させる!
第1回:初めの一歩、ラズパイに目、耳、口を追加する
第2回:ボタンとウェブサーバー機能を付けて、カメラ、マイクを操作
第3回:NTT docomoのAPIを使って、画像認識カメラを作る
第4回:撮った画像を読み上げる、おしゃべりカメラにしよう
第5回:顔や文字などを読み取って、自動でメールする
こんにちは、ヨシケンです!
これまで、目となるカメラで画像を読取り、口となるスピーカーで、解析した結果を喋ってくれるデバイスにしてきました。
総まとめとなる今回は、耳となるマイクを付けて、「自撮りして!」や「文字を読んで」など話しかけると、それに応じて解析内容を変えてくれるようにします。ここまでくれば、話を聞いて、判別して、しゃべってくれるAIカメラの完成です!
今回の記事で必要なもの一覧
パイ・カメラ
または、USBカメラ(今回は小型で安価なこちらを使いました)
LED付きタクト・スイッチ(例えばこのような赤や緑に光るスイッチです)
今回の記事の流れ
1.ラズパイに、カメラ、スピーカー、マイクを付け、カメラケースに収納
2.マルチLEDをセットして、カラフルに光らせる
3.音声認識APIを導入して、話を聞き取る
4.マイク、写真撮影、スピーカーをまとめて、カメラを完成させる
5.まとめと機能拡張
1.ラズパイに、カメラ、スピーカー、マイクを付け、カメラケースに収納
今回は、ラズパイを使ったAIカメラの一連の流れをおさらいします。
というのも、これまで使っていたラズパイ公式のパイ・カメラがハード的に壊れてしまい(ちょっと扱いが手荒だったかもしれません)、代わりに手近にあった小型USBカメラで代用した為です。そのUSBカメラに合わせて、カメラケースも作り直したので、最初から復習していきましょう。
まず、ラズパイにUSBカメラをつないで使う設定をし直します。(これまで通り標準のパイ・カメラを使っている方は、第1回記事のままで変える必要はありません。)
ラズパイのUSB経由で写真を撮る場合は、これまでのraspistillの代わりに、fswebcamというコマンドだけで、写真撮影、保存する事ができます。
fswebcamをインストール後、以下コマンドで画像解像度などのオプションを付けて、試しに撮ってみて下さい。
次に、若干カメラのレンズの大きさが変わったので、紙の箱でカメラケースを作り直し、組み立てていきます。
写真のように、カメラのレンズ、USBを通す穴、バッテリーをオンオフする窓、スピーカーを差す部分などをカッターで切り抜きました。こちらはあくまで参考なので、どんなものでケースを作っても構いません。
そこに、ラズパイ、カメラ、ボタンなどを収納します。今回は声を聞き取るための小型マイクをUSBに差しています。
それでは紙の箱の中心にレンズをはめ、カメラ部分を固定します。
マイクは外に出るように、横に窓を作っておきます。スピーカーは、ラズパイのジャックに差し、ちょうどいい位置に出るようにして下さい。スピーカー、マイクの設定は、第1回記事にありますので、事前に確認しておいて下さいね。
また、シャッターを切るタクト・スイッチもこのように押しやすい場所に留めます。設定方法は、第2回記事のようにやってみて下さい。
全体を箱の中に収め、最後にバッテリーも入れます。今回は、電源プラグから充電できるようなものにしています。
2.マルチカラーLEDをセットして、カラフルに光らせる
このカメラには色々な機能が加わったので、それを視覚的にも分かりやすく、またカメラのフラッシュ的に使うようにLEDをセットします。今回はPimoroni社が出しているBLINKTというマルチカラーLEDを使っています。ライブラリで様々な色、光の動きを付けられるので、おススメです。
ではこのLEDもカメラケースにセットしていきます。
BLINKTとラズパイGPIOの20番と、26番、そして5Vにケーブルでそれぞれつないで下さい。(ラズパイのピンにそのまま差すこともできますが、今回はカメラっぽい位置にセットする為、ケーブルでつないでいます。)
では、BLINKTのページを参照して、セットアップやライブラリのインストールをして下さい。
ここではblinktというライブラリをimportして、r,g,bで色を指定して、全面を光らせたり(blinkt_all)、パルスのようにLEDの左から右に光って流れる(blinkt_pulse)関数を作りました。
実際流してみると、こんな感じです。結構未来的なカメラになってきました。
3.音声認識APIを導入して、話を聞き取る
これまでdocomo APIを導入して、様々な機能を追加してきました。画像認識API(第3回)のカテゴリ分析により、料理や花、風景などを言い当てられるようにしました。第4回の音声合成APIで、撮った内容を話してくれるカメラになりました。物体検出APIや文字認識API(第5回)で、人間やお札、文字も読み取れるようになりました。
そして最後に、音声認識APIを追加して、人の話を聞いて、それをテキストに変換できるようにします。日本語の会話に関して、NTT docomoのしゃべってコンシェルなどのデータ、蓄積を元に、かなり正確に発話内容を認識してくれます。
これにより、例えば「自撮りして」と言うだけで、カメラを離してセルフ写真を撮れ、顔認識などを行う命令を伝える事ができるようになります。
これまでのようにDocomo Developer Supportページから、音声認識APIを追加しておいて下さい。また機能別リファレンスも参照しておいて下さい。
この音声認識APIのURLを使って、(recognize)関数を作ります。
この中でまず、rec_timeの間、話を録音し、音声データ(.wav)を保存します。このデータをAPIに適用する事により、その内容を日本語のテキストに変換します。
また指示内容から各アクションを区分ける言葉をmodelsとして定義しておきます。「風景を撮って」なら”scene”モデルを、「自撮りして」ならbodyPartモデルなどと判別できるようにします。この聞き取り語句は使い方に合わせて、自由に追加して下さいね。
最後に、シャッターボタンを長押し(ここでは1.2秒以上で、count=0となるようになっています)したら、この聞き取りが始まるようにします。rec_timeで指定した秒数の間話を聞きます。
APIにより変換された言葉からモデル(料理や顔、文字など)が分かったら、それぞれのAPI処理に分岐させます。その際カメラに話させる「何を撮りますか?」や「○○と言ったのですか」などはお好みで変えて下さいね。
4.全てをまとめて使ってみる
では、全体を通してAIカメラとして使ってみましょう。全てが入ったプログラムサンプルbutton_listen_speech_camera.pyは、この記事の一番下に付けています。
このプログラムを、ラズパイのスタート時に自動起動させるようにしておくと、電源を入れたらすぐカメラとして使えるようになります。第2回の後半に自動起動の登録方法があるので、試してみて下さい。
パラメータにメールアドレスを指定してプログラムを流すと、前回作ったように、解析写真をメールで送ってくれるようになっています。
sudo python button_listen_speech_camera.py –mail abc@hotmail.comPress 1 (category), 2 (body, ccy), 3 (word) times, or hold to listen!
実際の撮っている様子は動画や、写真を見てみて下さいね。
5.これまでのまとめと機能拡張
それではこれまで全6回に渡って、ラズパイを使ったAIカメラを作ってきました。
ラズパイと、カメラやスピーカー、マイクなどのハードウェアの設定方法に始まって、AIを使ったAPIの導入から、会話を聞き分ける機能まで作りました。ご自分で工作する際は、ある部分だけを使ってもいいですし、最初から順番にやってもらってもいいと思います。
ここまで画像解析や音声APIを使ってきましたが、docomoにはそれ以外にも様々なAPIがあります。例えば、日本語の語彙を熟知したAPIとして、発話内容を「天気」や「知識」、「トレンド」などに区分けにしてくれる『発話理解API』があります。ここから更に『知識Q&A』や『トレンド記事』などのAPIを連動させたり、様々な会話に対応してくれる『雑談API』を使うと面白いと思います。APIを組み合わせて、こんなお喋りロボットだって作る事ができます。(ロボット筐体(※右下写真の白いロボット)の中にラズパイとマイク、スピーカーなどが入っていて、話しかけると動きながら雑談などをしてくれます。)
またラズパイ用に、GoogleやAmazonなどからも先進的なAPI/AIが公開されているので、これまで作ったAIカメラ以外にも、Google Home/Alexa両用おしゃべりスピーカー(写真左側)など、驚くようなガジェットを自分で作る事ができるのです。
是非、ラズパイを使って、様々な事にチャレンジしてみて下さい!
それでは、また!
サンプルプログラム:button_listen_speech_camera.py
今回の連載の流れ
第1回:初めの一歩、ラズパイに目、耳、口を追加する
第2回:ボタンとウェブサーバー機能を付けて、カメラ、マイクを操作
第3回:NTT docomoのAPIを使って、画像認識カメラを作る
第4回:撮った画像を読み上げる、おしゃべりカメラにしよう
第5回:顔や文字などを読み取って、自動でメールする
第6回:人の話を聞いて、写真撮影、画像解析するAIカメラを完成させる!(今回)