OSSの監視カメラサーバーZoneMinderを構築する

Linux

OSSの監視カメラサーバーZoneMinderを構築しましたので手順を記載します。

ZoneMinderはOSSのため、無料で利用できますし、常時録画やモーション検知録画も出来ますので、市販ソフトと比べても遜色はないです。

カメラ10台程度の小規模事務所であればこのシステムで必要十分と思います。

システム環境

構築を行ったシステム環境は以下の通りです。

今回はProxmox仮想サーバー上に、Ubuntu22.04LTSを構築し、さらにその上にOSSのZoneMinderを構築しています。

  • 仮想サーバー:ProxmoxVE8 (core i7-10700 8C/16T) メモリ:32G
  • OS:Ubuntu22.04LTS Mem: 8G LAN:vmbr0, vmbr1(2NIC)
  • PoE L2スイッチ:Aruba 2530-8G-PoEP
  • ZoneMinder: Ver1.36 → Ver1.37(development Ver.)

ZoneMinder Ver.1.37から日本語対応が支障のないレベルまでアップグレードされていることから、バージョンアップ方法についても記載します。

Ver1.37は若干の未完成部分はあるものの、基本の機能動作は支障なく動きます。

LAN帯域に注意

ネットワークカメラは、LANの帯域をMbpsレベルで占有することから、複数のカメラを接続する場合は、LAN線を分けて構築するようにします。

筆者の場合、サーバー側にNICを増設し、Proxmoxのコンソールと物理LANを分けて、VLANが構築できるL2スイッチに接続し、ネットワークが輻輳しないようにしました。

対応カメラについて

ZoneMinderは、RTSP(Onvif規格)に対応しているカメラであれば、まず接続できます。

またOnvif対応以前の古いカメラにも対応しており扱える場合があります。

今回は中古で購入したi-pro(旧Panasonic) WV-6110を使いました。

中古NWカメラは日本語対応が完璧で、ファームが公開されているi-pro製がおすすめです。

インストール手順

Proxmox上にOS構築後の手順を説明します。

OSアップデートを確認する。

# apt update
# apt upgrade

LAMP環境(Webサーバー)のインストールと起動(Apache,MySQL,PHP)を行う

※LAMP(ランプ)とは、OSであるLinux、WebサーバであるApache HTTP Server、データベースであるMySQL、スクリプト言語であるPerl、PHP、Pythonを総称した頭文字の造語。

# apt install apache2 mysql-server php
# systemctl enable --now apache2 mysql

#動作確認もやっておく
# systemctl status apache2 mysql

ZoneMinder PPAリポジトリの追加

初回インストールはLTS版であるver.1.36を設定する。

# add-apt-repository ppa:iconnor/zoneminder-1.36

追加したPPAリポジトリでupdateを行いZoneMiderをインストールする。

# apt update
# apt upgrade

# apt install zoneminder

SQL設定ファイル(/etc/mysql/my.cnf)をバックアップして編集する。

# rm /etc/mysql/my.cnf
# cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf

# nano /etc/mysql/my.cnf
ファイルの最終行に「sql_mode = NO_ENGINE_SUBSTITUTION」を追加

Apacheの環境設定し、Apache有効化とZoneMinderコンフィグファイルの適用を行う。

Apache環境設定
# chmod 740 /etc/zm/zm.conf
# chown root:www-data /etc/zm/zm.conf
# chown -R www-data:www-data /usr/share/zoneminder/

Apache有効化
# a2enmod cgi rewrite expires headers

ZoneMinderコンフィグファイルの適用
# a2enconf zoneminder

PHP設定ファイル内のタイムゾーンを変更する。

# nano /etc/php/8.1/apahce2/php.ini

[Date]の項目内、date.timezone = へ「Asia/Tokyo」を追加

ZoneMinderを起動する

# systemctl enable zoneminder
# systemctl start zoneminder

apacheをリロード
# systemctl reload apache2

ブラウザから http://192.168.0.140/zm/ のようにアクセスし、ZoneMinderのコンソール画面がでればインストールは完了です。

ZoneMinderのアップデート手順

開発バージョンにバージョンアップすることで、日本語対応がほぼ実用レベルになります。

公式ではソースからコンパイルする手法になりますが、いろいろ調べたところ、以下手順で簡単に行えることがわかりました。

PPAリポジトリにzoneminderの開発バージョンを追加し、apt updateします。

# add-apt-repository ppa:iconnor/zoneminder-master
# apt update
# apt install zoneminder

PPAデータベースの更新をします。

# mysql -u root -p zm < /usr/share/zoneminder/db/zm_update-1.37.71.sql

”zm_update-1.37.71.sql”はディレクトリ内を見て、最新バージョンに書き換えてください

Apacheの設定と再起動をします。

# a2enmod cgi
# systemctl restart apache2

ZoneMinderにアクセスし、バージョンが上がっていたらアップデート成功です。

ZoneMinderの初期セットアップ

Apacheで起動が確認できましたら初期セットアップします。

日本語化

Option→System→LANG_DEFAULTからja_jpを選択します。

カメラ登録

コンソールから「+追加」を選択します。

右上のWiFiマークをクリックします。

モニタープローブ画面でインタフェース、カメラ選択、カメラのユーザー、パスワードを入力し、次へをクリック

検出されたプロファイルをプルダウンすると、カメラが出力しているストリームがでるため、通常は最大解像度を選びます。

カメラがMulticastで送出している場合は、Multicastを選択します。

カメラの設定画面で「保存」をクリックします。

コンソールタブでカメラが表示されていれば登録設定は完了です。

モニター一覧画面

モンタージュを選ぶと接続されたカメラのリアルタイム画像が見れ、一覧で監視することができます。

カメラ画像は列数指定で選べます。

通常の監視時はこの画面を表示しておくと良いでしょう。

イベント検知エリア設定

コンソール画面の右端にあるソースの数字をクリックします。

赤く囲まれた部分がモーション検知エリアです。

検知エリアはドラッグすることで変更が可能です。

録画設定

カメラ設定の録画タブで録画モードを選択できます。

  • なし:録画しません
  • 動き・検知など:モーション検知時前後のみ録画します
  • 常に:常時録画します。

録画再生

録画設定をするとカメラ画面の下部に録画データが並び、クリックすると録画再生ができます。

モーション検知が行われた場合は、Eventという表示になります。

Ver.1.37以上の場合、検知した部分が赤くハイライトされており、確認が容易になります。

ユーザー設定

オプション→ユーザーでユーザー単位の権限設定ができます。

まとめ

ZoneMinderは市販ソフトにも迫る機能を持っていますが、以下の課題があるように思います。

  • モーション検知機能:市販品は人や車などのAI検知が出来るようになっていますが、ZoneMinderはまだ動体検知のみです(といっても事務所監視用としては必要十分)
  • カメラ台数に対する必要ハードスペックの目安がない:カメラ台数に対して必要とするハードスペックが明示されていません。事前の実証確認は必須でしょう。

Linux上で動かしているので安定稼働できるOSSですが、高負荷の処理を継続して行っているため、Zabbix-Agent2を使って定常監視し、LANインタフェースやスワップ領域に異常があるなら、必要に応じて再起動はしたほうが良いと思います。