文章目录
- openpnp - 底部相机视觉识别的CvPipeLine的参数bug
- 概述
- 笔记
- openpnp的视觉识别参数的错误原因
- 备注
- 补充 - 如果要直接改默认的底部视觉要注意
- END
openpnp - 底部相机视觉识别的CvPipeLine的参数bug
概述
底部相机抓起一个SOD323的元件,进行视觉识别。
识别出的矩形错了,是一个很长的长方形,长方形的短边和器件差不多宽,但是长边比器件长10倍。导致识别出错。
因为这时,无论怎么填写封装的长和宽,都无法正确识别。
当识别出错时,用CvPipeLine的Edit功能,找到了问题。
原来是openpnp给的默认识别参数整错了,改了一下OK.
笔记
因为大部分元件识别都是好的,且用的都是默认的底部相机视觉。
所以,有个别元件识别错误后,要针对这个元件进行视觉识别的参数修正,而不能去动默认的底部视觉参数。
FilterContours命令识别的范围多了,导致识别了吸嘴圆形帽子上的一个点,这要继续过滤。
在FilterContours命令后面,默认就有个MaskCircle命令,默认的diameter是0,即不过滤。
这就导致后续命令用的图像在元件很远的地方有个点(FilterContours命令带过来的)
将MaskCircle的参数diameter改为300,基本就圈住了元件附近,再远的图像就用这个圈过滤掉了。
MaskCircle后面默认的后续命令是DrawContours
默认用的输入图像是filterContours的结果,这就不对了,因为针对这个元件,filterContours识别的多了(除了元件,还有离元件很远的一个点)
将DrawContours的参数contourStageName改为11(就是MaskCircle命令实例名称为11的结果), 这回就OK了。
在后续的命令处理后,红框就只框在元件的引脚外框上。
openpnp的视觉识别参数的错误原因
在FilterContours和DrawContours命令之间,加了一个MaskCircle命令(但是MaskCircle默认没做过滤)。
估计官方也考虑到给的视觉识别参数无法适应所有的吸嘴和元件,所以给用户留了一个改正的节点。
但是DrawContours的输入没有用MaskCircle命令的处理结果,这就是bug了。
备注
对openpnp的视觉处理参数也不熟, 主要是官方也没有文档专门讲这个。
以前都用默认的, 如果真出现问题,无奈,还真不知道怎么弄。
这次发现识别的有问题,在设备开着时,抓一个这种元件进行底部相机视觉识别,如果识别错误或者识别的不稳定,这时就可以在线编辑调试视觉识别参数。
还好,经过简单的修改,能正确识别了。
虽然不太懂官方为啥给这些命令进行图像识别的处理,但是大概齐知道啥意思。
图像识别处理的大概流程如下:
- 从摄像头捕获图像
- 进行颜色转换
- 用蒙版屏蔽不需要的区域(e.g. 吸嘴/元件以外的区域)
- 转成黑白图像
- 画出最小矩形
- 重新载入摄像头的图像
- 将矩形换成红色显示
补充 - 如果要直接改默认的底部视觉要注意
元件的默认底部视觉都是全局的默认底部视觉。
最好是每个封装单独给一个配置,来改视觉。
开始没注意,直接改的底部视觉。
因为加入了MaskCircle命令名字为11,参数diameter值改为了300,其他用默认底部视觉的元件出现了奇怪问题。
e.g. LQFP32元件对齐后,居然是45度。导致贴到板子上角度也是错的。
如果要改全局视觉,MaskCircle命令名字为11,参数diameter值应该改为-1,代表不过滤任何图像,即输入图像直接转成输出图像。