顔や文字などを読み取って、自動でメールする
第1回:初めの一歩、ラズパイに目、耳、口を追加する
第2回:ボタンとウェブサーバー機能を付けて、カメラ、マイクを操作
第3回:NTT docomoのAPIを使って、画像認識カメラを作る
第4回:撮った画像を読み上げる、おしゃべりカメラにしよう
こんにちは、ヨシケンです!
前回までの記事では、風景や食べ物などを識別して、それをしゃべってくれるカメラになりました。
今回は、更にdocomo APIで識別できるものを増やして、顔や文字なども読み取れるようにします。
また、画像解析でよくある検出部分を赤枠で囲む処理をして、その写真を自動でメールなどに送る機能も付けます。
今回の記事で必要な物一覧
今回の記事の流れ
1.物体検出APIで、写真の顔、お札を囲んでみる
2.文字認識APIを使って、文字を読み取る
3.撮った写真、メッセージをメールで自動送信
4.プッシュ回数に応じて、機能を変えるカメラにする
5.まとめ
1.物体検出APIを使って、写真の顔、お札を囲んでみる
既にカテゴリ認識として、食べ物、風景やファッションなどを検知できていると思いますが、それに追加して、顔やお札などを抜き出せる物体検出APIも付け加えます。
このAPIを使用できるようDocomo Developer Supportページから、機能を追加しておいて下さい。
この物体検出では、体の部位や日本の通貨を特定する事ができます。
また検出したものの画像中の位置も取れるので、どこに何が写っているかも写真中にマップする事もできます。
これまでのプログラムに、物体APIのURLと、体を特定するbodyPart、お札のcurrencyというmodelを追加します。
“model”: “[‘currency’, ‘bodyPart’]”
また、この物体検出APIでは、検出した物の画像中の位置も補足できるので、その座標も取得します。
y = int(can[‘yMin’])
x2= int(can[‘xMax’])
y2= int(can[‘yMax’])
そしてcv2.rectangle()、cv2.putText()という関数を使って、検出物体の四角形の囲いと文字を写真に追加します。
cv2.rectangle(img, (x, y), (x2, y2), (0, 0, 255), thickness=2)cv2.putText(img, message.encode(‘utf-8’), (10, 20), cv2.CV_AA, 0.6, (255, 0, 0), 1, cv2.CV_AA)
このプログラムによって、写真の中の顔を抽出した部分を枠で囲み、face(92.1%)のような検出率を入れる事ができるようになります。
全体のプログラムは一番最後にまとめて付けています。
引き続き、文字認識APIの方も見ていきます。
2.文字認識APIを使って、文字を読み取る
更に追加で、画像中に文字がある場合に、それを抜き出す文字認識APIを使っていきます。
文字認識APIのURL、モデル名は以下のようなものです。
“model”: “[‘word’]”
文字認識に関しては、まず情景画像要求 getImage(fname, modelName, lang) を行い、そこで得られたidを次の結果取得 getWordList(img_id) に渡して、文字を取り出します。
先程と同様に、文字認識部分の位置もx, yで返してくれるので、それを取得します。
y = int(can[‘shape’][‘point’][0][‘@y’])
x2= int(can[‘shape’][‘point’][2][‘@x’])
y2= int(can[‘shape’][‘point’][2][‘@y’])
cv2.rectangle(img, (x, y), (x2, y2), (0, 0, 255), thickness=2)
そうすると、Device Plusの記事を読み取ったのですが、このように文字の部分を抜き出してくれます。
いくつか、不思議な文字を読み取ってしまっていますが、「電子工作」や「読み上げ」「おしゃべり」など正確に検出してくれています。
3.撮った写真、メッセージをメールで自動送信
カメラで色々な解析写真を撮る事ができるようになりましたが、その画像をいちいちチェックするよりも、メールで自分のアドレスに送るようにしましょう。面白い写真が撮れたら、Twitterなどでシェアするのもいいかもしれません。
ラズパイにメール関連のライブラリを導入し、メッセージと画像をGmailで送れるような機能をつけていきます。この部分はプログラムを流す際パラメータにして、メールを送る、送らない、を指定できるようにしておきます。
まずラズパイに、シンプルなSMTPサーバーのsSMTPをインストールします。
設定は、ssmtp.confというファイルに自分のGmailアカウントなどを登録します。
sudo vi /etc/ssmtp/ssmtp.conf
root = xxx@gmail.com # 自分のGmailアカウント
mailhub = smtp.gmail.com:587 # Gmailのサーバー
AuthUser = xxx@gmail.com # 自分のGmailアカウント
AuthPass = pswd # Gmailパスワード
AuthLogin=YES # Gmailへのログイン許可
UseSTARTTLS = YES # メールの暗号化設定
ここでAuthPassには、Gmailそのもののパスワードでも可能ですが、このアプリ専用のパスワードを設定しておいた方が安心です。こちらのGoogleのページからアプリ用のパスワードの生成をし、それをAuthPassにセットできます。
次に、画像添付も含めたメールの送信に、Muttというメールクライアントを使います。これをラズパイにインストールし、sSMTPと共に使います。
以下コマンドでmuttをインストールします。その後ラズパイのホーム以下に.muttrcという設定ファイルを作り、そこにメールサーバーなどの情報を定義します。
sudo apt-get install mutt
sudo vi $HOME/.muttrc
set sendmail = “/usr/sbin/ssmtp” #先程のssmtpを指定
set realname = “Sender name” #送信者の名前
set from = xxx@gmail.com # 送信者メールアドレス
さあ、設定が終わったら、ラズパイからmuttコマンドでメールを送ってみましょう。
mutt -s “題名” “送信先メールアドレス” -c “CCメールアドレス” -a “添付ファイルの絶対パス” < “メール本文のテキストファイル” といった形でメールを送る事ができます。
テストで、これまで撮った写真を使って実行してみると、こんなメールが飛んできました。
カメラがメールを送ってくれるというのはちょっと面白いかもしれませんね。ちゃんと日本語にも対応してくれています。
それでは最後にこれらをまとめて、カメラから使えるようにします。
4.プッシュ回数に応じて、機能を変えるカメラにする
これまで追加した画像解析を、カメラのボタンを押した回数に応じて、切り替えるようにします。
シングル・プッシュなら1: カテゴリ認識(風景や料理など)、ダブル・プッシュなら2: 物体(人やお金)、そして三回連続押したら3: 文字認識を行うような形です。それぞれに対応したurl、モデル名を、jsonで定義しておきます。
また、前回使ったaplayでの発話機能をtalk(message) ファンクションにして、これから何の解析を行うのか、カメラ自身にしゃべってもらいます。
例えば、シャッターを二回連続で押すと、model_descが”物体検出”になるので、「物体検出をします!」としゃべってくれるはずです。
それでは、こちらが全体のサンプル・プログラムbutton_obj_speech_camera.pyになります。以前からの追加部分をそれぞれ、物体検出は黄色、文字認識は青、それ以外の部分は緑でハイライトしています。
それでは、通して流してみましょう。メールの宛先は–mail で自分のアドレスなどをセットしておきます。
python button_obj_speech_camera.py –mail abc@hotmail.comPress 1 (category), 2 (body, ccy), 3 (word) times!
シャッターを一回だけ押すとカテゴリ解析、ダブル・プッシュで物体解析を行います。
また「(メールアドレス)にメールを送ります」と言って、プログラムを流すときに設定したアドレスに、メッセージと写真が届いたでしょうか?
三回連続で押すと、文字解析をしてくれます。色々なものを撮ってみて下さいね。
5.まとめ
今回はカメラに、物体検出API(顔、体、お札)と文字認識APIを追加しました。これで風景や料理などの他に、人の顔や看板の文字なども認識できるようになりました。
顔や文字を認識した部分を囲う事もできるようになったので、より画像認識の精度が見て取れると思います。
また、ラズパイにメールサーバー機能を付けて、メッセージと画像を添付して、Gmailを送信できるようにもしました。
カメラのシャッターを押した回数に応じて、写った文字や情景、人の存在などを、話したり、メールで送ったりしてくれます。かなり未来のカメラのようになって、面白く使えるのではないでしょうか?
では次回は、このカメラに耳も付けて、人の話を聞くことが出来るようにします。話しかけた内容に応じて、写真を撮る内容を変えてくれたら、もうAIカメラと呼んでもいいでしょう!
それでは、お楽しみに!
今回の連載の流れ
第1回:初めの一歩、ラズパイに目、耳、口を追加する
第2回:ボタンとウェブサーバー機能を付けて、カメラ、マイクを操作
第3回:NTT docomoのAPIを使って、画像認識カメラを作る
第4回:撮った画像を読み上げる、おしゃべりカメラにしよう
第5回:顔や文字などを読み取って、自動でメールする(今回)
第6回:人の話を聞いて、写真撮影、画像解析するAIカメラを完成させる!