監視カメラシステム構築(Motion)

最終更新日: 2017.11.22

<<トップページ

■概要

Motionを使用して監視カメラシステムを構築する。ここでは、ネットワークカメラ(有線LANまたは無線LAN経由でアクセスできるカメラ)またはUSBカメラ(サーバー機自体にUSB接続するカメラ)を監視カメラとして使用し、監視カメラが動きを検知した場合に自動で録画を開始し、動体検知をメールで通知するようにする。監視カメラの映像はWebブラウザでリアルタイムに視聴可能とする。また、録画した動画はWindowsクライアントから視聴可能とする。

【USBカメラ】

【ネットワークカメラ】

下記アプリをインストールしたスマホでも可
【iPhone】
ipCam - Mobile IP Camera


【Android】
IP Webcam
Google Play で手に入れよう


■Motionインストール

[root@centos ~]# rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm ← EPELリポジトリインストール※CentOS7の場合
[root@centos ~]# rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm ← EPELリポジトリインストール※CentOS6の場合

[root@centos ~]# rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm ← nux-dextopリポジトリインストール※CentOS7の場合
[root@centos ~]# rpm -Uvh http://li.nux.ro/download/nux/dextop/el6/x86_64/nux-dextop-release-0-2.el6.nux.noarch.rpm ← nux-dextopリポジトリインストール※CentOS6(64bit)の場合
[root@centos ~]# rpm -Uvh http://li.nux.ro/download/nux/dextop/el6/i386/nux-dextop-release-0-3.el6.nux.noarch.rpm ← nux-dextopリポジトリインストール※CentOS6(32bit)の場合

[root@centos ~]# yum -y install ffmpeg ffmpeg-devel libjpeg-turbo libjpeg-turbo-devel ← Motionインストールに必要なパッケージをインストール

[root@centos ~]# git clone https://github.com/Motion-Project/motion.git ← Motionダウンロード

[root@centos ~]# cd motion/ ← Motionダウンロード先ディレクトリへ移動

[root@centos motion]# autoreconf -fiv && ./configure && make && make install ← Motionインストール

[root@centos motion]# cd ← ホームディレクトリへ戻る

[root@centos ~]# rm -rf motion/ ← Motionダウンロード先ディレクトリを削除

■Motion設定

(1)Motion設定(基本)
[root@centos ~]# cp /usr/local/etc/motion/motion-dist.conf /usr/local/etc/motion/motion.conf ← Motion設定ファイルをサンプルをコピーして作成

[root@centos ~]# vi /usr/local/etc/motion/motion.conf ← Motion設定ファイル編集
# Start in daemon (background) mode and release terminal (default: off)
daemon on ← 常駐モードにする

# The video norm to use (only for video capture and TV tuner cards)
# Values: 0 (PAL), 1 (NTSC), 2 (SECAM), 3 (PAL NC no colour). Default: 0 (PAL)
norm 1 ← 映像規格を1(NTSC)にする

# Draw the number of changed pixed on the images (default: off)
# Will normally be set to off except when you setup and adjust the motion settings
# Text is placed in upper right corner
text_changes on ← 動画の右上に変更ピクセル数を書き込む※本オプションをonにした状態の動体検知結果より、検知して欲しい最小値を後述する動体検知閾値(thresholdオプション)に指定する

# Threshold for number of changed pixels in an image that
# triggers motion detection (default: 1500)
threshold 1500 ← 動体検知閾値を指定※text_changesオプションで調査する

# Output 'normal' pictures when motion is detected (default: off)
# Valid values: on, off, first, best, center
# When set to 'first', only the first picture of an event is saved.
# Picture with most motion of an event is saved when set to 'best'.
# Picture with motion nearest center of picture is saved when set to 'center'.
# Can be used as preview shot for the corresponding movie.
output_pictures off ← 写真は保存しない

# Draws the timestamp using same options as C function strftime(3)
# Default: %Y-%m-%d\n%T = date in ISO format and time in 24 hour clock
# Text is placed in lower right corner
text_right %Y-%m-%d\n%T ← 動画の右下にYYYY-MM-DD\nhh:mm:ssの形式で撮影日時を書き込む

# Draw a user defined text on the images using same options as C function strftime(3)
# Default: Not defined = no text
# Text is placed in lower left corner
text_left CAMERA %t ← 動画の左下にCAMERA xの形式でカメラ番号を書き込む

# Target base directory for pictures and films
# Recommended to use absolute path. (Default: current working directory)
#target_dir /tmp/motion
target_dir /var/motion ← 動画保存先ディレクトリを指定

