Shinobiとは
自宅では防犯目的やペットの見守り、職場では計算機室や倉庫の監視目的でカメラを設置している場合もあるでしょう。今回はそういったカメラを利用して、CCTV
ShinobiはNode.
- 一つの画面で同時に複数のカメラの映像を見たいが、実現のために追加で有料のアプリを購入が必要なので二の足を踏んでいる
- カメラの録画やスナップショット撮影を行いたいが、様々な都合からメーカーの用意しているツールやサービスを使用したくない・
できない - 動体検知で入室してきた人・
物を録画したい - カメラの用意しているWeb画面が古くて、Internet Exploer
(現在は Microsoft EdgeのIE mode) でないとまともに使用できず、困っている
なお、本記事で利用するカメラは、Real Time Streaming Protocol
Shinobiのインストール
Ubuntu 22.
なお実機にインストールする場合は、Shinobiそのものを動かすために Node.
さて、dockerを利用するために、docker-compose.
version: '3'
services:
shinobi:
image: registry.gitlab.com/shinobi-systems/shinobi:dev
container_name: shinobi
ports:
- 8080:8080
volumes:
- ${PWD}/Shinobi/config:/config
- ${PWD}/Shinobi/customAutoLoad:/home/Shinobi/libs/customAutoLoad
- ${PWD}/Shinobi/database:/var/lib/mysql
- ${PWD}/Shinobi/videos:/home/Shinobi/videos
- ${PWD}/Shinobi/plugins:/home/Shinobi/plugins
- /dev/shm/Shinobi/streams:/dev/shm/streams
- /etc/localtime:/etc/localtime:ro
補足しておくと、Shinobiは8080番ポートで待ち受けるため、コンテナの8080番ポートをホストの任意のポートにフォワードする必要があります。この例ではホスト側も8080番ポートに設定していますが、既に使用されている場合は適当なポートに読み替えてください。また、ボリュームに設定している各ディレクトリの役割はShinobiのドキュメントを参照してください。
その後docker-compose up
とコマンドを入力して、Shinobiを起動します。
Shinobiの初期設定
Shinobiが起動したら、Webブラウザからhttp://<コンテナホストのIPアドレス>:8080/
へアクセスします。
ログイン画面が表示されますので、デフォルトのスーパーユーザーのメールアドレス[1]とパスワードであるadmin@shinobi.
とadmin
を入力してログインします
ログイン後、管理画面に遷移します。まずはPreferenceタブを選択して、スーパーユーザのIDとパスワードをデフォルトから更新しておきましょう
スーパーユーザーからではカメラの登録や映像の確認ができませんので、新規にユーザーアカウントを作成します。管理画面のAccountsタブを選択し、
アカウント作成後、Webブラウザからhttp://<コンテナホストのIPアドレス>:8080/
へアクセスし、一般ユーザ用ログイン画面
カメラの登録
ダッシュボード左ペインの
設定項目がたくさんありますが、Shinobiのダッシュボードからカメラの映像を確認したいのであれば、大抵のカメラの場合、以下を設定する形になります。
- Identityセクションの
「Name」 にカメラを識別するための分かりやすい名前を入力する (図7) - Connectionセクションの
「Full URL Path」 にカメラの RTSPストリームのURLを入力する (図8) [3][4]
ただし、筆者の所持しているカメラでは、なぜかConnectionセクションの
今回は筆者が対応したカメラを所持していなかったため動作を確認できなかったのですが、ネットワークカメラのインターフェイス互換性に関する規格であるONVIF
Connectionセクションの
なお、ONVIF用ポートはダッシュボード左ペインにある
設定が終了したら、画面右下の
もし登録したいカメラが複数ある場合は、カメラの台数ぶん登録作業を繰り返します。
登録したカメラの映像はダッシュボード左ペインの
動体検知
冒頭で言及したように、入退室や侵入者の記録用途で動体検知を行えます[5]。
実際に試してみましょう。ダッシュボード左ペインの
メニューから
動体検知はデフォルトではカメラが撮影している全領域を対象にしています。カメラの一部の領域のみを検知の対象にしたい場合は、
動体検知を有効にすると、Shinobiが動体検知を行った前後の映像を録画してくれます。録画された動画は、ダッシュボード左ペインの
v4l2rtspserverでWebカメラをネットワークカメラにする
RTSP対応のネットワークカメラが手元になくても、Webカメラは所持しているケースはあるのではないでしょうか。その場合は、v4l2rtspserverを利用してWebカメラをネットワークカメラ化できます。
ただ、v4l2rtspserverもShinobi同様にUbuntu 22.
- v4l2loopbackを用いてv4l2loopbackデバイスを用意する
- Webカメラの映像をv4ltoolsに含まれるv4l2compressで圧縮し、v4l2loopbackデバイスへ出力する
- v4l2rtspserverにはv4l2loopbackデバイスを用いて、RTSPを配信する
Webカメラ -- (v4l2compress による H.264 圧縮)
--> v4l2loopback device
--> v4l2server
--> (RTSPでの配信)
では実際に試してみましょう。dockerのホスト側でv4l2loopback-dkmsをインストールします。また、Webカメラやv4l2loopbackデバイスの確認のためにv4l-utilsも併せてインストールします。
$ sudo apt install v4l2loopback-dkms linux-modules-extra-$(uname -r) v4l-utils
インストール後、modprobeでv4l2loopbackモジュールをロードします。video_
$ sudo modprobe v4l2loopback video_nr=10
再起動するとモジュールはアンロードされてしまうため、永続化させる場合は/etc/
$ sudo sh -c "echo 'v4l2loopback' >> /etc/modules-load.d/modules.conf" $ sudo sh -c "echo 'options v4l2loopback video_nr=10' > /etc/modprobe.d/v4l2loopback.conf" $ sudo modprobe v4l2loopback
モジュールをロードすると、/dev/
$ v4l2-ctl -d /dev/video10 --info Driver Info: Driver name : v4l2 loopback Card type : Dummy video device (0x0000) Bus info : platform:v4l2loopback-000 Driver version : 5.15.39 Capabilities : 0x85200003 Video Capture Video Output Read/Write Streaming Extended Pix Format Device Capabilities Device Caps : 0x05200003 Video Capture Video Output Read/Write Streaming Extended Pix Format Driver Info: Driver name : v4l2 loopback Card type : Dummy video device (0x0000) Bus info : platform:v4l2loopback-000 Driver version : 5.15.39 Capabilities : 0x85200003 Video Capture Video Output Read/Write Streaming Extended Pix Format Device Capabilities Device Caps : 0x05200003 Video Capture Video Output Read/Write Streaming Extended Pix Format
Webカメラが一つだけ繋がっている場合は/dev/v4l2-ctl --list-device
で確認できます。
次に、v4l2tools(v4l2compress)とv4l2rtspserverを起動するdocker-compose.
version: '3'
services:
v4l2tools:
image: mpromonet/v4l2tools
container_name: v4l2tools
devices:
- /dev/video0
- /dev/video10
command:
- -fH264
- /dev/video0
- /dev/video10
restart: unless-stopped
v4l2rtspserver:
image: mpromonet/v4l2rtspserver
container_name: v4l2rtspserver
ports:
- 8554:8554
devices:
- /dev/video10
entrypoint: "/bin/sh -c 'sleep 3 && /usr/local/bin/v4l2rtspserver /dev/video10'"
depends_on:
- v4l2tools
その後docker-compose up
とコマンドを入力して、コンテナを起動します。
v4l2rtspserverはrtsp://<コンテナホストのIPアドレス>:8554/
のURLでRTSPストリームを提供します。Shinobiのカメラ登録時にはこのURLを使用してください[6]。