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ファイルが生成されていることを確認します

おすすめ