Motionを使ったRaspberry Pi Zero監視カメラ

前回 Raspberry Pi ZeroにMotionを導入した際は性能不足で実用に耐えなかったですが、今回はハードウェアエンコードを有効化することで問題を解決します


結論

今回の方法でRaspberry Pi Zeroを用いた場合の性能が前回の320×240 で2fpsから640×480の10fps程度まで改善されました。まだ満足できるレベルではないですが、最低限実用化に耐えうるようになった気がします…


MMAL有効化版Motionのインストール

aptでインストールしたMotionはMMALが有効化されていないため、動画のエンコード、デコードはすべてCPUに行われます。MMALを利用すればGPUを使用したコーデック機能を利用することができます。そのためにはMMALサポートが有効化されたmotionをインストールする必要があります。ソースから自分でビルドすることもできますが、簡単な方法はあらかじめビルドされた.debをダウンロードしてインストールする方法です

最初に、aptmotionをすでにインストールしている場合はアンインストールします

% sudo apt remove motion

次に、公式ページのReleaseページから.debをダウンロードします。pi_buster_motion_*_armhf.debをダウンロードします

% wget 'https://github.com/Motion-Project/motion/releases/download/release-4.3.1/pi_buster_motion_4.3.1-1_armhf.deb'
% sudo apt install ./pi_buster_motion_4.3.1-1_armhf.deb

motion.confの設定

実行ユーザの~/.motion/motion.confを編集します

% cp /etc/motion/motion.conf ~/.motion/motion.conf
% nano ~/.motion/motion.conf
--- /etc/motion/motion.conf
+++ motion.conf
@@ -28,22 +28,25 @@
 log_level 6

 # Target directory for pictures, snapshots and movies
-; target_dir value
+target_dir /home/pi/Motion

 # Video device (e.g. /dev/video0) to be used for capturing.
-videodevice /dev/video0
+; videodevice /dev/video0

 # Parameters to control video device.  See motion_guide.html
 ; vid_control_params value

 # The full URL of the network camera stream.
-; netcam_url value
+netcam_url v4l2:///dev/video0
+v4l2_palette 21

@@ -56,7 +59,7 @@
 height 480

 # Maximum number of frames to be captured per second.
-framerate 15
+framerate 10

 # Text to be overlayed in the lower left corner of images
 text_left CAMERA1
@@ -134,6 +137,8 @@
 # File name(without extension) for movies relative to target directory
 movie_filename %t-%v-%Y%m%d%H%M%S

+movie_passthrough on
+
 ############################################################
 # Webcontrol configuration parameters
 ############################################################
@@ -155,7 +160,7 @@
 stream_port 8081

 # Restrict stream connections to the localhost.
-stream_localhost on
+stream_localhost off

 ##############################################################
 # Camera config files - One for each camera.

大事なところはnetcam_url v4l2:///dev/video0の部分とv4l2_palette 21で入力デバイスを指定し、movie_passthrough onでパススルーモードを設定することです。こうすることでカメラからのh264データがそのまま記録されるようになり、CPU負荷が低減します


v4l2モードの設定

次に上記のmotion.confの内容に合わせて、v4l2を設定します

% v4l2-ctl -d /dev/video0 --set-fmt-video=pixelformat=4,width=640,height=480 --set-parm=10
% v4l2-ctl -V # 確認
Format Video Capture:
        Width/Height      : 640/480
        Pixel Format      : 'H264' (H.264)
        Field             : None
        Bytes per Line    : 0
        Size Image        : 307200
        Colorspace        : SMPTE 170M
        Transfer Function : Default (maps to Rec. 709)
        YCbCr/HSV Encoding: Default (maps to ITU-R 601)
        Quantization      : Default (maps to Full Range)
        Flags             :

Motionの起動

non-daemonモードで起動します

% motion -n

target_dirに設定した/home/pi/Motion以下に.mp4ファイルが生成されていることを確認します

おすすめ

1件の返信

  1. 2020-06-01

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です