Raspberry Pi Zero 2 W + Arducam IMX219カメラを使用したMJPEGストリーミングサーバー
- プロトコル: HTTP
- フォーマット: MJPEG (Motion JPEG)
- 解像度: 640x480
- OS: Raspberry Pi OS Lite (Trixie)
- カメラ: Arducam IMX219 (8MP, Sony IMX219センサー)
- 作業用マシン
Arducamカメラをカメラポート(CSI)に接続
/boot/firmware/config.txtを編集
sudo vi /boot/firmware/config.txt差分
# Additional overlays and parameters are documented
# /boot/firmware/overlays/README
+ # imx219 setting
+ camera_auto_detect=0
+ dtoverlay=imx219
# Automatically load overlays for detected DSI displays
display_auto_detect=1再起動
sudo rebootrpicam-hello --list-camerasAvailable camerasに、imx219 が表示されることを確認
Available cameras
-----------------
0 : imx219 [3280x2464 10-bit RGGB] (/base/soc/i2c0mux/i2c@1/imx219@10)
Modes: 'SRGGB10_CSI2P' : 640x480 [206.65 fps - (1000, 752)/1280x960 crop]
1640x1232 [41.85 fps - (0, 0)/3280x2464 crop]
1920x1080 [47.57 fps - (680, 692)/1920x1080 crop]
3280x2464 [21.19 fps - (0, 0)/3280x2464 crop]
'SRGGB8' : 640x480 [206.65 fps - (1000, 752)/1280x960 crop]
1640x1232 [83.70 fps - (0, 0)/3280x2464 crop]
1920x1080 [47.57 fps - (680, 692)/1920x1080 crop]
3280x2464 [21.19 fps - (0, 0)/3280x2464 crop]
sudo apt update
sudo apt full-upgrade
sudo apt install -y python3-picamera2 --no-install-recommends参考 「2.2. Installation and updating」
mkdir ~/Camera※ソースファイル格納用
git clone https://github.com/stonedev-app/raspi_camera.git
cd raspi_camera3-1-1. sync.confをコピー、3-1-2. sync.confの設定を実施
./sync.sh uploadRaspberry Piで以下のコマンドを実行
cd ~/Camera
python src/streaming_server.pyブラウザでhttp://<RASPI_HOST>:8000/stream.mjpgにアクセス
sync.sh でMacと Raspberry Pi 間のファイル同期を行う
cp sync.conf.example sync.conf| 項目名 | 説明 |
|---|---|
RASPI_HOST |
Raspberry Pi のホスト名または IP アドレス |
RASPI_USER |
Raspberry Pi のユーザー名 |
REMOTE_DIR |
Raspberry Pi 上の同期先ディレクトリ |
# Mac → Raspberry Pi へアップロード
./sync.sh upload
# Raspberry Pi → Mac へダウンロード
./sync.sh downloadhttp://<RASPI_HOST>:8000/stream.mjpg
<img src="http://<RASPI_HOST>:8000/stream.mjpg" />import cv2
cap = cv2.VideoCapture('http://<RASPI_HOST>:8000/stream.mjpg')
while True:
ret, frame = cap.read()
if ret:
# フレーム処理
cv2.imshow('Camera', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()