You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
158 lines
5.3 KiB
158 lines
5.3 KiB
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
摄像头自动配置工具
|
|
自动获取设备位置和朝向,设置摄像头参数
|
|
"""
|
|
|
|
import sys
|
|
import os
|
|
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
|
|
from src.orientation_detector import OrientationDetector
|
|
|
|
|
|
def main():
|
|
"""主函数"""
|
|
print("=" * 60)
|
|
print("🤖 摄像头自动配置工具")
|
|
print("=" * 60)
|
|
print()
|
|
|
|
print("🎯 功能说明:")
|
|
print(" • 自动获取当前设备的GPS位置")
|
|
print(" • 自动检测设备朝向")
|
|
print(" • 计算摄像头应该面向用户的角度")
|
|
print(" • 自动更新系统配置文件")
|
|
print()
|
|
|
|
print("⚠️ 注意事项:")
|
|
print(" • 请确保设备连接到互联网")
|
|
print(" • Windows系统可能需要开启位置服务")
|
|
print(" • 桌面设备朝向检测精度有限")
|
|
print()
|
|
|
|
try:
|
|
# 创建朝向检测器
|
|
detector = OrientationDetector()
|
|
|
|
# 执行自动配置
|
|
result = detector.auto_configure_camera_location()
|
|
|
|
if result['success']:
|
|
print()
|
|
print("✅ 自动配置成功!")
|
|
print("📊 配置详情:")
|
|
print(f" 📍 GPS位置: {result['gps_location'][0]:.6f}, {result['gps_location'][1]:.6f}")
|
|
print(f" 🧭 设备朝向: {result['device_heading']:.1f}°")
|
|
print(f" 📷 摄像头朝向: {result['camera_heading']:.1f}°")
|
|
print(f" 🎯 定位方法: {result['method']}")
|
|
print(f" 📏 定位精度: ±{result['accuracy']:.0f}m")
|
|
print()
|
|
|
|
# 询问是否应用配置
|
|
while True:
|
|
choice = input("🔧 是否应用此配置? (y/n/r): ").strip().lower()
|
|
|
|
if choice == 'y':
|
|
# 应用配置
|
|
detector.update_camera_config(
|
|
result['gps_location'],
|
|
result['camera_heading']
|
|
)
|
|
print("✅ 配置已应用到系统!")
|
|
break
|
|
|
|
elif choice == 'n':
|
|
print("⏭️ 配置未应用")
|
|
break
|
|
|
|
elif choice == 'r':
|
|
# 重新检测
|
|
print("\n🔄 重新检测...")
|
|
result = detector.auto_configure_camera_location()
|
|
if not result['success']:
|
|
print("❌ 重新检测失败")
|
|
break
|
|
|
|
print("📊 新的配置详情:")
|
|
print(f" 📍 GPS位置: {result['gps_location'][0]:.6f}, {result['gps_location'][1]:.6f}")
|
|
print(f" 🧭 设备朝向: {result['device_heading']:.1f}°")
|
|
print(f" 📷 摄像头朝向: {result['camera_heading']:.1f}°")
|
|
print(f" 🎯 定位方法: {result['method']}")
|
|
print(f" 📏 定位精度: ±{result['accuracy']:.0f}m")
|
|
print()
|
|
|
|
else:
|
|
print("❌ 请输入 y(应用)/n(取消)/r(重新检测)")
|
|
|
|
else:
|
|
print("❌ 自动配置失败")
|
|
print("💡 建议:")
|
|
print(" 1. 检查网络连接")
|
|
print(" 2. 使用手动配置: python tools/setup_camera_location.py")
|
|
print(" 3. 或在Web界面中手动设置")
|
|
|
|
except KeyboardInterrupt:
|
|
print("\n🔴 用户取消操作")
|
|
|
|
except Exception as e:
|
|
print(f"❌ 配置过程出错: {e}")
|
|
print("💡 建议使用手动配置工具")
|
|
|
|
finally:
|
|
print("\n👋 配置工具结束")
|
|
|
|
|
|
def test_gps_only():
|
|
"""仅测试GPS定位功能"""
|
|
print("🧪 GPS定位测试")
|
|
print("-" * 30)
|
|
|
|
detector = OrientationDetector()
|
|
location = detector.get_current_gps_location()
|
|
|
|
if location:
|
|
lat, lng, accuracy = location
|
|
print(f"✅ GPS测试成功:")
|
|
print(f" 📍 位置: {lat:.6f}, {lng:.6f}")
|
|
print(f" 📏 精度: ±{accuracy:.0f}m")
|
|
else:
|
|
print("❌ GPS测试失败")
|
|
|
|
|
|
def test_heading_only():
|
|
"""仅测试朝向检测功能"""
|
|
print("🧪 朝向检测测试")
|
|
print("-" * 30)
|
|
|
|
detector = OrientationDetector()
|
|
heading = detector.get_device_heading()
|
|
|
|
if heading is not None:
|
|
print(f"✅ 朝向测试成功:")
|
|
print(f" 🧭 设备朝向: {heading:.1f}°")
|
|
|
|
# 计算摄像头朝向
|
|
camera_heading = detector.calculate_camera_heading_facing_user(heading)
|
|
print(f" 📷 摄像头朝向: {camera_heading:.1f}°")
|
|
else:
|
|
print("❌ 朝向测试失败")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
import argparse
|
|
|
|
parser = argparse.ArgumentParser(description='摄像头自动配置工具')
|
|
parser.add_argument('--test-gps', action='store_true', help='仅测试GPS功能')
|
|
parser.add_argument('--test-heading', action='store_true', help='仅测试朝向功能')
|
|
|
|
args = parser.parse_args()
|
|
|
|
if args.test_gps:
|
|
test_gps_only()
|
|
elif args.test_heading:
|
|
test_heading_only()
|
|
else:
|
|
main() |