Raspberry Piベースのオープンソース防犯カメラ
(github.com/TzuHuanTai)- Raspberry Piを低遅延のホーム防犯カメラに変換するプロジェクト
- v4l2DMAハードウェアエンコーダとWebRTCを使用
- メディアサーバーなしで、純粋なP2Pベースのカメラとして動画の再生とダウンロードが可能
- 複数のユーザーが同時にライブストリームを視聴可能
- Raspberry Pi 5または他のSBCはv4l2ハードウェアエンコーディングをサポートしないため、ソフトウェアエンコーディングモードで実行する必要あり
使い方
- 最新のバイナリファイルをReleasesからダウンロード
- Pi Cameraアプリをインストールして手順に従う
ハードウェア要件
- Raspberry Pi(Zero 2W以上)
- CSIカメラモジュール
- 最低4GBのmicro SDカード
- USBディスクおよびMicro-USB Male to USB-A Femaleアダプター
環境設定
- Raspberry Pi Imagerを使用してLite OS(Bookworm 64-bit)をmicro SDカードに書き込む
- 必須ライブラリをインストール
sudo apt install libmosquitto1 pulseaudio libavformat59 libswscale6 /boot/firmware/config.txtに以下を追加してRaspberry Piハードウェアを有効化camera_auto_detect=0 start_x=1 gpu_mem=16camera_auto_detect=0を設定してv4l2でカメラを読み取る- USBディスクをマウント [参照]
- 動画録画をしない場合はこの手順をスキップし、実行時に
record_pathフラグを設定しない - ディスクドライブが検出されると自動的に
/mnt/ext_diskへマウントされる
sudo apt-get install autofs echo '/- /etc/auto.usb --timeout=5' | sudo tee -a /etc/auto.master > /dev/null echo '/mnt/ext_disk -fstype=auto,nofail,nodev,nosuid,noatime,umask=000 :/dev/sda1' | sudo tee -a /etc/auto.usb > /dev/null sudo systemctl restart autofs - 動画録画をしない場合はこの手順をスキップし、実行時に
アプリケーションの実行
- 現在、MQTTが唯一のシグナリング機構として使われているため、アプリケーション起動前にMQTTサーバーを用意する必要がある
- アプリケーションをLAN内でのみ使用する場合は、同じPiにMosquittoなどのMQTTサーバーをインストール可能
- リモートアクセスが必要な場合は、クラウドベースのMQTTサーバーの使用を推奨(例: HiveMQ、EXMQ)
- リモートシグナリングサーバーへモバイルデータ経由でアクセスするには、DDNSおよびポートフォワーディングの設定が必要
実行
pi_webrtcバイナリを-hフラグ付きで実行すると、すべてのオプションを確認できる- 設定を適用してアプリケーションを起動
ヒント 1: Pi 5はハードウェアエンコーディングをサポートしていないため、pulseaudio --start /path/to/pi_webrtc --device=/dev/video0 --fps=30 --width=1280 --height=960 --v4l2_format=h264 --hw_accel --mqtt_host=example.s1.eu.hivemq.cloud --mqtt_port=8883 --mqtt_username=hakunamatata --mqtt_password=Wonderful --uid=home-pi-zero2w --record_path=/mnt/ext_disk/video/--hw_accelフラグを削除し、--v4l2_formatをmjpegに設定する。動画エンコーディングはOpenH264で処理される ヒント 2:1920x1080に設定するとハードウェアデコーダのファームウェアが1920x1088に変更されるが、isp/エンコーダが調整されずメモリ範囲外になる。1920x1088に設定すれば問題ない
Linuxサービスとして実行
1. pulseaudioをシステム全体のデーモンとして実行 [参照]
/etc/systemd/system/pulseaudio.serviceファイルを作成[Unit] Description= Pulseaudio Daemon After=rtkit-daemon.service systemd-udevd.service dbus.service [Service] Type=simple ExecStart=/usr/bin/pulseaudio --system --disallow-exit --disallow-module-loading Restart=always RestartSec=10 [Install] WantedBy=multi-user.target- クライアント設定に
autospawn = noを追加echo 'autospawn = no' | sudo tee -a /etc/pulse/client.conf > /dev/null - rootをpulseグループに追加
sudo adduser root pulse-access - サービスを有効化して起動
sudo systemctl daemon-reload sudo systemctl enable pulseaudio.service sudo systemctl start pulseaudio.service
2. pi_webrtcを実行し、再起動時の自動起動を設定
/etc/systemd/system/pi-webrtc.serviceファイルを作成[Unit] Description= The p2p camera via webrtc. After=systemd-networkd.service [Service] Type=simple WorkingDirectory=/path/to ExecStart=/path/to/pi_webrtc --device=/dev/video0 --fps=30 --width=1280 --height=960 --v4l2_format=h264 --hw_accel --mqtt_host=example.s1.eu.hivemq.cloud --mqtt_port=8883 --mqtt_username=hakunamatata --mqtt_password=wonderful --record_path=/mnt/ext_disk/video/ Restart=always RestartSec=10 [Install] WantedBy=multi-user.target- サービスを有効化して起動
sudo systemctl daemon-reload sudo systemctl enable pi-webrtc.service sudo systemctl start pi-webrtc.service
高度な設定
- 双方向通信のためにマイクとスピーカーの追加が必要
マイク
- マイクの配線およびテスト手順はリンク参照
スピーカー
- スピーカー設定の手順はリンク参照
ライセンス
- このプロジェクトはApache License, Version 2.0の下でライセンスされている。詳細はLICENSEファイルを参照
GN⁺の要約
- このプロジェクトはRaspberry Piを低遅延のホーム防犯カメラに変換する方法を提供する
- v4l2DMAハードウェアエンコーダとWebRTCを使い、メディアサーバーなしで純粋なP2Pベースとして動作する
- 複数のユーザーが同時にライブストリームを視聴でき、家庭用防犯カメラとして有用
- MQTTを使ったシグナリング機構により、LANおよびリモートアクセスの両方に対応可能
- 類似機能を持つ他のプロジェクトとしてMotionEyeおよびZoneMinderがある
1件のコメント
Hacker Newsの意見
あるユーザーは家の修理中に遠隔監視のためセキュリティシステムを設置しようとしたが、ほとんどの機能にブロードバンドインターネットが必要だと分かった
別のユーザーは家を建てている間アパートに住みながら、タイムラプス動画を作成し、インターネット経由で作業状況を確認しようとしていた
さらに別のユーザーはRaspberry Pi Zero WHを使ってmediamtxプロジェクトを検討していた
あるユーザーは、Raspberry Pi 5がv4l2ハードウェアエンコーディングをサポートしていない点に疑問を抱いていた
別のユーザーはyolov3-tinyモデルを使ってリアルタイムの人物検出を試していた
さらに別のユーザーはSentry-Picamを使って同様の目的を達成しており、Syncthingで3台の別デバイスと同期し、sendxmppベースのプッシュ通知スクリプトを連携させていた
あるユーザーはNvidia Jetsonを使って同様のプロジェクトを進めており、現在はreCameraに関心を持っている
さらに別のユーザーはオープンソースファームウェアを使うボードを探していた
最後に、あるユーザーは音声だけを録音する場合にWebRTCが良いソリューションなのか気にしていた