Raspberry Pi - Motion

前回の記録: Raspberry Piセットアップ
前回にてArchLinuxのセットアップも完了し,いよいよ監視カメラとしての機能を追加してゆく時が来た. RPiには"motion"という名のパッケージがあり,これだけインストールすればUSBカメラ(Webカメラ)や純正のカメラを入力装置として直ぐに使うことが出来る様になる. また,motionという名から察することが出来る通り動き検知能力も備えているので,カメラからの映像に動き(変化)があった時にのみその映像を記録するよう設定も可能だ. ではインストール.

motionのインストール

パッケージ"motion"はArchLinuxの場合pacmanにてインストールが出来る.
sudo pacman -S motion
管理者でログインしている場合はsudoを省略出来る. 一般ユーザでログインしている場合は次いでパスワードを入力し続行. これだけでカメラのドライバと記録用ソフトウェアの両方がインストールされる. 映像として記録を残せるように"ffmpeg"というエンコーダもインストールしておくと便利. motionはカメラからの映像をJPEG(画像)として記録するのだが,ffmpegと併用することでこの画像をつなぎ合わせ,ひとつのAVI(映像)へとまとめてくれるようになる. 大量の画像ファイルを相手にするよりも,ひとまとまりになった映像を確認して行く方が利便性が高いのでおすすめ. これもpacmanから,
sudo pacman -S ffmpeg
でインストールする. 以上でmotionを利用するための準備は出来たので,これからその設定を行ってゆこう.

motionのセットアップ

  まずはmotionのプロセスID用ディレクトリを作成する. おまけだが,ホームディレクトリ直下に撮影した画像/映像を保存するためのディレクトリも作成しておくと後々便利だ.
sudo mkdir -p /var/run/motion
mkdir ~/motion
次にmotion.confなる設定ファイルを編集する. 以後,motionの動作や設定を変更したくなった場合には,次のコマンドにより設定ファイルを開き,編集,保存しよう.
sudo nano /etc/motion/motion.conf
このファイルの内容を編集することで設定を適用する. デフォルト値でも十分に機能するが,以下の項目を設定し直すことでより使い勝手の良い監視システムを構築できる.

項目説明(デフォルト値): 意味

  • daemon(off): 起動と共にmotionをバックグラウンドで立ち上げたい場合にはon.
  • norm(0): ビデオ標準形式. 日本では1と入力しNTSCを選択.
  • width(352): 撮影する画像の横幅をピクセル数で指定.
  • height(288): 撮影する画像の縦長をピクセル数で指定.
  • framerate(1): 一秒間に何枚の画像を撮影するか. 2くらいが良い.
  • max_mpeg_time(0): ひとつの映像を最長何秒まで保存するか. 300くらいが良い.
  • ffmpeg_cap_new(on): 監視画像を映像として保存したい場合にはon.
  • target_dir: 画像/映像の保存先ディレクトリ. ここでは~/motionとする.
  • webcam_port(8081): ウェブカムとして利用しない場合には0として無効化する.
  • on_picture_save: 画像を保存した直後に実行したいコマンドを入力する.
  • on_movie_end: 映像をエンコードし終えた時に実行したいコマンドを入力する.
以上お好みに設定を終えたらCtrl+X,Y,Enterの順にキーを押して上書き保存をしよう. もしdaemonをonに設定した場合は,次のコマンドでmotionをスタートアップへ登録する.
sudo systemctl enable motion
daemonがoffの場合は,
sudo motion
とmotionを実行すれば,監視画像を録画し始める. この場合,録画を停止したいならばCtrl+Cを押下してプロセスをキャンセルする. ここで問題となるのが,記録された画像/映像の閲覧方法. 私はここで次の2つを提案する.
  1. RPiをサーバ化して他PCからディレクトリへアクセス,閲覧する方法.
  2. RPiが保存した画像/映像を自動でFTPサーバへアップロードする方法.
どちらもローカルネットワーク上のコンピュータにて映像を確認する方法である. 1のメリットは設定が簡単なこと. ただし,RPiのSDカード容量を圧迫する. 2のメリットはSDカードを圧迫せずに他コンピュータなりFTPサーバへ映像を逃がせること. ただし,設定が少々込み入っている.

RPiをサーバにする場合

RPiに"samba"をインストールすると,RPiをファイルサーバ化出来る. この状態で他PCからRPiへ接続すれば監視映像を閲覧出来る. sambaはpacman経由でインストール可能.
sudo pacman -S samba
次にsambaの設定ファイルを書く.
sudo nano /etc/samba/smb.conf
内容は,
[global]
workgroup = WORKGROUP
security = user

[data]
path = ~/motion
public = yes
writable = yes
hosts allow = 192.168.
簡単に説明を. workgroupの項は自身のネットワークに合わせて変更する. pathは共有したいフォルダを選択すれば良い. 今回はmotionが撮影した画像の収まった"motion"というフォルダを共有している. writableをnoにすると読み出し専用になる. hosts allowには接続を許可するIPアドレスの範囲を指定する. 一般に家庭では192.168.から始まるクラスCのIPアドレスを利用しているので,このような設定とした. また追加項目でhosts denyを設定すると接続を拒否したいIPアドレスの範囲も指定することが出来るようになる. その他詳細な設定項目についてはwww.samba.gr.jp//smb.conf.5.htmlを参照されたい.
設定を終えたらsamba用のユーザを登録する. ここで登録するユーザ名とパスワードを入力することでpathに設定したフォルダを共有(閲覧あるいは編集)されるようになる.
sudo smbpasswd -a ユーザ名
としてユーザ名とそれに対応するパスワードを登録する. ここで登録するユーザ名はRPiにログインしているユーザ名と同じにすると良い. 最後に,
sudo systemctl start smbd.service
としてsambaのデーモン(バックグラウンドタスク)を起動する. 起動が確認できたら,
sudo systemctl enable smbd.service
としてシステムへ追加すれば,rebootしても勝手にデーモンが立ち上がるようになる.
同一ネットワークにある他のコンピュータからRPiのIPアドレス(またはホスト名)にてsmbプロトコルで接続すると,ユーザ名とパスワードを要求されるのでsmbpasswdで登録したユーザ名とパスワードを入力する. これでRPi内のフォルダやファイルを閲覧/編集出来るようになった.

