やりたいこと(再掲)
最終的にやりたいことは、以下の5つの機能を持つ「最強の防犯カメラ」を作ることです。機能①〜機能③は、市販されている多くの防犯カメラでも持っている機能ですが、機能④や機能⑤の顔認証機能を持つ監視カメラはまだ多くないと思います。
機能①.動画を24時間撮影し、カメラ本体に動画で記録する
機能②.動画をWebブラウザや他の機器から参照できるようにライブ配信する
機能③.動体を検知したら、静止画をLineに通知する
機能④.家族の顔を認証したら、静止画をLineに通知する
機能⑤.家族の顔を認証したら、◯◯さんおかえり!と喋る
家に帰ると、顔を見て「○○さん、おかえり!」と言ってくれる辺りが、スマートハウスに一歩づ近づいている気がします。
実現に向けた連載
最強の「防犯カメラ」を作成するために、以下のように少しずつに記事を書いていきます(予定)。
1回目:カメラの設定と動画記録
2回目:カメラ映像のライブ配信
3回目:動体検知機能とLineへの通知
4回目:顔認証機能とLineへの通知
5回目:Raspberry PiへのAlexaの搭載
6回目:顔認証後にAlexaで音声通知 ←この記事
6回目:顔認証後にAlexaで音声通知
前回は、防犯カメラにAlexaを搭載して,音声コマンドを使って天気予報や時間を確認できるようにしてみました。今回は、いよいよ最終回です。防犯カメラで家族の顔を認証したら「○○さんおかえり!」とAlexaが喋るようにしてみます。
node-red-contrib-alexa-remote2のインストール
Node-redからAlexaを喋らせるやり方はAlexaをしゃべらせる(node-red編)でも書いていますが、node-red-contrib-alexa-remote2で実現可能です。まずはこれをインストールしていきます。
①パレット管理画面の表示
第4回でインストールしたRaspberry Pi上のNode-redの画面を表示させ、右上の「三」ボタンから、「パレットの管理」を選択します。
②node-red-contrib-alexa-remote2の検索
次に「ノードを追加」のタブを選択し,検索欄で「alexa-remote」と入力して検索します。
③node-red-contrib-alexa-remote2のインストール
node-red-contrib-alexa-remote2の欄にある「ノードを追加」ボタンをクリックして、インストールします。
④インストールの確認
インストールが完了すると、画面左側のパレットにノードが追加されます。
フローの変更
ここからは、Line通知用に作成したNode-redのフローを変更していきます。
①functionノードの変更
まずは、1つ目のfunctionノードを開き、出力数の設定を「3」に変更すると共に、以下のようにコードを修正します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
let files = msg.req.files; let action=msg.payload.action; let text=msg.payload.text; let msg1 = msg; let msg2 = {}; let msg3 = {}; //ファイル無し if (files.length === 0) { msg1.payload = "サーバ通知ERR 添付ファイルなし"; return [msg1, null,null]; //ファイル有り }else{ //動体検知 if(action=='move'){ msg1.payload = "サーバ通知OK"; msg2.text = text; msg2.payload = files[0].buffer; msg2.filename = "/root/.node-red/cameraPicts/" + files[0].originalname; return [msg1, msg2,null]; //顔認証 }else if(action=='goHome'){ msg1.payload = "サーバ通知OK"; msg2.text = text+"が帰ってきました"; msg2.payload = files[0].buffer; msg2.filename = "/root/.node-red/cameraPicts/" + files[0].originalname; msg3.text=text+'さん、おかえりなさい。'; return [msg1, msg2,msg3]; //その他 }else{ msg1.payload = "サーバ通知ERR アクション不正"; return [msg1, null,null]; } } |
修正箇所は、msg3を定義し,顔認証を処理するif文の中でAlexaに喋らせたい言葉をmsg3.textに作成しています。また,4つあるreturn文の3つ目の要素には,顔認証の場合だけmsg3を設定し,他はnullを設定しています。
②Alexa Routineノードの追加
次に、パレットから「Alexa Routine」ノードをフローに追加し、設定画面の「Account」欄にある鉛筆ボタンをクリックします。
③Alexa Routineノードの設定1
「Alexa Account」ノードの設定画面が表示されるので、以下を入力して「追加」ボタンをクリックします。
・Auth Method:Email & Password
・Email:第5回で防犯カメラを登録したAmazonアカウントのEmail
・Password:Amazonアカウントのパスワード
・Service Host:alexa.amazon.co.jp
・Page:amazon.co.jp
・Language:ja_JP
④設定の完了
「Alexa Routine」ノードの設定画面に戻りますので、一旦何も入力せずに「完了」ボタンをクリックして設定画面を閉じます。
⑤デプロイ
この状態で、画面右上の「デプロイ」ボタンをクリックして、デプロイします。
デプロイが完了すると、先ほど入力したアカウント名とパスワードで、alexa.amazon.co.jpにログインされ、「Alexa Routine」ノードの下に「Ready」と表示されます。
一旦、ここでログインすることで、アカウントに登録されているAlexaデバイスを選択できるようになります。
使用しているアカウントによっては、うまく「Ready」とならずエラーとなるようです。その場合は、以下を試してみてください。
⑥Alexa Routineノードの設定2
再度「Alexa Routine」ノードの設定画面を開き、以下のように入力して「完了」ボタンをクリックします。
・Text:msg.text
・Devices:防犯カメラ
⑦ノードの接続
「Alexa Routine」ノードをfunctionノードの3つ目の接続子に接続します。
⑧デプロイ
再度「デプロイ」ボタンをクリックしてフローをデブロイします。
⑨テスト
それでは、防犯カメラに顔を向けて見て、顔認証しましょう!すると、Lineに通知が来ると同時に、スピーカから「○○さんおかえり!」とAlexaが喋ってくれると思います!名前の部分のイントネーションがおかしい場合は、functionノードでmsg3.textをセットする部分で、平仮名で名前を入力するなど、適宜調整してみて下さい。
おわりに
今回はNode-redにnode-red-contrib-alexa-remote2をインストールして、「○○さんおかえり!」とAlexaが喋るようにしてみました。これで6回に渡る防犯カメラの開発も完了です。このカメラによる顔認証の機能とNode-red経由のAlexa操作を組み合わせれば、顔認証が完了したら電気やエアコンをつけたり、Alexaにきている通知をお知らせしてくれるようにもできます。
間違い・改善点や質問など、あったらコメント欄に書いていただければと思います。
連載記事
1回目:カメラの設定と動画記録
2回目:カメラ映像のライブ配信
3回目:動体検知機能とLineへの通知
4回目:顔認証機能とLineへの通知
5回目:Raspberry PiへのAlexaの搭載
6回目:顔認証後にAlexaで音声通知 <–この記事
コメント
素晴らしいです。
自分はラズパイ超初心者ですが、自分でも作りたくなりました。
アレクサで発声するまでの時間が気になるところです。