BOSCH製IPカメラから人数カウントデータを受け取る
前回の投稿で行ったカメラ側の設定が完了したので、今回はBluemix側の設定を行います。
この内容は多分以下の3本立てになると思います。今回は以下の2番に該当します。
- BOSCH製IPカメラでの人数カウントを行う設定
- BOSCH製IPカメラから人数カウントデータを受け取る
- 人数カウントデータをEagle Eye Networksに保存する
環境、事前確認
前回の投稿の本項目をご参照下さい。
Bluemix側の準備
Bluemix側ではいつもどおり?node.jsとNode-REDを使って実装します。
今回も簡易的にフローをインポートしていきたいと思います。
そのためには事前に**「環境、事前確認」**の内容を参考に、環境を整えておいてください。
フローのインポート
以下の内容をコピーして、Node-REDにインポートを行って下さい。
[{"id":"3ae66bd6.8003f4","type":"http in","z":"2016f88.2cc7808","name":"18F_Enter","url":"/pcount1","method":"get","swaggerDoc":"","x":140,"y":500,"wires":[["b04e92c8.443a4","54062a58.889494"]]},{"id":"b04e92c8.443a4","type":"debug","z":"2016f88.2cc7808","name":"","active":false,"console":"false","complete":"true","x":330,"y":440,"wires":[]},{"id":"53ffe83f.913468","type":"http response","z":"2016f88.2cc7808","name":"","x":850,"y":500,"wires":[]},{"id":"54062a58.889494","type":"function","z":"2016f88.2cc7808","name":"Set Num&Ent","func":"msg.payload = 1;\nmsg.entrance = \"Enter\";\nmsg.camName = \"BOSCH_DINION_IP_ultra_8000\";\n\nreturn msg;","outputs":1,"noerr":0,"x":360,"y":500,"wires":[["1bc18353.2d640d"]]},{"id":"56fae4a1.22598c","type":"cloudant out","z":"2016f88.2cc7808","name":"","cloudant":"","database":"count","service":"count-cloudantNoSQLDB","payonly":true,"operation":"insert","x":850,"y":560,"wires":[]},{"id":"1bc18353.2d640d","type":"function","z":"2016f88.2cc7808","name":"Set time and count","func":"var dtObj = new Date();\n\nvar datetime = [dtObj.getFullYear() + '-',\n ( '0' + (dtObj.getMonth() + 1)).slice(-2) + '-',\n ( '0' + dtObj.getDate() ).slice(-2) + '-',\n ( '0' + dtObj.getHours()).slice( -2 ) + '.',\n ( '0' + dtObj.getMinutes()).slice( -2 ) + '.',\n ( '0' + dtObj.getSeconds()).slice( -2 ) + '.000000'\n ].join(\"\");\n\nmsg.st = [dtObj.getFullYear() + '-',\n ( '0' + (dtObj.getMonth() + 1)).slice(-2) + '-',\n ( '0' + dtObj.getDate() ).slice(-2) + ' ',\n ( '0' + dtObj.getHours()).slice( -2 ) + ':',\n ( '0' + dtObj.getMinutes()).slice( -2 ) + ':',\n ( '0' + dtObj.getSeconds()).slice( -2 ) + '.000'\n ].join(\"\");\n\nmsg.payload = {\n timestamp: datetime,\n count: msg.payload,\n entrance: msg.entrance,\n camera: msg.camName\n};\nreturn msg;","outputs":1,"noerr":0,"x":630,"y":500,"wires":[["f8becca5.0c2df","56fae4a1.22598c","53ffe83f.913468","f0eced9f.99cd5"]]},{"id":"f8becca5.0c2df","type":"debug","z":"2016f88.2cc7808","name":"","active":false,"console":"false","complete":"false","x":870,"y":440,"wires":[]},{"id":"ae82aa3d.a64cd8","type":"http in","z":"2016f88.2cc7808","name":"18F_Exit","url":"/pcount2","method":"get","swaggerDoc":"","x":140,"y":560,"wires":[["b04e92c8.443a4","5b7874a0.51f5ec"]]},{"id":"5b7874a0.51f5ec","type":"function","z":"2016f88.2cc7808","name":"Set Num&Ent","func":"msg.payload = 1;\nmsg.entrance = \"Exit\";\nmsg.camName = \"BOSCH_DINION_IP_ultra_8000\";\n\nreturn msg;","outputs":1,"noerr":0,"x":360,"y":560,"wires":[["1bc18353.2d640d"]]}]
試してみよう!
カメラ側の設定が完了すれば、あとはテストを行うだけです。
各デバッグノードをオンにして、実際にカメラの前を横切ってみましょう。
上のスナップショットは便宜的に緑色の線を入れておりますが、ここではこの部分にライン超えの線があると仮定しています。
横切った際にカメラが認識し、Bluemixに情報を転送し、Bluemix側で受け取れれば、以下のようなメッセージが**「debug」**タブにJSONオブジェクトとして表示されます。
{ timestamp: "2017-07-25-02.43.50.000000",
count: 1,
entrance: "Exit",
camera: "BOSCH_DINION_IP_ultra_8000" }
この情報はちゃんと設定されていれば、Cloudantにも記録されます。Cloudantに記録する際には事前に指定したデータベースを作成しておいて下さい。
Eagle Eyeと連携してみよう
次回、**「人数カウントデータをEagle Eye Networksに保存する」**では、今回の途中で紹介したCloudantへの保存ではなく、Eagle Eyeに動画データと共にメタデータを保存する方法をご紹介します。
お楽しみに!
##ライセンス、著作権等
本スクリプト、ノード構成、エクスポート内容についてはMIT Licenseを適用します。
Eagle Eye Networksの商標およびロゴについてはEagle Eye Networks, Inc.に帰属します。
IBMおよびIBM Bluemix、Node-Redの商標およびロゴについてはInternational Business Machines Corporationに帰属します。
node.jsの商標およびロゴについてはNode.js contributorsに帰属します。
BOSCH及びBOSCHロゴは、、 Robert Bosch GbmHおよびその関連会社(以下、「ボッシュ」)の著作権として、著作権に関する各種国際条約、各国の著作権法およびその他の各種法律(以下、「法律等」)によって保護されています。