BOSCH製IPカメラを利用した人数カウント（カメラ設定編）

#BOSCH製IPカメラを利用した人数カウント

[前回の投稿](http://qiita.com/c-nova/items/3397cfb973f43235ffa9)で紹介したとおり、今回はBOSCH製カメラの機能を利用した人数カウントと、そのカウントデータの記録を行ってみたいと思います。

この内容は多分以下の3本立てになると思います。今回は以下の1番に該当します。

1. BOSCH製IPカメラでの人数カウントを行う設定
2. BOSCH製IPカメラから人数カウントデータを受け取る
3. 人数カウントデータをEagle Eye Networksに保存する


##IPカメラで人数カウントができると何かいいのか？？
[別の記事](http://qiita.com/c-nova/items/44c70a8eb918d3dc1b09)で投稿したとおり、人数カウントを行うには一般的には静止画と、OpenCVのような画像解析のソフトウェアを使うことになると思われます。コードをご覧になった方であれば分かるとおり、結構複雑なコードであるうえ、環境によってはBackground substructorの選定に結構戸惑います。そしてコードメンテナンスも自分でやらなければなりません。
こういった面倒なことを、BOSCH製IPカメラの上位機種に搭載されている「IVA」（Intelligent Video Analytics）を使うことで、簡単に解決することができます。IVAの詳しい内容は[BOSCHのドキュメント](http://resource.boschsecurity.com/documents/DS_IVA_5_60_Data_sheet_jaJP_11858668555.pdf)をご覧ください。以下に簡単にできることを記載します。

- 入退出するオブジェクト、またはエリア内のオブジェクトを検出
- 論理的に組み合わせた複数ライン（1～3 本）の横断を検出
- 経路通りに通過するオブジェクトを検出
- 設定したエリアで一定時間徘徊するオブジェクトを検出
- 一定の期間置き去りにされたオブジェクトを検出
- 持ち去られたオブジェクトを検出
- 仮想ラインを横断するオブジェクトまたは特定の領域に侵入するオブジェクトをカウント
- 事前に設定されたエリア内の一定の群衆レベルを検出
- 指定された移動方向および速度（一方通行のゲートで誤った方向に移動している人物など）を群衆の中でも検出
- シーン内の他のすべてのオブジェクトと逆方向に移動するオブジェクトを群衆の中でも検出
- 頭部のあるオブジェクトを検出
- 前面から顔のスナップショット撮影

このような高機能なことを、なんとIPカメラ側（エッジ側）で全て処理できてしまうのです！これは非常に素晴らしい機能で、複数のカメラから送られてきた動画を画像解析しようとすると、非常に多くのサーバーやマシンリソースが必要になります。極端に言うと、カメラ一つでなんでもできてしまう。それがBOSCH製IPカメラの強みです。
そして今回はこの中にある、

- 論理的に組み合わせた複数ライン（1～3 本）の横断を検出

を使って人数カウントを行いたいと思います。


##環境、事前確認
全体としては、環境条件や事前確認項目は[EENを使った静止画取得の回](http://qiita.com/c-nova/items/6da5482019b9ca7b7f62#%E7%92%B0%E5%A2%83)がベースとなりますので、<-のリンク先を参照して下さい。
EENの機能の詳細、APIについても前回同様以下のサイトを御覧ください。
[EEN製品サイト（日本語）](http://www.iguazu-eagleeye.jp/)
[EEN APIサイト（日本語）](http://een-api-doc-jp.mybluemix.net/)

今回は当然BOSCH製IPカメラが必要になりますので、BOSCH製IPカメラの6000番台以降の、どちらかと言うとハイエンドなカメラをご用意下さい。
ここではBOSCH DINION IP 8000を使用する想定としております。

##BOSCH DINION IP 8000への接続

人数カウント設定を行うには、

1. IVAの設定
2. Alarm Task Scriptの設定
3. 接続確認

が必要になります。
上記設定を行うためには、まずWebブラウザでのIPカメラへの接続が必要になります。
使用するWebブラウザは「Internet Explorer」または「Firefox」が必要になります。Chromeはサポートされておりませんのでご注意下さい。
ここではInternet Explorerを使用して接続してみたいと思います。

### IEでの接続
IEを起動し、DINION 8000のIPアドレスを入力します。
実行すると以下のような画面が表示されます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/106468/26f4d0f3-071d-7db1-144b-dbf4dc8e823e.png" width="80%">

多分初めて繋げた際には画面のようにパスワード未設定のアラートが表示されます。ホントに最初の方はメニューもメッセージも英語かと思いますが、適宜設定してください。パスワードは可能な限りちゃんと設定しましょう。

パスワードアラートを「キャンセル」すると以下のライブ画面が表示されます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/106468/4428e0e2-3ee4-bc6d-cc74-5ea8dc74291e.png" width="80%">
おなじみの弊社の検証環境です。

IVAの設定を行うには、上記の画面で「設定」ボタンをクリックします。
クリック後以下の画面が表示されるので、「アラート」→「VCA」と、左側のメニューから選択して開きます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/106468/7e9770af-fe99-31cf-d127-aa41e2c4739e.png" width="80%">

<img src="https://qiita-image-store.s3.amazonaws.com/0/106468/038834ad-b579-abf9-091d-18aecfca2130.png" width="80%">
ここからIVAの設定が行なえます。

##IVAの設定

IVAが設定されていない場合、通常は上記の画面のように「Silent VCA」というように設定されており、何もアラートが上がらない状態になっています。
ここでは「プロファイル番号1」というメニューを選択します。選択すると自動的に他のメニューも更新され、IVAの設定が可能になります。
本来はここで「キャリブレーション」という作業が必要になります。最新版では画角内の一部（例えば下記の検証センターではドアの高さなど）の情報を入力することで、キャリブレーションが完了します。以前の機種では高さ、幅、奥行き（幅と奥行は90度になる場所を指定）などを指定する必要があります。ここでは簡易的な検証としてキャリブレーションを飛ばしておりますが、本番では実施頂けますようお願い致します。詳しくはBOSCH Security Systemsまたは代理店の担当営業までお問い合わせ下さい。

設定を作業開始するために「設定」ボタンをクリックします。
<img src="https://qiita-image-store.s3.amazonaws.com/0/106468/ff6e650f-1f3e-20e0-38e0-aa1153a138d8.png" width="80%">

画面が更新され、カメラの現在のビューとIVA設定専用のウィンドウがポップアップされます。このメニューがポップアップしない場合には、ブラウザでIPカメラに接続した際に表示されるActive Xのプラグインがインストールされていない状態です。再接続し、インストールを行って下さい。
<img src="https://qiita-image-store.s3.amazonaws.com/0/106468/b61ec5b7-45f7-21cd-c93b-7481b8d9e12e.png" width="80%">

ここでは既に設定済みの画面ですが、初期設定の場合には最上位の「Detect any Object」のみ設定されています。この下に設定されている「18階入室」と「18階退室」を作成してみましょう。画面下部の「新規」ボタンをクリックします。
<img src="https://qiita-image-store.s3.amazonaws.com/0/106468/246baa9d-8de3-6f44-1654-30b9c079cd0c.png" width="40%">

上記画面が表示されますので、上部のドロップダウンメニューから「<新規ライン>」を選択します。
<img src="https://qiita-image-store.s3.amazonaws.com/0/106468/2891723c-d394-0528-aca1-a58f4e2b1516.png" width="40%">

ここで選択を行った瞬間にカメラの画像には線が引かれますので、線の端をドラッグ＆ドロップして人が通りそうな場所に線を引きます。この際下記のように「矢印」の向き（向きのものしかカウントされない）に注意して下さい。
<img src="https://qiita-image-store.s3.amazonaws.com/0/106468/ab4dd5c6-4ced-be49-02ff-4b2fb746fe1c.png">

設定が終わったら「次へ」をクリックします。ここから先は結構細かい設定が続きますので、特に興味なければ「終了」をクリックして閉じて下さい。
<img src="https://qiita-image-store.s3.amazonaws.com/0/106468/9a63bb7d-0d41-589c-0320-04571f6048ed.png" width="40%">

設定画面を閉じると元の画面に戻りますので、「セット」をクリックして設定を完了します。
<img src="https://qiita-image-store.s3.amazonaws.com/0/106468/5d212e1a-2f54-f5d2-1f7d-1964391bb653.png" width="80%">

続けてライン超えをした際に「REST」でアラートを通知する設定が必要になります。左側のメニューから「Alarm Task Editor」をクリックします。以下の画面が開きます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/106468/ef5810a4-631c-4049-b6d9-d3b04d77bf00.png" width="80%">

今回は以下のスクリプトを追記します。追記が完了したら「セット」をクリックして保存します。

```AlarmTaskVCA
HttpCommand sendHttp1:={
Command("pcount1")SSL(true)
Port(HTTPS)IP("<Bluemixのホスト名>")
Name("Entrance")};
HttpCommand sendHttp2:={
Command("pcount2")SSL(true)
Port(HTTPS)IP("<Bluemixのホスト名>")
Name("Exit")};
if (VCARule(1,2)) then sendHttp1;
if (VCARule(1,3)) then sendHttp2;
```
この中で`VCARule(1,2)`は注意が必要で、先程設定したラインの設定が、全体の設定の中の2個目ということを指しております（数字の2の部分）。設定する順番によってこの番号は変わりますのでご注意下さい。
`pcount*`の部分はNode-REDで設定したURIですので、各自設定変更が必要です。

これでIPカメラ側の設定は完了です。

##繋げてみよう

次回、[「BOSCH製IPカメラから人数カウントデータを受け取る」](http://qiita.com/c-nova/items/c1e29bd74b57f7a7c807)で実際にカウントデータの取得を行います。
お楽しみに！


##ライセンス、著作権等

本スクリプト、ノード構成、エクスポート内容については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およびその関連会社（以下、「ボッシュ」）の著作権として、著作権に関する各種国際条約、各国の著作権法およびその他の各種法律（以下、「法律等」）によって保護されています。