# File path for motion triggered ffmpeg films (movies) relative to target_dir
# Default: %v-%Y%m%d%H%M%S
# File extensions(.mpg .avi) are automatically added so do not include them
movie_filename CAMERA%t_%Y%m%d%H%M%S ← 動画保存ファイル名をCAMERAx_YYYYMMDDHHMMSS.aviのような形式にする

# Restrict stream connections to localhost only (default: on)
stream_localhost off ← カメラ映像を自ホスト以外にも配信

# Restrict control connections to localhost only (default: on)
webcontrol_localhost off ← Webインタフェースでの制御を自ホスト以外にも許可

# Command to be executed when a movie file (.mpg|.avi) is created. (default: none)
# To give the filename as an argument to a command append it with %f
on_movie_start /usr/local/bin/motion_notify.sh %f %t ← 動画撮影開始時に動体検知通知スクリプトを起動※スクリプト作成は後述

##############################################################
# Camera config directory
# Any files ending in '.conf' in this directory will be read
# as a camera config file.
##############################################################

camera_dir /usr/local/etc/motion/conf.d ← カメラごと設定ファイル格納先ディレクトリを指定

[root@centos ~]# mkdir /var/motion ← 動画保存先ディレクトリ作成

[root@centos ~]# mkdir /usr/local/etc/motion/conf.d ← カメラごと設定ファイル格納先ディレクトリ作成

(2)Motion設定(カメラごと)
カメラごとに設定ファイルを作成する。ここでは、USBカメラ(ロジクール キューカム オービット AF QCAM-200R)、ネットワークカメラ(Vstarcam IP camera-C7823WIPipCamアプリをインストールしたiPhone、IP WebcamアプリをインストールしたAndroidスマホ)を監視カメラとする。
USBカメラをサーバーへ接続

[root@centos ~]# lsusb ← USBカメラ認識確認
Bus 002 Device 003: ID 046d:08c2 Logitech, Inc. QuickCam PTZ

[root@centos ~]# ll /dev/video0 ← ビデオデバイス確認
crw-rw---- 1 root video 81, 0 11月  9 18:36 /dev/video0

[root@centos ~]# vi /usr/local/etc/motion/conf.d/camera1.conf ← カメラごと設定ファイル作成(camera1)※USBカメラの例
# USBカメラ定義
videodevice /dev/video0

# フレーム幅
width 640

# フレーム高
height 480

# フレームレート
framerate 30

# カメラ映像配信用ポート番号
stream_port 8081 ← ポート番号はカメラごとに変更すること

# 動画配信用フレームレート※framerateオプションと同じ値を指定
stream_maxrate 30

[root@centos ~]# vi /usr/local/etc/motion/conf.d/camera2.conf ← カメラごと設定ファイル作成(camera2)※ネットワークカメラの例
# ネットワークカメラのURL(iPhoneのipCamアプリの場合)
# ※ネットワークカメラのURL検索(http://www.ispyconnect.com/sources.aspx)
netcam_url http://ipCamアプリをインストールしたiPhoneのIPアドレス/video.mjpg

# フレーム幅
width 480

# フレーム高
height 360

# フレームレート
framerate 15

# カメラ映像配信用ポート番号
stream_port 8082 ← ポート番号はカメラごとに変更すること

# 動画配信用フレームレート※framerateオプションと同じ値を指定
stream_maxrate 15

[root@centos ~]# vi /usr/local/etc/motion/conf.d/camera3.conf ← カメラごと設定ファイル作成(camera3)※ネットワークカメラの例
# ネットワークカメラのURL(AndroidのIP Webcamアプリの場合)
# ※ネットワークカメラのURL検索(http://www.ispyconnect.com/sources.aspx)
netcam_url http://IP WebcamアプリをインストールしたAndroidスマホのIPアドレス:8080/videofeed

# フレーム幅
width 640

# フレーム高
height 480

# フレームレート
framerate 30

# カメラ映像配信用ポート番号
stream_port 8083 ← ポート番号はカメラごとに変更すること

# 動画配信用フレームレート※framerateオプションと同じ値を指定
stream_maxrate 30

[root@centos ~]# vi /usr/local/etc/motion/conf.d/camera4.conf ← カメラごと設定ファイル作成(camera4)※ネットワークカメラの例
# ネットワークカメラのURL(Vstarcam IP camera-C7823WIPの場合)
# ※ネットワークカメラのURL検索(http://www.ispyconnect.com/sources.aspx)
netcam_url rtsp://admin:パスワード(初期値は888888)@C7823WIPのIPアドレス:10554/tcp/av0_0

# フレーム幅
width 640

# フレーム高
height 480

# フレームレート
framerate 30

# カメラ映像配信用ポート番号
stream_port 8084

