Skip to content

stonedev-app/raspi_camera

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Raspberry Pi カメラストリーミングサーバー

Raspberry Pi Zero W + Arducam IMX219カメラを使用したMJPEGストリーミングサーバー。

プロジェクト概要

目的

  • Raspberry Pi Zero Wでカメラ映像をリアルタイムストリーミング配信

ハードウェア構成

Raspberry Pi Zero W

  • OS: Raspberry Pi OS Lite (Trixie)
  • カメラ: Arducam IMX219 (8MP, Sony IMX219センサー)
  • 接続: Wi-Fi経由でネットワーク接続

セットアップ

Raspberry Pi Zero W側

1. カメラの接続

Arducamカメラをカメラポート(CSI)に接続

2. カメラ設定

/boot/firmware/config.txtを編集:

sudo vi /boot/firmware/config.txt

以下のように設定:

camera_auto_detect=0
dtoverlay=imx219

再起動:

sudo reboot

参考 「SOFTWARE SETTING」

3. カメラ認識確認

rpicam-hello --list-cameras
# Arducam IMX219が表示されればOK

4. Picamera2インストール

sudo apt update
sudo apt full-upgrade
sudo apt install -y python3-picamera2 --no-install-recommends

参考 「2.2. Installation and updating」

5. ストリーミングサーバー起動

cd ~/Camera
python streaming_server.py

ブラウザでhttp://raspberrypi:8000/stream.mjpgにアクセスして映像確認

開発環境

ディレクトリ構成

raspi_camera/
  ├── .make/
  │   └── Makefile          # rsync同期用
  ├── .git/                 # Gitリポジトリ
  ├── README.md             # このファイル
  ├── streaming_server.py   # MJPEGストリーミングサーバー
  ├── test_camera.py        # カメラ動作確認スクリプト
  └── ...

Makefile

概要

.make/Makefileは、PCとRaspberry Pi間のファイル同期を自動化するためのツールです。rsyncを使用して差分転送を行います。

Makefileの内容

RASPI_HOST = raspberrypi
RASPI_USER = pi
LOCAL_DIR = ..
REMOTE_DIR = ~/Camera

EXCLUDE_OPTS = --exclude '.make' --exclude '.git' --exclude '.gitignore' --exclude '.DS_Store' --exclude '__pycache__' --exclude '*.pyc'

.PHONY: download upload help

help:
	@echo "使い方:"
	@echo "  make -C .make download  - Raspberry Piからファイルをダウンロード"
	@echo "  make -C .make upload    - Raspberry Piにファイルをアップロード"

download:
	rsync -avz $(RASPI_USER)@$(RASPI_HOST):$(REMOTE_DIR)/ $(LOCAL_DIR)/

upload:
	rsync -avz $(EXCLUDE_OPTS) $(LOCAL_DIR)/ $(RASPI_USER)@$(RASPI_HOST):$(REMOTE_DIR)/

設定項目の説明

変数 説明
RASPI_HOST Raspberry Piのホスト名またはIPアドレス
RASPI_USER Raspberry Pi側のユーザー名
LOCAL_DIR PC側のディレクトリ(相対パス)
REMOTE_DIR Raspberry Pi側のディレクトリ
EXCLUDE_OPTS アップロード時に除外するファイル/ディレクトリ

Makefile記法のポイント

タブ文字必須

重要: コマンド行は必ずタブ文字でインデント(スペース不可)

download:
→rsync -avz ...    # ← この矢印がタブ文字

技術仕様

ストリーミング方式

  • プロトコル: HTTP
  • フォーマット: MJPEG (Motion JPEG)
  • 解像度: 640x480 (デフォルト)
  • フレームレート: 約30fps

MJPEGストリーミングの仕組み

[カメラ]
  ↓ 撮影
[MJPEGEncoder]
  ↓ JPEG圧縮
[StreamingOutput]
  ↓ バッファリング
[HTTPServer]
  ↓ multipart/x-mixed-replace
[ブラウザ/クライアント]
  • 各フレームを独立したJPEG画像として送信
  • boundary=FRAMEで区切りながら連続送信
  • 接続を保持したまま永遠に送信(ストリーミング)

アクセス方法

ブラウザ

http://raspberrypi:8000/stream.mjpg

HTMLに埋め込み

<img src="http://raspberrypi:8000/stream.mjpg" />

Python(OpenCV)

import cv2
cap = cv2.VideoCapture('http://raspberrypi: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()

参考資料

About

Raspberry Pi Camera Streaming Server

Topics

Resources

License

Stars

Watchers

Forks

Contributors

Languages