Raspberry Pi向け軽量動き検出録画プログラム omxmotion

MotionではCPU処理が多く、Raspberry Pi Zeroでは640×480@10fpsが限界というところでしたが、omxmotionという軽量動き検出録画プログラムを見つけたので試してみました


omxmotion

omxmotionは軽量な動き検出録画プログラムで、h264の動きベクタを用いて動きを検出するため、CPU処理が少なく1920×1080@25fpsでもCPU負荷が50%以下に収まっていました


下準備

未インストールの必要なパッケージをインストール

% sudo apt install git libavformat-dev libncurses-dev libx264-dev

omxmotionのコンパイル

omxmotionはバイナリでは配布されていないため、自前でビルドする必要があります。

まずはgithubからソースコードをcloneします

% git clone https://github.com/dickontoo/omxmotion.git omxmotion

ビルドエラーが発生したため、一か所だけパッチが必要でした。以下のように一か所omxmotion.cを修正します

diff --git a/omxmotion.c b/omxmotion.c
index 870894a..237afd9 100644
--- a/omxmotion.c
+++ b/omxmotion.c
@@ -370,7 +370,7 @@ static AVFormatContext *openoutput(char *url, int *index)
        for (i = 0; i < oc->nb_streams; i++) {
                if (oc->oformat->flags & AVFMT_GLOBALHEADER)
                        oc->streams[i]->codec->flags
-                               |= CODEC_FLAG_GLOBAL_HEADER;
+                               |= AV_CODEC_FLAG_GLOBAL_HEADER;
                if (oc->streams[i]->codec->sample_rate == 0)
                        oc->streams[i]->codec->sample_rate = 48000; /* ish */
        }

後はmakeファイルでコンパイルするだけです

% make

実行

% mkdir ~/omxmotion
% ./omxmotion -b 4 -d ~/omxmotion/

-dオプションは出力先ディレクトリ、-bはターゲットのビットレート (Mbps)です。-bオプションを省略するとSegmentation Faultで落ちたため、必ず指定する必要があるようです

詳細なオプションはプロジェクトのgithubページを参照してください


ネットワークストリーミング

-cオプションでアドレスを指定してUDPパケットのストリーミングができるようですが、パケットは送信されているようですが、残念ながら自分のVLCでは動画を見ることが出来ませんでした。


結論

残念ながらネットワーク越しに画像を確認することは出来なかったため、監視カメラとしては使い勝手が悪いかもしれませんが、ナイトビジョンカメラとしては今のところベストな選択肢だと思われます

おすすめ