手指トラッキングによるドア開錠システム / Hand Tracking Door Unlock System
カメラ映像から手指をトラッキングし、人差し指の円運動を検出してドアの開錠トリガを発火させるシステムです。
A system that tracks hand gestures from camera footage, detects circular motion of the index finger, and triggers a door unlock mechanism.
- 🎥 Webカメラとその他カメラ(RTSP等)に対応 / Supports webcam and RTSP cameras
- ✋ MediaPipeによる高精度な手指トラッキング / High-precision hand tracking using MediaPipe
- 🔄 円運動検出アルゴリズム / Circular motion detection algorithm
- 🔓 カスタマイズ可能な開錠トリガ / Customizable unlock trigger
- 🐍 Python + uv による環境管理 / Python environment management with uv
- Python 3.10以上
- uv (Python package manager)
- Webカメラまたはカメラへアクセス可能な環境
curl -LsSf https://astral.sh/uv/install.sh | sh# リポジトリをクローン
git clone https://github.com/hirossan4049/tom.git
cd tom
# uvを使用する場合
uv pip install -e .
# または pip を使用する場合
pip install -r requirements.txtpython tom.pyまたは
python tom.py --camera 0python tom.py --camera "rtsp://username:password@ip_address:port/stream"- プログラムを起動すると、カメラ映像が表示されます
- 手をカメラに向けて、人差し指を立てます
- 人差し指の先端で円を描くように動かします
- 円運動が検出されると「UNLOCKED!」と表示され、開錠トリガが発火します
- 'q'キーを押すと終了します
tom.pyをインポートして、独自の開錠ロジックを実装できます:
from tom import DoorUnlockSystem
def my_unlock_function():
# ここに実際のドア開錠ロジックを実装
print("ドアを開錠します")
# 例: GPIO制御、API呼び出し、など
system = DoorUnlockSystem(
camera_source="0",
unlock_callback=my_unlock_function
)
system.run()CircularMotionDetectorのパラメータを調整できます:
from tom import CircularMotionDetector, HandTracker, DoorUnlockSystem
# カスタムパラメータで初期化
detector = CircularMotionDetector(
buffer_size=40, # トラッキングするポイント数
min_radius=30, # 最小半径(ピクセル)
max_radius=250 # 最大半径(ピクセル)
)カメラ映像入力
↓
MediaPipe手指トラッキング
↓
人差し指先端座標取得
↓
円運動検出アルゴリズム
↓
開錠トリガ発火
- HandTracker: MediaPipeを使用した手指トラッキング
- CircularMotionDetector: 座標履歴から円運動を検出
- DoorUnlockSystem: メインシステム統合
- 人差し指先端の座標を時系列で保存
- 座標群の重心を計算
- 各座標と重心との距離を計算し、円の半径を推定
- 距離の標準偏差が小さい(円形に近い)ことを確認
- 角度変化を計算し、270度以上の回転を検出
- すべての条件を満たした場合、円運動として認識
MIT
- インデントはタブ(2スペース相当)を使用
- タイプヒントを使用
- Docstringを記述
プルリクエストを歓迎します!