留守時のペットを監視するPythonシステムの作成方法
Pythonを使ってカメラ、マイク、自動装置を連携させ、ペットの監視システムを作る方法を解説します。
①必要な機材と準備
ハードウェア
・カメラ(USBウェブカメラやIPカメラ)
・マイク(USBマイクまたは内蔵マイク)
・自動装置
(例: おやつを出すフィーダー、スマートプラグ)
・PCまたはRaspberry Pi
(Pythonを実行する環境)
ソフトウェア
・Python 3.x
・必要なライブラリ
(後述)
・OS環境
(Windows, macOS, Linux, またはRaspberry Pi OS)
Pythonプロフェッショナルプログラミング 第4版 ↓
②Python環境のセットアップ
まずPythonをインストールします。以下の手順に従ってください。
❶Pythonを公式サイト(python.org)からダウンロードしてインストールします。
❷以下のコマンドで必要なPythonライブラリをインストールします。
pip install opencv-python numpy pyaudio flask gpiozero
opencv-python
画像・映像処理ライブラリ。
numpy
数値計算ライブラリ。
pyaudio
音声の録音と処理用。
flask
ウェブアプリケーションフレームワーク
(ライブ配信に使用)
gpiozero
Raspberry PiのGPIO制御用
(Raspberry Piを使う場合のみ)
よくわかるPython入門 ↓
③基本構成
監視システムは次の3つの機能を持ちます。
❶カメラ映像の録画とストリーミング
→ ペットの様子をリアルタイムで確認できる。
❷音声検知
→ ペットの声や異常音(吠え声、騒音)を検出。
❸自動装置の制御
→ スマートプラグやモーターでおやつフィーダーを動かす。
④実装ステップ
❶カメラ映像のストリーミング
OpenCVとFlaskを使って、カメラ映像をリアルタイムで表示します。
サンプルコード
import cv2
from flask import Flask, Response
app = Flask(__name__)
def generate_frames():
camera = cv2.VideoCapture(0) # カメラを取得
while True:
success, frame = camera.read()
if not success:
break
else:
# 映像をJPEG形式に変換
ret, buffer = cv2.imencode('.jpg', frame)
frame = buffer.tobytes()
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
@app.route('/video')
def video_feed():
return Response(generate_frames(), mimetype='multipart/x-mixed-replace; boundary=frame')
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
ポイント
・ブラウザで http://<IPアドレス>:5000/video にアクセスすると映像が確認できます。
・cv2.VideoCapture(0) はUSBカメラを指します。
注意点
・IPカメラの場合、カメラのURLを指定します。
例
cv2.VideoCapture("http://<IP_CAMERA_URL>/video")
❷音声の録音と検知
pyaudioを使って音声を録音し、異常音を検知します。
サンプルコード
import pyaudio
import numpy as np
def detect_sound():
chunk = 1024 # サンプルサイズ
rate = 44100 # サンプリングレート
threshold = 500 # 音量の閾値
audio = pyaudio.PyAudio()
stream = audio.open(format=pyaudio.paInt16, channels=1, rate=rate, input=True, frames_per_buffer=chunk)
print("音声を検知中...")
try:
while True:
data = np.frombuffer(stream.read(chunk), dtype=np.int16)
volume = np.linalg.norm(data)
if volume > threshold:
print("異常音を検知しました! 音量:", volume)
except KeyboardInterrupt:
print("終了")
stream.stop_stream()
stream.close()
audio.terminate()
detect_sound()
ポイント
・thresholdを調整して、ペットの声など特定の音量を検知できます。
注意点
・音声デバイスの設定(例: マイクの感度)を調整してください。
Pythonプログラミングパーフェクトマスター[最新Visual Studio Code対応 第4版] (Perfect Master 192) ↓
❸自動装置の制御
Raspberry Piでgpiozeroを使い、モーターやLEDを制御します。
サンプルコード(おやつフィーダーを動かす)
from gpiozero import Servo
from time import sleep
servo = Servo(17) # GPIO 17に接続
def dispense_treat():
print("おやつを出します...")
servo.max()
sleep(1)
servo.min()
sleep(1)
dispense_treat()
ポイント
・GPIOピン番号は使用しているピンに応じて変更してください。
・スマートプラグを使う場合は専用APIを利用します。
(例: TP-Link KasaのAPI)
注意点
・Raspberry PiのGPIO端子に正しく接続し、過電流を防ぐために抵抗を使用してください。
⑤システム統合
上記3つの機能を統合して、音声検知やリアルタイム映像をベースに自動装置を動かすようにします。
統合コード(例)
import cv2
from flask import Flask, Response
import pyaudio
import numpy as np
from gpiozero import Servo
from threading import Thread
from time import sleep
app = Flask(__name__)
servo = Servo(17)
# カメラストリーミング
def generate_frames():
camera = cv2.VideoCapture(0)
while True:
success, frame = camera.read()
if not success:
break
else:
ret, buffer = cv2.imencode('.jpg', frame)
frame = buffer.tobytes()
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
@app.route('/video')
def video_feed():
return Response(generate_frames(), mimetype='multipart/x-mixed-replace; boundary=frame')
# 音声検知
def detect_sound():
chunk = 1024
rate = 44100
threshold = 500
audio = pyaudio.PyAudio()
stream = audio.open(format=pyaudio.paInt16, channels=1, rate=rate, input=True, frames_per_buffer=chunk)
try:
while True:
data = np.frombuffer(stream.read(chunk), dtype=np.int16)
volume = np.linalg.norm(data)
if volume > threshold:
print("異常音を検知しました!")
dispense_treat()
except KeyboardInterrupt:
stream.stop_stream()
stream.close()
audio.terminate()
# おやつフィーダー制御
def dispense_treat():
print("おやつを出します...")
servo.max()
sleep(1)
servo.min()
sleep(1)
# 並行実行
if __name__ == '__main__':
Thread(target=detect_sound).start()
app.run(host='0.0.0.0', port=5000)
⑥注意点と改善案
セキュリティ
ストリーミングのURLは安全なネットワーク内で使用してください。
電力供給
Raspberry Piなどを使用する場合、安定した電力供給が必要です。
動作確認
ハードウェア(カメラ、マイク、モーター)を個別にテストしてから統合してください。
⑦今後の発展
・AIを使った動物行動の検知
(TensorFlowなど)
・モバイルアプリとの連携。
・クラウドストレージへのデータ保存。
まとめ
これで、基本的なペット監視システムの構築が可能です!