更新README.md,重构任务模块结构,添加多个任务说明,包括取货、弯道、上下坡、石板路和过栅栏,补充相关图示和算法描述,简化内容以提高可读性。
This commit is contained in:
parent
04613d685d
commit
f2298f4085
132
README.md
132
README.md
@ -1,113 +1,61 @@
|
||||
# 黄色赛道检测与距离估算
|
||||
# 任务模块
|
||||
|
||||
这个项目提供了一套用于检测黄色赛道并估算距离的工具。基于OpenCV的计算机视觉技术,能够从图像中识别黄色赛道,计算方向角度,并估算摄像机到赛道前方的距离。
|
||||
## top
|
||||
|
||||
## 功能特点
|
||||
1. “装货 / qrcode”
|
||||
2. 曲线赛道
|
||||
3. 上下坡
|
||||
- 存在两种可能性
|
||||
4. 石板道
|
||||
5. 栅栏 / 栏杆
|
||||
|
||||
- 黄色赛道检测与分割
|
||||
- 赛道方向和角度计算
|
||||
- 赛道距离估算
|
||||
- 结果可视化展示
|
||||
- 提供易于使用的测试工具
|
||||
## Task-1:出生点 - 取货
|
||||
|
||||
## 安装依赖
|
||||

|
||||
|
||||
确保已安装以下依赖库:
|
||||
从二维码取货完,然后走到弯道入口。
|
||||
|
||||
```bash
|
||||
pip install opencv-python numpy
|
||||
```
|
||||

|
||||
|
||||
## 使用方法
|
||||
### 校准前方横线 & 距离距离
|
||||
|
||||
### 基本用法
|
||||
RGB 摄像机所在位置的确定:
|
||||
主要是需要确定其高度。
|
||||
|
||||
```python
|
||||
from utils.detect_track import detect_yellow_track, visualize_track_detection
|
||||
## Task-2:弯道任务
|
||||
过去,以及回来。两个方向都需要。
|
||||
|
||||
# 检测赛道并估算距离
|
||||
image_path = "path/to/your/image.jpg"
|
||||
distance, path_info = detect_yellow_track(image_path)
|
||||

|
||||

|
||||
|
||||
if distance is not None:
|
||||
print(f"估算距离: {distance:.2f}米")
|
||||
print(f"赛道角度: {path_info['track_angle']:.2f}°")
|
||||
print(f"转向方向: {path_info['turn_direction']}")
|
||||
## Task-2.5:识别
|
||||
> 根据箭头决定方向。
|
||||
|
||||
# 可视化检测过程
|
||||
visualize_track_detection(image_path, save_path="result.jpg")
|
||||
```
|
||||
这里采取传统cv的基于凸包计算的算法。
|
||||
|
||||
### 使用测试脚本
|
||||
## Task-3:上下坡
|
||||
同样需要考虑两个方向。(正式计时各有一半的概率)
|
||||
> 感觉两个坡度稍微有一点点区别。
|
||||
|
||||
项目提供了一个方便的测试脚本:
|
||||

|
||||

|
||||
|
||||
```bash
|
||||
python test_track_detection.py --image path/to/your/image.jpg --observe --save result.jpg
|
||||
```
|
||||
以及反方向。
|
||||
|
||||
参数说明:
|
||||
- `--image`: 要处理的图像路径(必需)
|
||||
- `--save`: 结果图像保存路径(可选)
|
||||
- `--observe`: 显示处理步骤的中间结果
|
||||
- `--delay`: 中间步骤显示的延迟时间,单位为毫秒(默认500ms)
|
||||
## Task-4:石板路
|
||||
|
||||
## 技术细节
|
||||

|
||||

|
||||
|
||||
### 检测原理
|
||||
## Task-5:过栅栏
|
||||

|
||||
|
||||
1. 将图像转换为HSV颜色空间
|
||||
2. 使用颜色阈值提取黄色区域
|
||||
3. 寻找轮廓并合并相关区域
|
||||
4. 计算赛道的上部和下部中心点
|
||||
5. 基于中心点计算方向角度
|
||||
6. 根据黄色区域在图像中的占比估算距离
|
||||
## Task-5.5:走向卸货
|
||||
从上一个赛道结束到 B 二维码。
|
||||
|
||||
### 距离估算
|
||||
## Task-6:卸货
|
||||
也可能在另一边。
|
||||
这里是感觉在走过去的过程中就能判断二维码。
|
||||
|
||||
距离估算基于以下假设:
|
||||
- 黄色赛道在图像中的占比与实际距离有反比关系
|
||||
- 占比越大,距离越近;占比越小,距离越远
|
||||
|
||||
注意:实际应用中,建议根据相机参数和实际测量进行标定,以获得更准确的结果。
|
||||
|
||||
### 函数说明
|
||||
|
||||
- `preprocess_image(image)`: 预处理图像,进行边缘检测
|
||||
- `detect_yellow_track(image, observe=False, delay=500)`: 检测黄色赛道并估算距离
|
||||
- `visualize_track_detection(image, save_path=None, observe=False, delay=500)`: 可视化检测过程
|
||||
- `estimate_distance_to_track(image)`: 估算到赛道的距离(简化版API)
|
||||
|
||||
## 调整参数
|
||||
|
||||
如果检测效果不理想,可以尝试调整以下参数:
|
||||
|
||||
1. HSV颜色范围(针对不同光照条件):
|
||||
```python
|
||||
lower_yellow = np.array([20, 100, 100]) # 调整黄色的下限
|
||||
upper_yellow = np.array([30, 255, 255]) # 调整黄色的上限
|
||||
```
|
||||
|
||||
2. 轮廓近似参数:
|
||||
```python
|
||||
epsilon = 0.01 * cv2.arcLength(all_contours, False) # 调整系数(0.01)
|
||||
```
|
||||
|
||||
3. 距离估算系数:
|
||||
```python
|
||||
normalized_distance = min(10.0, max(0.0, estimated_distance / 100.0)) # 调整系数(100.0)
|
||||
```
|
||||
|
||||
## 示例结果
|
||||
|
||||
处理后的图像将包含以下信息:
|
||||
- 红色点:表示赛道的顶部和底部中心点
|
||||
- 绿色线:表示赛道的中心线
|
||||
- 文本信息:距离、角度和方向
|
||||
|
||||
## 注意事项
|
||||
|
||||
- 该方法在光照条件稳定的环境中效果最佳
|
||||
- 黄色赛道需要与背景有足够的对比度
|
||||
- 摄像机应保持相对稳定的高度和角度
|
||||
- 实际应用中需要根据具体场景调整参数
|
||||

|
||||

|
Loading…
x
Reference in New Issue
Block a user