# 摄像头朝向自动配置功能指南 🧭 ## 功能概述 本系统现在支持自动获取设备位置和朝向,将本地摄像头设置为面朝使用者,实现智能的摄像头配置。 ## 🎯 主要功能 ### 1. 自动GPS定位 - **Windows系统**: 使用Windows Location API获取精确GPS位置 - **其他系统**: 使用IP地理定位作为备选方案 - **精度**: GPS可达10米内,IP定位约10公里 ### 2. 设备朝向检测 - **桌面设备**: 使用默认朝向算法(假设用户面向屏幕) - **移动设备**: 支持陀螺仪和磁力计朝向检测 - **智能计算**: 自动计算摄像头应该面向用户的角度 ### 3. 自动配置应用 - **实时更新**: 自动更新配置文件和运行时参数 - **地图同步**: 自动更新地图上的摄像头位置标记 - **即时生效**: 配置立即应用到距离计算和人员定位 ## 🚀 使用方法 ### 方法一:启动时自动配置 ```bash python main_web.py ``` 系统会检测到默认配置并询问是否自动配置: ``` 🤖 检测到摄像头使用默认配置 是否要自动配置摄像头位置和朝向? • 输入 'y' - 立即自动配置 • 输入 'n' - 跳过,使用Web界面配置 • 直接回车 - 跳过自动配置 🔧 请选择 (y/n/回车): y ``` ### 方法二:独立配置工具 ```bash # 完整自动配置 python tools/auto_configure_camera.py # 仅测试GPS功能 python tools/auto_configure_camera.py --test-gps # 仅测试朝向功能 python tools/auto_configure_camera.py --test-heading ``` ### 方法三:Web界面配置 1. 启动Web服务器:`python main_web.py` 2. 打开浏览器访问 `https://127.0.0.1:5000` 3. 在"🧭 自动位置配置"面板中: - 点击"📍 获取位置"按钮 - 点击"🧭 获取朝向"按钮 - 点击"🤖 自动配置摄像头"按钮 ## 📱 Web界面功能详解 ### GPS位置获取 ```javascript // 使用浏览器Geolocation API navigator.geolocation.getCurrentPosition() ``` **支持的浏览器**: - ✅ Chrome/Edge (推荐) - ✅ Firefox - ✅ Safari - ❌ IE (不支持) **权限要求**: - 首次使用需要授权位置权限 - HTTPS环境下精度更高 - 室外环境GPS信号更好 ### 设备朝向检测 ```javascript // 使用设备朝向API window.addEventListener('deviceorientation', handleOrientation) ``` **支持情况**: - 📱 **移动设备**: 完全支持(手机、平板) - 💻 **桌面设备**: 有限支持(使用算法估算) - 🍎 **iOS 13+**: 需要明确请求权限 ## ⚙️ 技术实现 ### 后端模块 #### 1. OrientationDetector (`src/orientation_detector.py`) - GPS位置获取(多平台支持) - 设备朝向检测 - 摄像头朝向计算 - 配置文件更新 #### 2. WebOrientationDetector (`src/web_orientation_detector.py`) - Web API接口 - 前后端数据同步 - 实时状态管理 ### 前端功能 #### JavaScript函数 - `requestGPSPermission()` - GPS权限请求 - `requestOrientationPermission()` - 朝向权限请求 - `autoConfigureCamera()` - 自动配置执行 - `manualConfiguration()` - 手动配置入口 #### API接口 - `POST /api/orientation/auto_configure` - 自动配置 - `POST /api/orientation/update_location` - 更新GPS - `POST /api/orientation/update_heading` - 更新朝向 - `GET /api/orientation/get_status` - 获取状态 ## 🔧 配置原理 ### 朝向计算逻辑 ```python def calculate_camera_heading_facing_user(self, user_heading: float) -> float: """ 计算摄像头朝向用户的角度 摄像头朝向 = (用户朝向 + 180°) % 360° """ camera_heading = (user_heading + 180) % 360 return camera_heading ``` ### 坐标转换 ```python def calculate_person_position(self, pixel_x, pixel_y, distance, frame_width, frame_height): """ 基于摄像头位置、朝向和距离计算人员GPS坐标 使用球面几何学进行精确计算 """ # 像素到角度转换 horizontal_angle_per_pixel = self.camera_fov / frame_width horizontal_offset_degrees = (pixel_x - center_x) * horizontal_angle_per_pixel # 计算实际方位角 person_bearing = (self.camera_heading + horizontal_offset_degrees) % 360 # 球面坐标计算 person_lat, person_lng = self._calculate_destination_point( self.camera_lat, self.camera_lng, distance, person_bearing ) ``` ## 📋 系统要求 ### 环境要求 - Python 3.7+ - 现代Web浏览器 - 网络连接(GPS定位需要) ### Windows特别要求 ```bash # 安装Windows位置服务支持 pip install winrt-runtime winrt-Windows.Devices.Geolocation ``` ### 移动设备要求 - HTTPS访问(GPS权限要求) - 现代移动浏览器 - 设备朝向传感器支持 ## 🔍 故障排除 ### GPS获取失败 **常见原因**: - 位置权限被拒绝 - 网络连接问题 - GPS信号不佳 **解决方案**: 1. 检查浏览器位置权限设置 2. 移动到室外或窗边 3. 使用IP定位作为备选 4. 手动输入坐标 ### 朝向检测失败 **常见原因**: - 设备不支持朝向传感器 - 浏览器兼容性问题 - 权限被拒绝 **解决方案**: 1. 使用支持的移动设备 2. 更新到现代浏览器 3. 允许设备朝向权限 4. 使用手动配置 ### 配置不生效 **可能原因**: - 配置文件写入失败 - 权限不足 - 模块导入错误 **解决方案**: 1. 检查文件写入权限 2. 重启应用程序 3. 查看控制台错误信息 ## 💡 使用建议 ### 最佳实践 1. **首次配置**: 使用Web界面进行配置,可视化效果更好 2. **定期更新**: 位置变化时重新配置 3. **精度要求**: GPS环境下精度更高,室内可用IP定位 4. **设备选择**: 移动设备朝向检测更准确 ### 注意事项 1. **隐私保护**: GPS数据仅用于本地配置,不会上传 2. **网络要求**: 初次配置需要网络连接 3. **兼容性**: 老旧浏览器可能不支持某些功能 4. **精度限制**: 桌面设备朝向检测精度有限 ## 📚 相关文档 - [MAP_USAGE_GUIDE.md](MAP_USAGE_GUIDE.md) - 地图功能使用指南 - [MOBILE_GUIDE.md](MOBILE_GUIDE.md) - 移动端使用指南 - [HTTPS_SETUP.md](HTTPS_SETUP.md) - HTTPS配置指南 --- 🎯 **快速开始**: 运行 `python main_web.py`,选择自动配置,享受智能的摄像头定位体验!