From f2298f40851140e9db681178a34207e5670491fa Mon Sep 17 00:00:00 2001 From: Havoc <2993167370@qq.com> Date: Wed, 14 May 2025 14:06:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0README.md=EF=BC=8C=E9=87=8D?= =?UTF-8?q?=E6=9E=84=E4=BB=BB=E5=8A=A1=E6=A8=A1=E5=9D=97=E7=BB=93=E6=9E=84?= =?UTF-8?q?=EF=BC=8C=E6=B7=BB=E5=8A=A0=E5=A4=9A=E4=B8=AA=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E8=AF=B4=E6=98=8E=EF=BC=8C=E5=8C=85=E6=8B=AC=E5=8F=96=E8=B4=A7?= =?UTF-8?q?=E3=80=81=E5=BC=AF=E9=81=93=E3=80=81=E4=B8=8A=E4=B8=8B=E5=9D=A1?= =?UTF-8?q?=E3=80=81=E7=9F=B3=E6=9D=BF=E8=B7=AF=E5=92=8C=E8=BF=87=E6=A0=85?= =?UTF-8?q?=E6=A0=8F=EF=BC=8C=E8=A1=A5=E5=85=85=E7=9B=B8=E5=85=B3=E5=9B=BE?= =?UTF-8?q?=E7=A4=BA=E5=92=8C=E7=AE=97=E6=B3=95=E6=8F=8F=E8=BF=B0=EF=BC=8C?= =?UTF-8?q?=E7=AE=80=E5=8C=96=E5=86=85=E5=AE=B9=E4=BB=A5=E6=8F=90=E9=AB=98?= =?UTF-8?q?=E5=8F=AF=E8=AF=BB=E6=80=A7=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 132 +++++++++++++++++------------------------------------- 1 file changed, 40 insertions(+), 92 deletions(-) diff --git a/README.md b/README.md index eec9a61..46ad21d 100644 --- a/README.md +++ b/README.md @@ -1,113 +1,61 @@ -# 黄色赛道检测与距离估算 +# 任务模块 -这个项目提供了一套用于检测黄色赛道并估算距离的工具。基于OpenCV的计算机视觉技术,能够从图像中识别黄色赛道,计算方向角度,并估算摄像机到赛道前方的距离。 +## top -## 功能特点 +1. “装货 / qrcode” +2. 曲线赛道 +3. 上下坡 + - 存在两种可能性 +4. 石板道 +5. 栅栏 / 栏杆 -- 黄色赛道检测与分割 -- 赛道方向和角度计算 -- 赛道距离估算 -- 结果可视化展示 -- 提供易于使用的测试工具 +## Task-1:出生点 - 取货 -## 安装依赖 +![alt text](./res/readme/image.png) -确保已安装以下依赖库: +从二维码取货完,然后走到弯道入口。 -```bash -pip install opencv-python numpy -``` +![alt text](./res/readme/image-1.png) -## 使用方法 +### 校准前方横线 & 距离距离 -### 基本用法 +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) +![alt text](./res/readme/image-2.png) +![alt text](./res/readme/image-3.png) -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:上下坡 +同样需要考虑两个方向。(正式计时各有一半的概率) +> 感觉两个坡度稍微有一点点区别。 -项目提供了一个方便的测试脚本: +![alt text](./res/readme/image-4.png) +![alt text](./res/readme/image-5.png) -```bash -python test_track_detection.py --image path/to/your/image.jpg --observe --save result.jpg -``` +以及反方向。 -参数说明: -- `--image`: 要处理的图像路径(必需) -- `--save`: 结果图像保存路径(可选) -- `--observe`: 显示处理步骤的中间结果 -- `--delay`: 中间步骤显示的延迟时间,单位为毫秒(默认500ms) +## Task-4:石板路 -## 技术细节 +![alt text](./res/readme/image-6.png) +![alt text](./res/readme/image-7.png) -### 检测原理 +## Task-5:过栅栏 +![alt text](./res/readme/image-8.png) -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) -``` - -## 示例结果 - -处理后的图像将包含以下信息: -- 红色点:表示赛道的顶部和底部中心点 -- 绿色线:表示赛道的中心线 -- 文本信息:距离、角度和方向 - -## 注意事项 - -- 该方法在光照条件稳定的环境中效果最佳 -- 黄色赛道需要与背景有足够的对比度 -- 摄像机应保持相对稳定的高度和角度 -- 实际应用中需要根据具体场景调整参数 \ No newline at end of file +![alt text](./res/readme/image-9.png) +![alt text](./res/readme/image-10.png) \ No newline at end of file