mi-task/test/task-arrow/README_arrow_detection.md

101 lines
2.6 KiB
Markdown
Raw Normal View History

# 箭头方向检测功能
本模块提供了从图像中检测绿色箭头指向方向的功能。可以集成到机器人控制系统中,用于根据视觉信息引导机器人运动。
## 功能特性
- 从图像中提取绿色箭头
- 判断箭头指向方向(左或右)
- 可视化检测过程
- 与ROS图像订阅集成
- 可作为独立工具使用
## 文件结构
- `utils/decode_arrow.py` - 核心箭头检测算法
- `task_5/detect_arrow_direction.py` - 与ImageProcessor集成的箭头检测器
- `test/test_arrow.py` - 命令行测试工具
- `test/test_arrow_with_image.py` - 带参数的图像测试工具
## 使用方法
### 1. 独立测试箭头检测
```bash
# 基本用法
python test/test_arrow.py path/to/image.png
# 高级用法
python test/test_arrow_with_image.py path/to/image.png --save result.jpg --show --debug
```
### 2. 在机器人任务中使用
箭头检测功能已集成到`task_5.py`中。机器人会根据检测到的箭头方向(左或右)来调整其移动方向。
```python
from task_5.task_5 import run_task_5
# 机器人控制代码
run_task_5(ctrl, msg, image_processor) # image_processor可选
```
### 3. 作为独立模块使用
```python
from utils.decode_arrow import detect_arrow_direction, visualize_arrow_detection
# 检测箭头方向
image = cv2.imread("path/to/image.jpg")
direction = detect_arrow_direction(image)
print(f"检测到的箭头方向: {direction}")
# 可视化检测过程
visualize_arrow_detection(image, "result.jpg")
```
或者使用集成的ArrowDetector类
```python
from task_5.detect_arrow_direction import ArrowDetector
# 初始化检测器
detector = ArrowDetector()
# 获取箭头方向
direction = detector.get_arrow_direction()
print(f"检测到的箭头方向: {direction}")
# 可视化并保存结果
detector.visualize_current_detection("result.jpg")
# 清理资源
detector.destroy()
```
## 算法原理
1. 将图像转换为HSV颜色空间
2. 使用颜色阈值提取绿色区域
3. 查找绿色区域的轮廓
4. 分析轮廓的几何特性,确定箭头方向
5. 计算轮廓的左右区域像素密度,判断指向方向
## 参数调整
如果检测效果不理想,可以调整以下参数:
1. `utils/decode_arrow.py`中的绿色HSV阈值
```python
lower_green = np.array([40, 50, 50]) # 绿色的HSV下限
upper_green = np.array([80, 255, 255]) # 绿色的HSV上限
```
2. 根据实际情况调整像素密度比较的逻辑。
## 注意事项
- 确保图像中的箭头颜色为绿色
- 图像中应该只有一个明显的箭头
- 光照条件会影响绿色提取的效果
- 如果检测结果不准确可能需要调整HSV阈值