本项目为2021全国大学生电子设计大赛F题【送药小车】视觉代码。
1、视觉硬件设备:
因为小车负载能力原因,手头上又没有树莓派,所以选用OpenMV完成视觉任务。
OpenMV 4 H7 + 1080p 2.8mm OV摄像头
2、项目文件目录树
———
|---model (存储地面数字模板图像BMP文件)
|---model_template (存储地面数字模板PGM文件)
|---target (存储手持数字模板图像BMP文件)
|---target_template (存储手持数字模板PGM文件)
|---main.py (主程序代码)
3、已完成的功能点:
1、视觉循迹(偏离检测) 【误差 < 5°】
2、数字识别 【基于NCC模板匹配,使用场景受限,需要手动打标】
3、路口事件决策
3、上下位机事件交互
4、OpenMV参考资料:
1、上电自动执行main.py函数。
2、获取目标病房号【检测手持数字牌】
3、视觉循迹,检测路口并尝试识别路口地面数字提示
4、处理上下位机数据
详情请参考项目代码注释 :)
电赛的程序本身是有很多值得做Trick的地方,主要难点是自带的相机镜头畸变引发的问题。由于视角和赛场原因对模板匹配地面数字不友好。自带的相机畸变矫正效果并不平滑,建议使用无畸变镜头减少模板匹配难度。对于赛场固定点的模板,模板的采集上采取了临近折中的特征采集法,即额外放置卡片至两个固定点中间靠下并结合两点特征采集,(实际上由于像素点较少,可以人工观察采集特征信息),这提升了不同点位因画面畸变不同的匹配能力。在指定场景下准确率尚可。但由于运算能力限制下的低图像分辨率(160x120),模板泛化能力仍然较差。
建议更换设备到OpenMV4 Plus及以上,能支持神经网络。大幅提高数字识别的泛化能力。在保证视野的情况下使用无畸变镜头减少视觉图像处理难度。
最彻底的优化方法就是别用OpenMV,狗都不用。