sgjava/motiondetectorとはGitHub上にあるフリーの動画処理ソフト。動画内に動いているものを見つけることができる。
対象にラズパイが入ってたからすんなり使えるかと思ったら、意外といろいろ試行錯誤インストールしないといけなかったのでメモ。
ただし、場当たり的に色々入れてしまったため無意味なコマンドとかもあるかもしれず、検証も面倒なので、Qiitaとかにはあげずに思い出せる範囲で書いておく。
(町を監視するぞと思ったけど、動きが少なすぎるのかうまくいっていない例w)
① カメラをつなぐ
② raspi-configでカメラをactiveに
③ python3インストール
④ リポジトリクローンとパス通し
git clone --depth 1 https://github.com/sgjava/motiondetector.git
cd ~/motiondetector/codeferm
export PYTHONPATH=$PYTHONPATH:~/motiondetector
⑤ 関連ライブラリインストール
pip3 install opencv-python
sudo apt install libatlas-base-dev libjasper-dev libqtgui4 libqt4-test
⑥ ローカル動画ファイルの認識テスト
python3 videoloop.py
⑦ カメラから入力できるように設定ファイル変更
公式ページに色々書いてある。カメラのサイズ・fpsは以下のようにした。
videoCaptureProperties = ((cv2.CAP_PROP_FRAME_WIDTH, 640), (cv2.CAP_PROP_FRAME_HEIGHT, 480))
fps = 30
あと、mark = Trueとしておいた。
⑧ さらに、/dev/video0デバイスを有効にするために以下のコマンドを実行
sudo modprobe bcm2835-v4l2
⑨ これでカメラからのストリーミングで実行可能。7.の設定ファイルを~/camera.iniとすると
python3 videoloop.py ~/camera.ini
で実行。動きものが映ったときだけ動画が録画される。
デフォルトの判定はかなりゆるいみたいで、見た目に何も動いてないときも録画されたりする。
スレッショルド設定はcamera.iniの以下の設定で変えられるらしい。
; Percent of image change to trigger motion (must be less than maxChange).
startThreshold = 1.0
リブートしたら、videoloopの実行前に以下の再実行が必要。
sudo modprobe bcm2835-v4l2
export PYTHONPATH=$PYTHONPATH:~/motiondetector