# 動画配信用フレームレート※framerateオプションと同じ値を指定
stream_maxrate 30

(3)動体検知通知スクリプト作成
[root@centos ~]# yum -y install nkf ← nkfインストール

[root@centos ~]# vi /usr/local/bin/motion_notify.sh ← 動体検知通知スクリプト作成
#!/bin/sh

# メール通知先定義
MAILTO=動体検知通知先メールアドレス

# メール本文定義
MESSAGE=`mktemp`
echo "監視カメラ(${2})で動きを検知しました" >> ${MESSAGE}

# 動画よりサムネイル画像作成
THUMB=`basename ${1} | sed 's/\.[^\.]*$//'`
/usr/bin/ffmpeg -y -i ${1} -ss 0 -vframes 1 -f image2 /tmp/${THUMB}.jpg > /dev/null 2>&1

# メール通知
cat ${MESSAGE} | mail -a /tmp/${THUMB}.jpg -s `echo 監視カメラ\(${2}\)動体検知通知 | nkf -M` ${MAILTO}

# 後始末
rm -f ${MESSAGE} /tmp/${THUMB}.jpg

[root@centos ~]# chmod +x /usr/local/bin/motion_notify.sh ← 動体検知通知スクリプトへ実行権限付加

(4)撮影動画定期自動削除設定
[root@centos ~]# yum -y install tmpwatch ← tmpwatchインストール

[root@centos ~]# vi /etc/cron.daily/motion_clean ← 撮影動画定期自動削除スクリプト作成
#!/bin/sh

# 撮影動画保存日数定義(例:7日)
KEEP_DAYS=7

# 保存日数を超えた動画を削除
tmpwatch -m $((${KEEP_DAYS}*24)) /var/motion

[root@centos ~]# chmod +x /etc/cron.daily/motion_clean ← 撮影動画定期自動削除スクリプトに実行権限付加

■Motion起動

(1)Motion起動※CentOS7の場合
[root@centos ~]# cp /usr/local/share/motion/examples/motion.service /usr/lib/systemd/system/ ← Motion起動定義を所定のディレクトリへコピー

[root@centos ~]# systemctl enable motion ← Motion自動起動設定

[root@centos ~]# systemctl start motion ← Motion起動

(2)Motion起動※CentOS6の場合
[root@centos6 ~]# wget https://github.com/Motion-Project/motion/archive/release-3.4.1.tar.gz ← 旧バージョンのMotionをダウンロード

[root@centos6 ~]# tar zxvf release-3.4.1.tar.gz ← 旧バージョンのMotionを展開

[root@centos6 ~]# cp motion-release-3.4.1/motion.init-Fedora.in /etc/rc.d/init.d/motion ← Motion起動スクリプトを所定のディレクトリへコピー

[root@centos6 ~]# chmod +x /etc/rc.d/init.d/motion ← Motion起動スクリプトへ実行権限付加

[root@centos6 ~]# ln -s /usr/local/bin/motion /usr/bin/motion ← Motion起動コマンドを/usr/bin/motionで実行できるようにする

[root@centos6 ~]# /etc/rc.d/init.d/motion start ← Motion起動

[root@centos6 ~]# chkconfig motion on ← Motion自動起動設定

[root@centos6 ~]# rm -rf release-3.4.1* ← ダウンロードしたファイルと展開先ディレクトリを削除

(3)ポート開放
【ファイアウォール】
サーバー側のファイアウォール設定で、TCP8080番ポート、カメラ映像配信用ポートへのアクセスを許可するようにする。

■Motion確認

http://サーバーIPアドレス:8080/にアクセスしてMotion制御ページ、カメラ映像が表示されること※IEではカメラ映像は表示されない(Chrome、Edge、Firefoxでは表示される)
http://サーバーIPアドレス:8081/にアクセスして監視カメラ1の映像を視聴できること※IE、Edgeでは視聴できない(Chrome、Firefoxでは視聴できる)
□動体検知時にメール通知されること



■Motion操作

【監視開始】
http://サーバーIPアドレス:8080/0/detection/startへアクセス

【監視停止】
http://サーバーIPアドレス:8080/0/detection/pauseへアクセス

【監視状態確認】
http://サーバーIPアドレス:8080/カメラID(例:1)/detection/statusへアクセス
ACTIVEの場合は監視中状態
PAUSEの場合は監視停止状態

■Motion自動監視設定

特定の日時に自動で監視開始/停止するようにする。ここでは、jpholidaypを使用して平日土日祝日を判別して、平日または土日祝日の特定時間帯を自動で監視するようにする。
[root@centos ~]# yum -y install PyYAML ← PyYAMLインストール

[root@centos ~]# git clone https://github.com/emasaka/jpholidayp ← jpholidaypダウンロード

