前提
会社の倉庫から不要な小型PCと、webカメラが発掘された。これを使ってなにかできないだろうかと上司に相談を受けたため、監視カメラの作成を決定。
使ったもの
Chromebox:会社に転がっていた不用品。RAM4GB、Celeron3215U。
Logitech QuickCam pro:会社に転がっていたWebカメラ。2メガピクセル。
使用した技術、ソフトウェア
OS:Linux mint 19 mate x64
監視カメラ機能:motion
OSとソフトの選定理由
-
OS
Chromeboxには標準でChromeOSが搭載されているが、これは拡張性が乏しいため、USBハードディスクにlinuxmint19 mateをインストールした。Ubuntuベースであり情報が豊富にあること、Ubuntuよりもメモリ消費が激しくなく、軽量であることから、mintを選択した。 -
Motion
motionは撮影している画角に変化があると、それに応じて動画を撮影する。また、同じネットワークにある別の端末で動画のストリーミングと、設定が行える。しかしながら、webページから変更した設定はたまに反映されないこともあるので、motion.confを書き換えたほうが確実。
motionの設定
上述の通り、motionには各種の設定が用意されている。
設定は“/home/etc/motion/motion.conf“に記述されている。変更した設定は以下の通り。
daemon on *デーモンプロセスとして起動
frame rate 15 *フレームレート15
locate_motion_mode on *動く物体を追尾
locate_motion_style box *白い枠で追尾
stream_quality 75 *ストリーム時のクオリティを保存している動画と同程度に
stream_maxrate 15 *ストリーム時のフレームレート
webcontrol_localhost off *offでないとChromebox以外で設定ができない
stream_localhost off *offでないとChromebox以外で見ることができない
target_dir /home/$username/motion *動画を保存するディレクトリを変更
output_pictures off *写真は保存しない
Bashスクリプトの作成、cronの設定
motionには撮影した動画を削除する機能はない。そのため、一定期間(現在は2日)経過したファイルを探し、削除するスクリプトを作成した。これが毎日13時20分にcronで実行される。
# !/bin/sh
# motionで撮影した動画を一定期間経過したら削除します
# 保存場所
target="/home/USER/motion"
# 何日(以上前:+n,より新しい:-n)
days="+2"
# findが指定した日数を経過したファイルを探し、rmを実行する
find ${target} -type f -mtime ${days} -exec rm -f {} \;
実際に運用してみて
一般的中小企業のオフィスの机において2018年12月10日13時22分から、12月11日18時11分まで連続で稼働させたところ、生成された動画は252個、445.8MBだった。人通りなどにもよるがそれほどディスク容量を消費しないことが分かったので、スクリプトの消去設定を2日から1週間に変更してもいいかもしれない。社内wifiに接続しテストを行ったところ、オフィス内では殆どの場所でストリーミングを見ることができたが、少し端に移動すると、接続するアクセスポイントが変わるからなのか(社内には4台のアクセスポイントがある)、ストリーミングができなくなる。同じSSIDでも、接続するアクセスポイントが変わるとローカルホストという扱いではなくなるのかどうなのかは不明。
所感
今回はChromeBoxを利用したが、ChromeOSでは上記のような目的が達成できないのでmintをUSBメモリから起動した。bashやmintを触るのは初めてだったので少し躓いたが、Raspberry Pi関連の情報が国内外ともに充実していたため、手探りながらそれらを参照して監視カメラが完成できた。
参照
Raspberry Piでmotionを動かして、カメラの画像をストリーミング配信する方法
[Motion の導入手順 ~ 指定した内容、パラメータの意味について]
(http://safe-linux.homeip.net/web/motion/motion-03.html)
他多数