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