v0.1 — 纯视觉ArUco驱动的DIY虚拟摄影机
用一台手机 + 一台电脑 + 一张二维码,实现手机端实时 ArUco 标记检测,驱动 PC 端 3D 可视化。
灵感来自 Khara 工作室《新·福音战士剧场版:终》的虚拟摄影棚技术。 技术架构详情见 docs/DIY 虚拟相机开源技术栈调研.md
| 功能 | 说明 |
|---|---|
| 📷 手机端 ArUco 检测 | Camera2 API → Y平面零拷贝 → OpenCV solvePnP |
| 📡 6DoF 位姿推送 | 四元数+平移 → UDP/JSON 到 PC |
| 🖥️ PC 3D 可视化 | PyQt5 仪表盘 + 纯Qt 3D立方体 + 弧形表盘 |
| 🧭 Mahony 互补滤波 | 加速度计+陀螺仪+磁力计(已注释,留做备选) |
| 📊 网速跑分 | 连接时自动实测吞吐量 |
| 📱 双页 UI | IMU 数据页 / 全屏相机+AR叠加页 |
┌─ 手机 (Android) ──────────────────────────┐
│ Camera2 → YUV420 → Y平面 → ArUco检测 │
│ ↓ │
│ rvec→四元数 │
│ ↓ │
│ UDP 9000: JSON 位姿 │
│ UDP 9001: JPEG 画面 │
└──────────────────┬─────────────────────────┘
│ WiFi / USB adb reverse
┌──────────────────▼─────────────────────────┐
│ PC (Python) │
│ Dashboard (PyQt5) │
│ ├── 3D立方体 (四元数旋转,无万向节锁) │
│ ├── Roll/Pitch/Yaw 弧形仪表盘 │
│ ├── 📷 摄像头实时画面 │
│ └── ArUco 位姿文本显示 │
└─────────────────────────────────────────────┘
- 手机: Android 11+, 后置摄像头
- PC: Windows, Python 3.8+, Android Studio
- 连接: USB (adb reverse) 或同一WiFi
# Android Studio → File → Open → src/android
# 连接手机 → Run 'app'pip install PyQt5 opencv-python opencv-contrib-python numpypython src/pc/gen_aruco.py
# 生成 → src/pc/aruco_sandbox.png
# 在平板/另一屏幕上打开此图& "$env:LOCALAPPDATA\Android\Sdk\platform-tools\adb.exe" reverse tcp:9000 tcp:9000
& "$env:LOCALAPPDATA\Android\Sdk\platform-tools\adb.exe" reverse tcp:9001 tcp:9001# 终端1: PC 仪表盘
python src/pc/dashboard.py
# 手机输入 127.0.0.1 → 连接 → ▶ 推送VirtualCamStudio/
├── README.md
├── requirements.txt
├── IMPLEMENTATION_PLAN.md
├── docs/
│ ├── DIY 虚拟相机开源技术栈调研.md
│ └── Khara虚拟摄影棚技术解析.md
├── src/
│ ├── android/ # Android 端
│ │ ├── app/src/main/java/com/virtualcam/mobile/
│ │ │ ├── MainActivity.kt
│ │ │ ├── camera/CameraManager.kt
│ │ │ ├── aruco/ArUcoTracker.kt
│ │ │ ├── sensor/IMUSensorManager.kt
│ │ │ └── network/OSCDataPusher.kt
│ │ └── app/src/main/res/layout/activity_main.xml
│ └── pc/ # PC 端
│ ├── dashboard.py
│ ├── gen_aruco.py
│ └── aruco_sandbox.png
└── .gitignore
| 端 | 模块 | 技术 |
|---|---|---|
| 📱手机 | 相机 | Android Camera2 API |
| ArUco | OpenCV 4.5.3 (optimized bytedico) | |
| 位姿 | Rodrigues → 四元数 | |
| 网络 | UDP/DatagramSocket + JSON | |
| 🖥️PC | GUI | PyQt5 Fusion style |
| 3D渲染 | QPainter 手绘旋转立方体 | |
| 网络 | socket + json | |
| 协议 | 9000(数据) + 9001(视频) |
端口 9000 (JSON):
{"type":"imu", "qw":..., "qx":..., ...} # 60Hz
{"type":"aruco", "qw":..., "tx":..., ...} # ~100Hz
{"type":"heartbeat"} # 每2s
{"type":"calib", "fx":..., "fy":...} # 一次性
端口 9001 (Binary): JPEG 帧 (640×480)
| 版本 | 功能 |
|---|---|
| v0.1 | ✅ ArUco 视觉定位 + PC 3D 仪表盘 |
| v0.2 | 🔲 IMU + ArUco EKF 融合 |
| v0.3 | 🔲 Blender 插件 / 虚拟相机驱动 |
| v1.0 | 🔲 沙盘多标记 + 全6DoF追踪 |
MIT