FTPサーバへアップロードする場合

  先の準備として,RPiと同一ネットワークにあるコンピュータをFTPサーバにしておく. Macの場合はターミナルに,
sudo -s launchctl load -w /System/Library/LaunchDaemons/ftp.plist
と入力することでFTPサーバ機能が起動する. なお,上コマンドのloadをunloadにした,
sudo -s launchctl unload -w /System/Library/LaunchDaemons/ftp.plist
を実行するとFTPサーバ機能が停止する.
Windowsの場合はPablo Software SolutionsのQuick 'n Easy FTP Serverをダウンロードして利用すると良い. 起動後のウィザードに従って,ユーザ名とパスワード等を設定するだけでWindowsマシンがFTPサーバ化する.
motionには画像を撮影した直後毎に任意のコマンドを実行してくれる機能がある. motion.conf中の"on_picture_save"という項目である(撮影された画像がひとつの動画ファイルへとエンコードされる毎に任意のコマンドを実行してくれる"on_movie_end"もある). この項目に撮影された画像(ないしは動画)をアップロードするコマンドを登録しておけば,撮影される毎にFTPサーバへ画像を送信させることも可能となる. まずはwputをインストールする.
sudo pacman -S wput
wputは他のコンピュータへファイルをアップロードする機能を持つ.
sudo nano /etc/motion/motion.conf
としてmotionの設定ファイルを開き,"on_picture_save"の行を次のように変更する(動画のエンコード毎にアップロードしたい場合は"on_movie_end"の行を変更する).
on_picture_save wput –RB ftp://ユーザ名:パスワード@FTPサーバIPアドレス %f
-RBの部分について. Rオプションは送信が成功したファイルを削除する機能である. これによりRPiのSDカード容量を節約することが出来る. もしアップロード先とRPiの両方で同じデータを残して置きたいのならばRは削除する. Bオプションはバイナリ形式のデータを送信することを表している. 送信先URIはftp://に続けて記入. まずは送信先のFTPサーバに設定されたユーザ名とパスワードを":(コロン)"を区切りにして入力する. Windowsの場合はQuick 'n Easy FTP Serverのウィザードにて入力したユーザ名とパスワードを記入すれば良い. "@(アット)"を挟んだ先には送信先コンピュータのIPアドレスかドメイン名を入力する. 最後の"%f"は撮影された画像そのものを意味している. つまり,この%fがFTPサーバへアップロードされる. 以上の変更を行ったらmotion.confを保存して閉じる. 後は"sudo motion"なりを実行してmotionを起動,motion.confの設定に誤りが無ければ,設定したFTPサーバへと画像が流れ出てゆく.

RPiに固定IPアドレスを割り当てる

sambaを利用した画像の閲覧方法では,DHCP機能を利用している場合RPiのIPアドレスが変わってしまい面倒である. ここではRPiに固定IPアドレスを設定する方法を紹介する. まずはネットワーク設定ファイルのありかへとディレクトリを変更する.
cd /etc/netctl
次に設定ファイルのテンプレートを上書きコピーする(Wi-Fiを利用している場合は必要なし).
sudo cp examples/ethernet-static ./eth0
コピーした設定ファイルを開く(以後Wi-Fiを利用している場合はeth0をwlan0-SSIDへ置換).
sudo nano eth0
設定ファイルは次のような構成に成っている.
Description='簡単に説明を書く'
Interface=eth0
Connection=ethernet
IP=static
Address=('192.168.11.5/24')
Gateway=('192.168.11.1')
DNS=('8.8.8.8' '8.8.4.4')
Descriptionの先にはシングルクオートに挟んだ説明文を記入する(未記入でも構わないはず). IP=dhcpではなくIP=staticであることを確認. Addressの部分にはRPiに割り当てたいIPアドレスを記入する. ここで設定するIPアドレスは他の機器と重ならない様に注意して決める. アドレス脇の"/24"はサブネットマスクを意味する. "255.255.255.0"の場合は先頭から24ビットまでがサブネットマスクなので/24と書く(対応表はここを参照). gatewayはルータのローカルIPアドレスを入力. DNSはこのままでも良いし,お好みがあればそれを設定する. 以上変更が完了したら保存して終了し,
sudo netctl start eth0
としてネットワークへ接続する. 特にエラーも無く正常に接続出来たならば,
sudo netctl enable eth0
としてシステムのデフォルト設定としよう. 以上でRPiへ固定IPアドレスが割り当てられた.
415576198798530965 http://www.storange.jp/2014/07/raspberry-pi-motion.html http://www.storange.jp/2014/07/raspberry-pi-motion.html Raspberry Pi - Motion 2014-07-05T13:56:00+09:00 http://www.storange.jp/2014/07/raspberry-pi-motion.html Hideyuki Tabata 200 200 72 72