Jetson NanoからComputerVisionの入力で使用できるように、防犯(監視)カメラを操作してみました。
1 はじめに
CX事業本部の平内(SIN)です。
動画を処理する場合、製品にもよりますが、Webカメラでは、一般的に解像度やズームに限界があります。 そこで、今回は、ちょっと本格的な監視カメラを試してみました。
通常、商品となっている「監視カメラ」では、専用のアプリで操作や監視を行うようになっています。しかし、それでは、プログラムの入力として使用するのは難しいので、汎用プロトコルである、RTSP(動画送信)や、ONVIF(回転・ズーム等の操作)に対応してるものを選定し、コマンドラインから利用出来ることを確認してみました。
最初に動作しているようです。Jetson Nanoから部屋の反対側(約4m)に置いてある、お菓子を確認しています。
2 監視カメラ
使用したのは、ANRANの防犯カメラです。
https://www.amazon.co.jp/gp/product/B07VD693ND/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1
選定の条件となった諸元は、以下のとおりです。
- 光学の20倍ズーム 200万画像
- PT操作 水平 355°、垂直90°
- ONVIF対応
- RTSP/RTMP対応
RTSPで動画が取得でき、ONVIFで左右の回転や、ズームが操作できるということです。
3 RTSP
カメラ自体にhttpで接続して表示される設定画面の Network > NetworkにRTSPの接続ポートを設定できるようになっています。下記では、RTSPのデフォルトである554を使用しています。
RTSPの入力は、下記のようにGStreamerで取得しました。
gst-launch-1.0 rtspsrc location=rtsp://10.0.0.12:554/11 ! \ rtph264depay ! avdec_h264 ! videoscale ! \ video/x-raw,width=1024,height=768 ! \ videoconvert ! xvimagesink
videoscaleは、見やすいように画面を縮小しているだけなので、必須ではありません。また、:554もRTSPのデフォルトポートなので省略可のです。
/11が無いと、アクセス出来ないので注意が必要です。
一旦、XWindow上に、xvimagesinkで表示していますが、JetPackに含まれる、OpenCVは、入力にGStreamerが利用できるようにコンパイルされていますので、このまま利用できるはずです。
4 ONVIF
Open Network Video Interface Forum(ONVIF)は、IPネットワークカメラ製品のインターフェースの規格標準化フォーラムです。
監視カメラでは、設定画面の Network > ONVIFでONVIFを設定できます。下記では、8080番で有効化されています。
ONVIFで可能な操作は、非常に多岐にわたりますが、今回は、NodeJSから軽易に扱うことができるように公開されている下記のラッパーを利用させて頂きました。
https://github.com/agsh/onvif.git
上記のリポジトリのサンプルコードであるexample3.jsは、キー入力で、ONVIF PTZコマンドを送信するもので、そのまま、利用させて頂きました。
$ npm install onvif $ npm install ketpress $ node example3.js
5 最後に
今回は、監視カメラを、Jetson Nanoから操作してみました。この仕組みで、Computer Visionの入力にズームや回転が可能な監視カメラを利用できるようになったと思います。