[root@centos ~]# mv jpholidayp/jpholidayp /usr/local/bin/ ← jpholidaypを所定のディレクトリへ移動

[root@centos ~]# rm -rf jpholidayp/ ← ダウンロードしたファイルを削除

[root@centos ~]# jpholidayp ; echo $? ← jpholidayp確認
0 ← 本日が土日祝日の場合
1 ← 本日が平日の場合

[root@localhost ~]# vi /etc/cron.d/motionMotion ← 自動監視設定ファイル作成
# 平日日中帯(例:8:00〜17:00)監視する場合
# ※平日8:00に監視開始して平日17:00に監視停止
0  8 * * * root /usr/local/bin/jpholidayp || (wget -q -O - http://localhost:8080/0/detection/start > /dev/null && echo Motion Detection started | logger -t motion.cron)
0 17 * * * root /usr/local/bin/jpholidayp || (wget -q -O - http://localhost:8080/0/detection/pause > /dev/null && echo Motion Detection stopped | logger -t motion.cron)

# 平日夜間帯(例:17:00〜8:00)と土日祝日24時間監視する場合
# ※平日17:00に監視開始して平日8:00に監視停止=土日祝日は停止しない
0 17 * * * root /usr/local/bin/jpholidayp || (wget -q -O - http://localhost:8080/0/detection/start > /dev/null && echo Motion Detection started | logger -t motion.cron)
0  8 * * * root /usr/local/bin/jpholidayp || (wget -q -O - http://localhost:8080/0/detection/pause > /dev/null && echo Motion Detection stopped | logger -t motion.cron)

■Apache設定※監視カメラ映像を外部から視聴する場合

監視カメラ映像を外部からWebブラウザで視聴できるようにする。
Apache暗号化通信パスワード認証が導入済であること
[root@localhost ~]# vi /etc/httpd/conf.d/motion.conf ← Apache用Motion設定ファイル作成
# 内部またはBASIC認証済の場合のみアクセス許可
<Location /motion>
    SSLRequireSSL
    AuthUserFile /etc/httpd/conf/.htpasswd
    AuthName "secret page"
    AuthType Basic
    require valid-user
    <RequireAny>
        Require all denied
        Require ip 10.0.0.0/8
        Require ip 172.16.0.0/12
        Require ip 192.168.1.0/24
        Require valid-user
    </RequireAny>
</Location>

# CAMERA1
ProxyPass /motion/camera1/ http://127.0.0.1:8081
ProxyPassReverse /motion/camera1/ http://127.0.0.1:8081

# CAMERA2
ProxyPass /motion/camera2/ http://127.0.0.1:8082
ProxyPassReverse /motion/camera2/ http://127.0.0.1:8082

# CAMERA3
ProxyPass /motion/camera3/ http://127.0.0.1:8083
ProxyPassReverse /motion/camera3/ http://127.0.0.1:8083

# CAMERA4
ProxyPass /motion/camera4/ http://127.0.0.1:8084
ProxyPassReverse /motion/camera4/ http://127.0.0.1:8084

[root@centos ~]# systemctl reload httpd ← Apache設定反映※CentOS7の場合
[root@centos ~]# /etc/rc.d/init.d/httpd reload ← Apache設定反映※CentOS6の場合

□内部からhttps://サーバー名/motion/camera1/にアクセスして認証なしで監視カメラ1の映像を視聴できること
□外部からhttps://サーバー名/motion/camera1/にアクセスして認証なしで監視カメラ1の映像を視聴できないこと
□外部からhttps://サーバー名/motion/camera1/にアクセスして認証ありで監視カメラ1の映像を視聴できること

■Samba設定※録画をWindowsから視聴する場合

録画をWindowsから視聴できるようにする。
Samba導入済であること
[root@centos ~]# vi /etc/samba/smb.conf ← Samba設定ファイル編集
下記を追加
[motion]
   comment = Motion
   path = /var/motion
   valid users = user1 ← user1ユーザーのみアクセス許可する場合
   
[root@centos ~]# systemctl reload smb ← Samba設定反映※CentOS7の場合
[root@centos ~]# /etc/rc.d/init.d/smb reload ← Samba設定反映※CentOS6の場合

\\サーバーIPアドレス\motionにアクセスしてフォルダ内の録画を視聴できること
※動画を視聴できない場合はVLC media playerをインストールすること


■関連コンテンツ




▲このページのトップへ戻る

Copyright© 2005-2017 fallenangels, All rights reserved.
ご自由にリンクしてください(連絡は不要です)
本ページへのご意見・ご要望、誤字・脱字・リンク切れ等のご連絡はこちらからお願いします