# 摄像头朝向自动配置功能指南 🧭

## 功能概述

本系统现在支持自动获取设备位置和朝向，将本地摄像头设置为面朝使用者，实现智能的摄像头配置。

## 🎯 主要功能

### 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`，选择自动配置，享受智能的摄像头定位体验！ 