这篇是开篇扯淡。因为常年玩单片机吧,像网上的教程吧,比如正点原子,野火....,他们整体教程个人感觉偏向于互联网,接口。安富莱有DSP相关的教程,会偏一些算法,还有硬石的电机控制也比较不错。但是人工智能边缘计算这块却少的可怜。在我大二那会儿,因为兴趣原因,写了一个在STM32上跑的机器视觉库,当时我用的是keil环境,所以随便取了一个keil version的名字。所以就一直沿用该名字,没有修改过。YM其实就是yao mi,可能我个人比较喜欢猫,猫叫是mi-yao~,但是如果用mi yao可能听起来怪怪的。感觉自己变成了一只猫
当初写这个库的时候,其实我并没有打算开源的。不过他真的非常小型,核心算法部分大概只有4K左右的行数,包含了大部分常用图像处理算法,要移植的话也非常容易。STM32的工程是这样的:
抛开外源移植的ZBAR和QRENCODE两个算法库,单纯YMKV库移植的话,只要CONFIG,GRAPH,YAOMI三个文件夹。当然,你如果不想要GRAPH的话也是可以的,因为他里面是这些东西,没有的话你再加进去:
移植的话,Puse这个文件必须带走,其他文件可以随意,也可以都不要。
但是CONFIG和YAOMI两个文件夹一个不能落下,CONFIG文件内容是这样的:
而YAOMI文件夹是最重要的,内容是这样的:
可能你会说,图像处理用C语言写,你是不是脑子瓦特了?不是特别复杂,而且函数调用都不方便,连struct里都不能放函数!!!em。。。你如果觉得我脑子瓦特了,没啥问题,可能确实有点瓦特,我个人也这样觉得。但是这个库吧,他用起来真的很简便,比如说我要对摄像头传进来的图像进行灰度化,我们只要这样做就可以:
首先,进行底层初始化和算法库的初始化,红色部分:
然后到图像处理函数去写图像处理流程,就可以啦:
彩色图转灰度图只要一行代码就可以,如果复杂点,比如颜色识别,而且是多种颜色一起的话,下面6种颜色色块同时识别:
看着也挺简洁的,我个人觉得是这样.......................................
虽然他当初是跑在STM32上的,但是吧,毕竟下载和验证算法调试什么的,都比较费事。所以我通常在PC端进行算法测试。移植到PC端,首先得解决显示问题,开个窗吧,和之前的就不太一致,所以早期,我就采用了EGE这个图形库,但是毕竟安装库,兼容性偶尔会出问题,比如说老版本的EGE在win10 1809之后的系统设定变了,线程时序问题导致显示不出图形,得去官网更新EGE的库。所以后期,我秉承着极简的原则,放弃了EGE,直接用GDI在控制台上绘图,虚拟出一个LCD设备,直接显示在控制台上:
然后运行颜色识别例子进行测试:
非常好,测试也通过了。我们来看看VS工程都有些啥内容:
多出一个windows特有的文件夹,但是里头的文件只有两个:
所以,这样的话,要从VS工程移植到其他平台都会简单的多了,因为上面这两个文件,除了在控制台上虚拟出一个LCD设备以外,其他啥都没干。
虽然后面改进以后的版本目前也没有开源,不过最初的版本倒是开源了,如果有想参考和学习图像处理和机器视觉的小伙伴们,可以进B站的传送地址:
https://www.bilibili.com/video/BV1q441117cB?from=search&seid=1256428342308790631www.bilibili.com当然或许有人会说,openMV不香吗,树莓派不香吗,其实我觉得也还不错,不过大部分电赛可能会把树莓派禁了,openmv的话,你重新画个原理图伪装一下,估计也是可以的,困难现在都不禁了,我之前也玩过openmv,em.....当时我记得用了一个闭运算,导致掉帧非常严重,以至于和机械臂闭环非常的......不友好,当时用的单目做三维物体定位,视频传送地址:
stm32机械臂画圆,机械臂逆解+机器视觉+最小二乘定位_哔哩哔哩 (゜-゜)つロ 干杯~-bilibiliwww.bilibili.com但是如果使用YMKV优化以后库的话(这个暂时可能也不开源,因为里头有一些个人的算法,但是的话,会打包出来提供给大家使用),二值图膨胀腐蚀其实我已经优化的非常快了,我敢说肯定比openmv快N倍,在某些参数测试下甚至翻10倍我觉得都没啥问题(遗憾的是优化版并不打算开源。PS,网友:你就吹吧,要是能翻十倍,我直播剁diao~!)。
当然如果库提供大家使用的话,肯定得出教程,但是出教程也是个麻烦事,其实我不太想出视频教程(可能以后会出),但是我觉得你们可以拥有它(如果是要初级版的教程,看b站,有视频教程):
再配一些demo,我感觉就能使用无障碍了,毕竟这个库拥有国内的支持,让英文不好的同学也能无障碍修仙.......这个库的初级版开源的,在b站有地址,优化版什么时候会发布,暂时无解,算是挖个坑吧,以后再填。