OpenMV初识

描述

来源:ku77

openMV简介

OpenMV是由美国克里斯团队基于MicroPython发起的开源机器视觉项目,目的是创建低成本,可扩展,使用python驱动的机器视觉模块。OpenMV搭载了MicroPython解释器,使其可以在嵌入式端进行python开发。OpenMV基于32位,ARM Cortex-M7内核的OpenMV-H7, 并结合各种摄像头,可以进行多种机器视觉应用的实现,比如人脸检测,物体分类等。

对于省钱党来说这是一个开源的项目,所以有兴趣的可以自己上网找相关资料自制一个,可以省个一两百块大洋。安利一篇文章

一、硬件准备

1. OpenMV

2. 一根micro usb的数据线(一定要有数据传输功能的)

3. 电脑、网络

二、软件准备

1. 在openMV官网下载openmv IDE https://book.openmv.cc/

Micropython

IDE是由Qt Creator编写,可以跨平台使用,官网提供了windows、mac os、Linux ubuntu 32位和64位,以及树莓派的版本,满足各个平台的开发,使得其应用更加广泛。Windows系统就选第一个啦。

下载得到安装包:

Micropython

安装过程一路Next,值得一提的是默认安装C盘,可以手动修改安装路径为其它盘,不影响使用。

Micropython

下一步可以连接上硬件:

Micropython

电脑将自动识别出一个U盘:

Micropython

这是由于单片机烧入了固件程序将内部的Flash虚拟成了一个U盘可以看到这个U盘容量特别小,因此在后期的使用过程中建议插SD卡。

用SD卡的好处多多:

1.SD卡也是一个文件系统,当上电的时候,如果插入SD卡,那么SD卡的文件系统就会自动取代内置的Flash文件系统,每次上电,就会运行SD卡中的main.py啦,还可以减少对stm32flash擦除次数,延长寿命。

2.SD卡最大支持2TB的容量。因此可以保存些大的程序,还可以放置训练好的神经网络模型,也可以放置需要对比的图片等进行调用。

Micropython

内部放置了三个文件,其中main.py文件就是要运行的程序文件。

注:有时会出现驱动安装不完整的情况,打开设备管理器可以看到有个感叹号,我们可以更新驱动程序

Micropython

官网上有非常详细的解决步骤: 在这

三、软件的功能与使用

OpenMV提供了两者阈值设置方案。分别是阈值编译器和直方图的方式选择阈值。

阈值编译器:优点,所寻找到的目标颜色更加合理,其他相似颜色区域的干扰比较小。缺点,调节LAB的最大最小值比较花费时间。

直立方图恰好相反,他很容易找到LAB的最大最小值的大体区间,但是容易受到相似颜色区域的干扰。所以,建议两者配合使用

先用直立方图找到LAB的最大最小值的大体区间,再利用阈值编译器对LAB的最大最小值进行微调

软件安装完成后在主菜单可以找到这个图标:

Micropython

打开这个软件会跳出一个默认的helloworld.py的例程(其它示例在文件选项可以看到),软件页面如下:

Micropython

页面左边是代码区域,右上角是帧缓冲区(可以显示摄像头拍到的),我们要选择红色盒子作为目标对象,只需要在帧缓冲区,拖动鼠标左键即可。右下角直方图可以选择四种色彩空间:

·RBG色彩空间:R代表红色,B代表蓝色,G代表绿色。它是一种线性色彩空间,其中颜色是通过红色,绿色和蓝色值的线性组合获得的。(做颜色识别的功能时比较方便)

·灰度(GRAY)色彩空间:单通道格式,值为0~255,颜色值为黑白之间,0是黑色,255是白色。(处理识别数字或轮廓等二值计算时速度比较快)

·LAB色彩空间:Lab颜色空间中,L亮度;a的正数代表红色,负端代表绿色;b的正数代表黄色,负端代表蓝色。不像RGB和CMYK色彩空间,Lab颜色被设计来接近人类视觉。()

·YUV色彩空间:“Y”表示明亮度,也就是灰阶值,“U”和“V”表示的则是色度,作用是描述影像色彩及饱和度,用于指定像素的颜色。

参考:常用色彩空间概念   

Micropython

Micropython

Micropython

Micropython

根据直方图(LAB色彩空间)可知,我们的L最大值选择80,最小值为60。A最大值为40,最小值为-20。B的最大值为20,最小值为-10。(注:这个只需要包含绝大部分就行)

阈值编译器只有LAB阈值和灰度阈值设置,由上述四图可得,LAB分布值比较集中,所以选用LAB阈值。

之后进行阈值编译器设置:

左上方工具——>机器视觉——>阈值编译器——>帧缓冲区。

Micropython

可对要判断图像的LAB值进行调整。注意:这个时候OpenMV会截取帧缓冲区内照片(当前的图片)作为LAB值调整。所以我们采用阈值编译器的时候,需要提前将目标识别单位(红色盒子)放在OpenMV摄像头之前。再进行操作。

Micropython

根据直立方图的值,我们调整LAB最大和最小值,尽可能地让要目标识别对象变成全白色。(注:即使没有全部变成白色也不影响,反正最后会把所有没有被滤除的白色区域变成一个大框)然后复制下方的LAB阈值。

(58, 80, 19, 51, -10, 21)和直方图读取的数做一个对比(60,80,-20,40,-10,20)。

在这里只是举个例子,其它识别中,也可用其它的色彩空间进行识别。

审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
评论(0)
发评论
jf_49545803 2023-08-04
0 回复 举报
请问,openmv配合舵32控制舵机运动时,抖动非常严重,需要添加滤波手法嘛?但我不会,谁能给个指点。谢谢 收起回复

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分