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
をダウンロードしてインストールする方法です
最初に、apt
でmotion
をすでにインストールしている場合はアンインストールします
% 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件の返信
[…] MotionではCPU処理が多く、Raspberry Pi Zeroでは640×480@10fpsが限界というところでしたが、omxmotionという軽量動き検出録画プログラムを見つけたので試してみました […]