这是一个基于FastAPI的云台控制服务,支持视频流处理、图像捕获和全景图生成。
- 🎮 云台控制(pan/tilt)
- 📹 实时视频流
- 📸 图像捕获
- 🖼️ 全景图生成
- 🌐 Web界面
视频设备路径,默认为 /dev/video7
# 构建镜像
sudo docker build -t insta360-driver .# 推荐运行命令(使用--device挂载特定设备)
sudo docker run --rm -it \
--device=/dev/video7:/dev/video7 \
-e VIDEO_DEVICE=/dev/video7 \
-p 8800:8000 \
insta360-driver参数说明:
--device=/dev/video7:/dev/video7: 直接挂载特定视频设备-e VIDEO_DEVICE=/dev/video7: 设置环境变量指定视频设备-p 8800:8000: 端口映射(主机8800端口映射到容器8000端口)--rm: 容器停止后自动删除-it: 交互模式运行
- API文档: http://localhost:8800/docs
- Web界面: http://localhost:8800/view
- 健康检查: http://localhost:8800/status
curl http://localhost:8800/status响应示例:
{
"status": "ok",
"current_pan": "0",
"current_tilt": "0",
"state": {
"pan": 0,
"tilt": 0,
"step": 36000
}
}curl http://localhost:8800/capture返回JPEG格式的图像数据
curl -X POST http://localhost:8800/pan-leftcurl -X POST http://localhost:8800/pan-rightcurl -X POST http://localhost:8800/tilt-upcurl -X POST http://localhost:8800/tilt-down# 移动到指定pan和tilt位置
curl -X POST "http://localhost:8800/move-to-position" \
-H "Content-Type: application/json" \
-d '{"pan": 360000, "tilt": 180000}'
# 回到原点
curl -X POST "http://localhost:8800/move-to-position" \
-H "Content-Type: application/json" \
-d '{"pan": 0, "tilt": 0}'参数说明:
pan: 水平旋转角度(范围:-522000 到 522000)tilt: 垂直倾斜角度(范围:-522000 到 522000)
响应示例:
{
"status": "ok",
"message": "Moved to position pan=360000, tilt=180000",
"pan": 360000,
"tilt": 180000
}curl -X POST http://localhost:8800/generate-panorama功能说明:
- 自动控制云台从-522000到522000度,每次移动36000度
- 在每个位置拍摄一张图片
- 使用OpenCV拼接所有图片生成全景图
- 保存到
panorama_YYYYMMDD_HHMMSS.jpg文件
响应示例:
{
"status": "ok",
"panorama": "panorama_20241219_143022.jpg",
"source_images": ["captured_images/pan_-522000.jpg", ...],
"total_captured": 30,
"successful_stitching": 30
}# 构建镜像
sudo docker build -t insta360-driver .
# 运行容器(指定视频设备)
sudo docker run --rm -it \
--device=/dev/video7:/dev/video7 \
-e VIDEO_DEVICE=/dev/video7 \
-p 8800:8000 \
insta360-driver# 启动服务
docker-compose up -d
# 查看日志
docker-compose logs -f
# 停止服务
docker-compose down- 给有视频设备的节点打标签:
kubectl label nodes <node-name> hardware=camera- 确保节点上有视频设备:
# 在节点上检查
ls -la /dev/video*# 应用配置
kubectl apply -f k8s-deployment.yaml
# 查看部署状态
kubectl get pods -l app=insta360-driver
# 查看服务
kubectl get svc insta360-service如果需要修改视频设备路径:
# 编辑ConfigMap
kubectl edit configmap insta360-config
# 或者重新应用配置
kubectl apply -f k8s-deployment.yaml
# 重启Pod
kubectl rollout restart deployment insta360-driver- 检查设备是否存在:
ls -la /dev/video*- 检查设备权限:
sudo chmod 666 /dev/video7- 检查v4l2-ctl工具:
v4l2-ctl --list-devices- 测试设备是否可用:
v4l2-ctl -d /dev/video7 --list-formats-ext- 确保使用正确的设备挂载方式:
# 推荐方式
sudo docker run --device=/dev/video7:/dev/video7 ...
# 或者使用特权模式(不推荐)
sudo docker run --privileged -v /dev:/dev ...- 检查端口映射:
# 确保端口没有被占用
netstat -tlnp | grep 8800- 检查Pod状态:
kubectl describe pod <pod-name>- 查看Pod日志:
kubectl logs <pod-name>- 检查节点标签:
kubectl get nodes --show-labels | grep camera- 设备权限: 确保视频设备有正确的读写权限
- 端口映射: 注意Docker运行时的端口映射(8800:8000)
- 设备挂载: 推荐使用
--device参数而不是--privileged - 资源限制: 全景图生成需要较多内存和CPU资源
- 网络访问: 确保防火墙允许对应端口访问
VIDEO_DEVICE: 视频设备路径(默认:/dev/video7)PYTHONPATH: Python路径(默认:/app)
driver/
├── main.py # 主应用文件
├── requirements.txt # Python依赖
├── Dockerfile # Docker构建文件
├── docker-compose.yml # Docker Compose配置
├── k8s-deployment.yaml # Kubernetes部署配置
├── README.md # 说明文档
└── captured_images/ # 截图保存目录
- Web框架: FastAPI
- 图像处理: OpenCV
- 视频控制: v4l2-ctl
- 容器化: Docker
- 编排: Kubernetes