1. 项目概述
这个视觉识别项目实现了一个非常实用的功能:在实时视频流中同时检测红色物体和圆形物体,并用不同颜色的标记框进行标注。具体规则是:
- 所有红色物体都用绿色矩形框标注
- 所有圆形物体都用蓝色圆形框标注,并标记圆心
这种双标记系统在工业检测、机器人视觉和智能监控等领域有广泛应用。比如在自动化生产线上,可以同时追踪特定颜色的产品和特定形状的零部件。
2. 技术方案设计
2.1 并行检测架构
项目采用了完全独立的双检测通道设计:
-
颜色检测通道:
- 使用LAB色彩空间的阈值分割
- 只关注红色物体
- 输出结果为连通区域(blob)的外接矩形
-
形状检测通道:
- 使用霍夫圆变换
- 只关注圆形轮廓
- 输出结果为圆心坐标和半径
这种设计确保了颜色和形状检测互不干扰,即使遇到红色圆形物体,也能正确显示两种标记。
2.2 关键技术选型
-
LAB色彩空间:
- 相比RGB/HSV,LAB对光照变化更鲁棒
- L通道表示亮度,A通道表示红绿色谱,B通道表示黄蓝色谱
- 红色主要在A通道有显著响应
-
霍夫圆变换:
- 基于边缘检测的圆形识别算法
- 通过参数空间投票确定圆心和半径
- 对部分遮挡的圆形也有较好识别效果
3. 核心实现细节
3.1 硬件配置
项目基于OpenMV摄像头模块实现,主要硬件参数:
- 图像传感器:OV7725
- 最大分辨率:VGA(640x480)
- 处理器:STM32H7(480MHz)
- 内存:1MB RAM + 2MB Flash
3.2 软件实现
完整代码结构如下:
python复制# 1. 硬件初始化
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.VGA)
# 2. 检测参数配置
red_lab_threshold = [(20, 70, 40, 80, 10, 60)] # LAB阈值
circle_threshold = 2500 # 霍夫圆灵敏度
# 3. 网络配置
wlan = network.WLAN(network.STA_IF)
wlan.ifconfig(('192.168.1.250', '255.255.255.0', '192.168.1.1', '8.8.8.8'))
# 4. 主检测函数
def parallel_detection(img):
# 红色检测
red_blobs = img.find_blobs(red_lab_threshold,...)
# 圆形检测
circles = img.find_circles(threshold=circle_threshold,...)
# 绘制标记
for blob in red_blobs:
img.draw_rectangle(blob.rect(), color=(0,255,0))
for circle in circles:
img.draw_circle(circle.x(), circle.y(), circle.r(), color=(0,0,255))
img.draw_cross(circle.x(), circle.y(), color=(0,0,255))
# 5. 视频流服务
app = uhttpd.App()
app.route("/", handler=stream_handler)
app.run(host="0.0.0.0", port=80)
3.3 关键参数说明
-
红色检测阈值:
python复制
red_lab_threshold = [(Lmin, Lmax, Amin, Amax, Bmin, Bmax)]- 需要根据实际光照条件调整
- 建议使用OpenMV IDE的阈值编辑器工具校准
-
圆形检测灵敏度:
python复制circle_detection_threshold = 2500- 值越小灵敏度越高
- 典型范围2000-3000
-
性能优化参数:
pixels_threshold: 过滤小面积噪声merge=True: 合并相邻色块margin=10: 边界扩展像素
4. 应用场景与优化建议
4.1 典型应用场景
-
工业分拣:
- 红色零件质量检测
- 圆形轴承计数
-
教育实验:
- 机器视觉教学
- 颜色形状识别demo
-
智能监控:
- 特定颜色物体追踪
- 圆形设备状态监测
4.2 性能优化技巧
-
分辨率选择:
- VGA(640x480): 高精度但帧率低
- QVGA(320x240): 平衡精度和速度
- QQVGA(160x120): 最高帧率
-
ROI设置:
python复制
img.find_blobs(..., roi=(x,y,w,h))- 只检测感兴趣区域
- 可显著提升处理速度
-
多级检测:
- 先低分辨率快速检测
- 发现目标后再高精度确认
5. 常见问题排查
5.1 红色检测不稳定
可能原因:
- 光照变化影响颜色表现
- 阈值范围设置不合理
- 反光或阴影干扰
解决方案:
- 使用均匀光源
- 重新校准LAB阈值
- 增加
merge和margin参数
5.2 圆形漏检或误检
调整方法:
- 降低
threshold值增加灵敏度 - 调整
x_margin/y_margin过滤相邻圆 - 设置
r_min/r_max限制半径范围
5.3 帧率过低
优化措施:
- 降低分辨率
- 缩小检测区域(ROI)
- 减少JPEG压缩质量(quality)
- 关闭未使用的传感器功能
6. 扩展应用思路
-
多颜色识别:
- 扩展LAB阈值数组
- 为不同颜色分配不同标记
-
形状组合检测:
- 增加矩形/三角形识别
- 实现形状分类统计
-
动态跟踪:
- 结合机械云台
- 实现自动跟随拍摄
-
数据记录:
- 保存检测结果到SD卡
- 生成统计报表
在实际项目中,这套基础框架可以根据具体需求进行各种扩展。比如添加串口通信将检测结果发送给主控制器,或者增加PWM输出直接驱动执行机构。
