Raspberry Pi 4に、ZoneMinderをインストールしてみました。
ストリーミングカメラのモニタリング・録画・動体検出等が可能です。
前回のShinobiインストール時と同様に。
Raspberry Piにカメラモジュールを接続してストリーミングを行い。
そちらの映像を扱おうと考えておりましたが。
ストリーミングのオプションを調整することで、録画と動体検出はできるようになりました。しかしZoneMinder画面によるモニタリングはできていません。VLCで表示可能のため、運用上問題はありませんが、少し中途半端な状態です。
インストール手順を記録させて頂こうと思います。
Raspberry Pi OS 64ビット版のZoneMinderインストール手順
本体はRaspberry Pi 4を使用
CCTVカメラ映像の録画や動体検出を行うという目的から。性能が高く、大容量のUSBストレージから起動が可能なRaspberry Pi 4を使用します。
Raspberry Pi OS 64ビット版(Lite)をSSDにインストール
CCTVカメラの録画ということで、microSDカードではなくUSBストレージにRaspbery Pi OSをインストールしました。
2023年9月現在、最近出荷されているRaspberry Pi 4は、最初からUSB起動が可能です。USBストレージから起動しない場合は、こちらの記事で設定が可能です。
今回、lite版のRaspberry Pi OSを使用しましたが、通常版でも問題ありません。
Raspberry Pi OSのインストール手順はこちらの記事になります。
mariadb-serverのインストール
ZoneMinder本体のインストール前に。mariadb-serverをインストールしておきます。
sudo apt install mariadb-server
sudo mysql_secure_installation
英語の質問に答えて、パスワードやセキュリティの設定を行います。よくわからない場合は、こちらの記事を御覧ください。
mariadbの管理者(root)パスワードは、後でZoneMinderの設定で使用します。
ZoneMinder本体のインストール
本体のインストールは、公式資料を参考に進めました。
まずは、ZoneMinder本体をインストールします。
sudo apt install zoneminder
インストール後、zm.confファイルのグループを変更します。
sudo chgrp -c www-data /etc/zm/zm.conf
Debianのバージョンによっては、これでインストール完了の場合もありますが。
Raspberry Pi OSの場合、設定の続きがありました。
データベース作成
ZoneMinderで使用するデータベースを作成します。
次のコマンドになります。
cat /usr/share/zoneminder/db/zm_create.sql \
| sudo mysql --defaults-file=/etc/mysql/debian.cnf -u root -p
# mariadbのrootパスワード入力
echo 'grant lock tables,alter,create,select,insert,update,delete,index on zm.* to 'zmuser'@localhost identified by "zmpass";' \
| sudo mysql --defaults-file=/etc/mysql/debian.cnf mysql -u root -p
# mariadbのrootパスワード入力
ZoneMinderで使用するデータベースが作成されて、zmuserからアクセスできるようになりました。
nph-zmsパスの調整
ZoneMinderのプログラム本体は、上記のフォルダにあるようです。
nph-zmsパス設定を行います。
sudo vi /etc/zm/conf.d/01-system-paths.conf
# ZM_PATH_ZMS=/usr/lib/zoneminder/cgi-bin/nph-zms
zoneminder.service起動
パスの設定が完了しましたら、zoneminder.serviceを起動しました。
sudo systemctl enable zoneminder.service --now
apache設定zoneminder.conf有効化
apacheの設定を調整し、zoneminder.confを有効にします。
/etc/apache/conf-available/zoneminder.conf
ファイルのシンボリックリンクを、/etc/apache/conf-enabledに作りました。
cd /etc/apache2/conf-enabled/
sudo ln -s ../conf-available/zoneminder.conf .
sudo systemctl restart apache2.service
apacheを再起動して、設定変更を反映しました。
タイムゾーンはWebページから設定
php.iniファイルを編集して、タイムゾーンの設定が可能なそうですが。
私はphp.iniファイルではなく、後でWebページ上で設定しました。
vlc、ffmpegインストール
実際にカメラに接続する段階で、vlcやffmpegが入っていないと、うまく接続できず、エラーメッセージも表示されないという状態になります。
vlcとffmpegをインストールしておきましょう。
sudo apt install libvlc-dev libvlccore-dev vlc ffmpeg
ZoneMinderページ表示
以上で、ZoneMinder本体のインストールが完了しました。
下記のURLにアクセスします。pi4.localはRaspberry Piのホスト名になります。ご自身の環境にあわせて変更して下さい。
http://pi4.local/zm
最初はプライバシー警告が表示されます。スクロール後、画面右下の「APPLY」ボタンで次に進めます。
タイムゾーン設定
「Options」→「System」でシステム設定画面に移ります。
Asia Tokyoを選択しました。
言語設定は文字化けのため保留
実は、同じ画面で言語を設定できるのですが。LANG_DEFAULT設定です。文字化けして読めないため、英語表記に戻しました。
以上でWeb上の基本的な設定が完了しました。お疲れ様でした!
モニター(カメラ)の登録
次のステップとしまして。コンソール画面から、モニター(カメラ)を登録してゆく流れになります。
ZoneMinderに対応したカメラをお持ちの場合、登録して完了ですが。
先日作成した、Raspberry Piストリーミングカメラは、設定の調整が必要でした。
Raspberry Pi ストリーミングカメラ側の調整
こちらの記事で構築したRaspberry Piストリーミングカメラの場合。
作成したvideo-stream.shファイルを変更しました。
sudo systemctl stop video-stream.service
vi video-stream.sh
変更前の内容は、h.264ハードウェアエンコードしたストリーミングを、VLCのRTSPプロトコルで送信、rtspポート8554で待ち受ける内容でした。
#!/bin/sh
/usr/bin/libcamera-vid -t 0 --inline -o - \
--level 4.2 --denoise cdn_off \
--width 1920 --height 1080 \
| /usr/bin/cvlc stream:///dev/stdin \
--sout='#rtp{sdp=rtsp://:8554/stream1}' :demux=h264 \
--preferred-resolution 1080
ZoneMindeのlibvlcで認識できるように、コーデックはmjpeg(Motion JPEG)に変更、プロトコルもhttpに変更しました。画面サイズもすこし小さくしました。
#!/bin/sh
/usr/bin/libcamera-vid -n -t 0 --inline -o - \
--width 1280 --height 780 \
--codec mjpeg --denoise cdn_off \
| /usr/bin/cvlc stream:///dev/stdin \
--sout='#std{access=http, mux=ts, dst=:8554/stream1}' :demux=mjpeg \
--preferred-resolution 1080
今回、カメラモジュールV3を使用しました。オートフォーカスに対応したため、遠/近に関係なく、大変綺麗な画質で映像をストリーミングできます。
そのカメラモジュールV3のチューニングオプションに対応した内容は下記になります。
#!/bin/sh /usr/bin/libcamera-vid -n -t 0 --inline -o - \
--width 1280 --height 780 \
--codec mjpeg --denoise cdn_off \
--tuning-file /usr/share/libcamera/ipa/rpi/vc4/imx708_wide.json \
| /usr/bin/cvlc stream:///dev/stdin \
--sout='#std{access=http, mux=ts, dst=:8554/stream1}' :demux=mjpeg \
--preferred-resolution 1080
VLCから接続する場合は、下記のURLになります。
http://<Raspberry PiカメラのIPアドレス>:8554/stream1
こちらのカメラを、ZoneMinderに登録してみます。
ZoneMindeのモニター登録
コンソール画面に戻り、青い「ADD」ボタンをクリックします。
- Source Typeは「Libvlc」を選択
- Functionは「Mocord」を選択→動きがあれば録画
次に「Source」タブをクリックします。
- Source PathにURLを入力
- MethodはTCPを選択
- Target colorspaceは32 bit color
- Capture Resolutionは1280×720 720pを選択
「Save」ボタンで設定を保存しました。
モニターのイベント確認
登録したモニターの行、Function欄が「Captureing」と表示され、フレーム数(fps)が表示されれば、動き検出による録画が開始されています。
何かイベンがあると、動画が自動的に記録されます。
今回はコーデックにmjpegを選択したため、動画ではなく画像がフレーム数分保存されるかたちになります。
Events欄のリンクをクリックすると、実際のイベントの記録状況の確認画面を表示できます。
モニタリングはVLCを使用
今回のカメラ側の設定では、ZoneMinderでのモニター表示ができていません。
h.264ではなくmjpegを使用しましたが、記録はされますが表示がうまくいかない状況でした。
設定の問題なのか、コーデックやプロトコルの問題なのか、そのあたりもよくわかっていません。
以前作成しました、Raspberry Pi+カメラモジュールを使用しまして。
ZoneMinderで動き検出による録画ができるようになりました。
残念ながら、モニタリングは動いていません。
Raspberry PiカメラモジュールV3は、オートフォーカスに対応したため、遠近に関係なく大変綺麗な画像を得ることが可能です。
古めのRaspberry PiにカメラモジュールV3を取り付けて、防犯カメラ代わりに使用する場合は、このような構成で全く問題無い感じがします。
ZoneMinderの画面でモニタリングできませんが、VLCではモニタリングが可能です。
Raspberry Pi 4にスティックSSDを取り付ければ、長時間の録画が可能のため、容量の問題もありません。
ご興味が御座いましたら、ぜひお試し下さいませ。