Daily Hack
📷

Raspberry Pi 5で動体検知つき防犯カメラを作ってみた

デジタル
#Raspberry Pi#自動化#IoT#防犯#カメラ

留守中のペットの様子、玄関先の不審者、庭の動物被害——「見たいけど、ずっと見ていられない」をRaspberry Pi 5 が解決してくれます。

この記事では、動体を検知して自動録画し、スマホからリアルタイムで映像を確認できる防犯カメラの作り方を解説します。

防犯カメラシステム 構成図

完成イメージ

  • 動きを検知したときだけ自動録画
  • スマホからリアルタイム映像を確認
  • 動体検知時に LINE 通知を送信(任意)
  • 古い録画は自動で削除してストレージ節約

必要なもの

| パーツ | 目安価格 | |--------|----------| | Raspberry Pi 5(4GB 以上) | 約10,000円 | | microSD カード(64GB 以上推奨) | 約1,500円 | | USB-C 電源アダプター | 約2,000円 | | Raspberry Pi カメラモジュール v3 | 約4,000円 | | カメラ用リボンケーブル | 付属品を使用 | | ケース+カメラマウント(任意) | 約1,000円 |

USB Web カメラ(UVC 対応)でも代用できますが、Pi カメラモジュールのほうがコンパクトで設置しやすいです。

STEP 1: カメラを接続する

Pi カメラモジュールの場合

  1. Raspberry Pi の電源を切った状態で作業します
  2. カメラポートのコネクタのロックを引き上げる
  3. リボンケーブルの端子面を HDMI 側に向けて差し込む
  4. ロックを押し下げて固定する

カメラの有効化

sudo raspi-config
  1. Interface OptionsCameraYes で有効化
  2. 再起動
sudo reboot

動作確認

# 静止画を撮影
rpicam-still -o test.jpg

# 確認(SSH経由ならscpでPCにコピー)
scp pi@raspberrypi.local:~/test.jpg .

写真が撮れていれば成功です。

STEP 2: motion をインストールする

motion は、動体検知機能を備えたオープンソースの映像監視ソフトウェアです。

sudo apt update
sudo apt install -y motion

バージョン確認

motion -v

STEP 3: motion を設定する

設定ファイルを編集します。

sudo nano /etc/motion/motion.conf

基本設定

以下の項目を変更します。

# デーモンモード(バックグラウンド動作)
daemon on

# 映像の解像度
width 1280
height 720

# フレームレート
framerate 15

# 動体検知の感度(小さいほど敏感)
threshold 1500

# 最小の動体検知面積
minimum_motion_frames 3

# 録画ファイルの保存先
target_dir /home/pi/camera

# 録画ファイル名のフォーマット
movie_filename %Y%m%d_%H%M%S

# 録画フォーマット
movie_codec mkv

# 動体検知時のスナップショット
picture_output best
picture_filename %Y%m%d_%H%M%S_snap

# ストリーミング設定
stream_port 8081
stream_quality 75
stream_maxrate 15
stream_localhost off

# Web管理画面
webcontrol_port 8080
webcontrol_localhost off

保存用ディレクトリの作成

mkdir -p /home/pi/camera
sudo chown motion:motion /home/pi/camera

motion のデーモンモードを有効にする

sudo nano /etc/default/motion
start_motion_daemon=yes

STEP 4: motion を起動する

sudo systemctl enable motion
sudo systemctl start motion

リアルタイム映像の確認

ブラウザで以下の URL にアクセスします。

http://raspberrypi.local:8081

カメラの映像がリアルタイムで表示されれば成功です。

管理画面

http://raspberrypi.local:8080

ここから検知の一時停止や設定変更ができます。

STEP 5: 古い録画を自動削除する

ストレージがいっぱいにならないよう、古い録画ファイルを自動で削除するスクリプトを作ります。

nano /home/pi/cleanup_camera.sh
#!/bin/bash
# 7日より古いファイルを削除
find /home/pi/camera -name "*.mkv" -mtime +7 -delete
find /home/pi/camera -name "*.jpg" -mtime +7 -delete
echo "$(date): クリーンアップ完了" >> /home/pi/camera/cleanup.log
chmod +x /home/pi/cleanup_camera.sh

cron で毎日実行するように設定します。

crontab -e
# 毎日深夜3時に古い録画を削除
0 3 * * * /home/pi/cleanup_camera.sh

STEP 6: LINE 通知を設定する(任意)

動体検知時に LINE で通知を受け取れるようにします。

LINE Notify のトークンを取得

  1. LINE Notify にアクセス
  2. ログインして「トークンを発行する」
  3. 通知先のグループを選択してトークンを発行
  4. トークンをメモする

通知スクリプトの作成

# notify.py
import requests
import sys

LINE_TOKEN = "YOUR_LINE_NOTIFY_TOKEN"

def send_line_notify(message, image_path=None):
    """LINE Notify でメッセージを送信する"""
    url = "https://notify-api.line.me/api/notify"
    headers = {"Authorization": f"Bearer {LINE_TOKEN}"}
    data = {"message": message}

    files = {}
    if image_path:
        files = {"imageFile": open(image_path, "rb")}

    requests.post(url, headers=headers, data=data, files=files)

if __name__ == "__main__":
    message = " 動体を検知しました"
    image = sys.argv[1] if len(sys.argv) > 1 else None
    send_line_notify(message, image)

motion から通知スクリプトを呼び出す

/etc/motion/motion.conf に以下を追加します。

# 動体検知時にスクリプトを実行
on_picture_save /home/pi/camera-env/bin/python /home/pi/notify.py %f
sudo systemctl restart motion

これで動体検知時にスナップショット付きの LINE 通知が届きます。

STEP 7: セキュリティの強化

防犯カメラとして使う場合、映像ストリームへの不正アクセスを防ぐことが重要です。

パスワード認証を設定

/etc/motion/motion.conf に以下を追加します。

# ストリームのパスワード保護
stream_auth_method 1
stream_authentication username:password

# 管理画面のパスワード保護
webcontrol_auth_method 1
webcontrol_authentication admin:password

usernamepassword は必ず自分で決めた値に変更してください。

ファイアウォールの設定(任意)

sudo apt install -y ufw
sudo ufw allow ssh
sudo ufw allow 8081/tcp  # ストリーミング
sudo ufw allow 8080/tcp  # 管理画面
sudo ufw enable

活用アイディア

  • ペット見守り: リビングに設置して、外出中のペットの様子を確認
  • 玄関の防犯: 玄関先に設置して、不審な動きがあれば通知
  • タイムラプス: motion の設定を変更して、庭の植物や空の変化を記録
  • ベビーモニター: 赤ちゃんの部屋に設置して別室から様子を確認

トラブルシューティング

| 症状 | 原因と対処 | |------|-----------| | カメラが認識されない | リボンケーブルの接続を確認。raspi-config でカメラが有効か確認 | | ストリームが表示されない | stream_localhostoff になっているか確認。ファイアウォールの設定を確認 | | 誤検知が多い | threshold の値を大きくする。minimum_motion_frames を増やす | | 録画ファイルが生成されない | target_dir の権限を確認。sudo chown motion:motion /home/pi/camera |


市販の防犯カメラは月額料金がかかるものも多いですが、Raspberry Pi なら初期費用だけで運用できます。まずは室内のペット見守りから試してみてはいかがでしょうか。