

## 项目背景
在微信群看到一个验证码,需要拖动背景图上的小球躲避障碍物击中目标。这激发了我的技术挑战欲望 - 能否通过计算机视觉技术自动识别障碍物并规划移动路径?
https://dun.163.com/trial/avoid

## 技术思路
### 核心构想
1. 使用YOLO识别所有障碍物
2. 将图像转换为网格地图
3. 应用路径规划算法避开障碍物
4. 自动化执行小球移动
## 实施过程
### 第一步:数据收集
下载了20-30张验证码背景图,发现背景图下方的图案就是需要击中的目标和障碍物。

### 第二步:障碍物识别
通过观察分析,识别出大约10种不同的障碍物类型,种类是自定义的,不重复就行:

### 第三步:数据标注
这是最枯燥但关键的环节 - 手动标注每个障碍物的位置。

**标注文件结构:**
train/ # 训练图片(8张)
valid/ # 验证图片(2张)
data.yaml # 数据集配置文件
`data.yaml`文件包含类别信息和标注坐标,格式为:
类别信息
边界框坐标数据

### 第四步:模型训练
**环境配置:**
pip install ultralytics训练命令:
yolo detect train data=data.yaml model=yolo8n.pt epochs=500 imgsz=640 device=mps训练参数说明:
data: 数据集配置文件
model: 预训练基础模型(YOLO8n.pt)
epochs: 训练轮次(500轮)
imgsz: 图像尺寸(640px)
支持早停机制:连续20轮无显著提升自动停止
初始训练:10张图片,准确率约60%
优化后:20张图片,准确率提升至90%+
使用best.pt作为最终模型(weight)

``` python
from ultralytics import YOLO
model = YOLO('avoid.pt')print(model.names)
results = model('train/images/0001_jpg.rf.0a04664b463c4e0e526a25b2819246b3.jpg',conf=0.3,iou=0.5) # 替换为你自己的图片路径print(results)results[0].show()
成功实现障碍物识别功能:

网格化处理:
将像素点转换为网格
创建0-1矩阵:0=可通行,1=障碍物,2=目标 (小球大小20*20,要求小球中心点有个安全距离10个像素,小球起步时固定位置在背景图10,150的位置)
要求:路径从0到2不触碰1
算法选择:
使用A*寻路算法进行最优路径规划
上方区域(320×240):用于障碍物识别
下方区域:识别目标类型
获取目标坐标后规划路径
通过drissionpage自动化执行移动操作


成功实现自动避障路径规划功能!
有了这个模型这个验证也是迎刃而解