推しアイデア
杖を振る&呪文を唱えるで現実世界に魔法を起こす!
―
杖を振る&呪文を唱えるで現実世界に魔法を起こす!
テーマ「wind or wave」→風魔法、水魔法使おう!
YOLO + ONNXでブラウザ上でリアルタイムキーポイント検出! スマートプラグで現実に魔法を起こす!
Magic Wand は、「音声による呪文詠唱」と「杖のジェスチャー」を組み合わせて、スマートホームデバイスを魔法のように操作する体験型Webアプリケーションです。
ユーザーは魔法使いになりきり、呪文を唱えながら杖を振ることで、部屋の照明や家電を操作できます。音声とジェスチャーの両方が揃った時だけ魔法が発動する仕様により、誤作動を防ぎつつ没入感のある体験を実現しています。
キーポイント検出(YOLO + ONNX)による杖の軌道検出デモ
キーポイント検出(YOLO + ONNX)による杖のジェスチャー判定(V字)
タイトル
ホーム
接続確認
接続テスト画面




300枚以上の学習データを用意(写真を撮影)し、Roboflowというツールを使用して人力アノテーション作業!!!
今回はwandのクラス(杖全体)とtip(杖先)とgrip(持ち手)の2点のキーポイントを検出させるキーポイント検出で画像認識の実装をしました。
Roboflow作成のデータセットを用いてGoogle Colabでモデル学習させ、ONNX形式でエクスポート
出力したONNXファイルをONNX Runtime Webを用いてブラウザ上で推論を実行させています

思ったよりJoy-Con IRカメラがしょぼかったので最終的には本番実装には含めませんでしたが、試行錯誤しながらテスト実装頑張ったのでそちらも紹介させてください
Nintendo_Switch_Reverse_Engineering ↑こちらのリポジトリを参考に実装を進めました
WebHID API を使い、ブラウザからJoy-Con (R) のIRカメラとIMU(加速度・ジャイロ)を直接制御しています。
【通信の流れ】 ブラウザ (WebHID API) ←→ Bluetooth HID ←→ Joy-Con (R) ├─ MCU (STM32) → IRカメラ └─ IMU → 加速度センサー + ジャイロスコープ
初期化シーケンス:
データ受信(レポートID 0x31 の1パケットに全て含まれる):
IRカメラの2モード:
IMUセンサー:
USJの杖は杖の先にある再帰反射材に赤外線を当て、反射した赤外線をIRカメラで捉えることで杖の振りを検知しているらしいです。それを再現したかったのですが、残念ながらJoy-ConのIRカメラでは実力不足でした... reddit:ハリーポッターの杖のセンサー
速さと安定を求めた技術スタック!
Next.js (App Router) — Reactフレームワーク TypeScript — 型付き言語 React 19 — UIライブラリ Bun — パッケージマネージャ / ランタイム Devbox — 開発環境管理
Vitest — テストランナー oxlint — Linter Prettier — Formatter GitHub Actions — CI/CD CodeRabbit — AIコードレビュー Babel React Compiler — React最適化コンパイラ
Tailwind CSS v4 — CSSフレームワーク Lucide React — アイコンライブラリ next-themes — テーマ管理 Google Fonts (Cinzel, Cormorant Garamond, MedievalSharp, Geist) — フォント
Roboflow — 学習データのアノテーション・データセット管理 Python(Google Colab) — モデル学習・開発環境 ONNX Runtime Web — 杖検出モデル推論 (YOLOv8-pose) 独自実装 — ジェスチャー認識(軌跡の方向転換回数ベース)
mediapipe使ってません!今回はYOLO+ONNXで実装しました。
Web Speech API — 音声認識(日本語) WebHID API — Joy-Con接続 Web Bluetooth API — Phomemo M02Sプリンター接続 getUserMedia API — カメラ映像取得
tp-link-tapo-connect — TP-Link Tapoスマートプラグ制御
Joy-Con(R) スマートプラグ マジカルワンド(USJの杖)
ひろ:音声認識 / IMUのジェスチャー判定 ゆっちん:UI担当 リタ:JoyCon IMU / 杖のキーポイント検出 アリス:IoT連携