文章目录
- 1. 前言
- 2. 准备工作
- 2.1 硬件准备
- 2.1.1 OpenMV主控板
- 2.1.2 数据线或者(SD卡+读卡器)
- 2.1.3 根据实际需求可选扩展外设
- 2.2 软件准备
- 2.3 编程基础
- 3. OpenmV介绍
- 3.1 OpenMV 概述
- 3.2 本文OpenMV硬件参数介绍
- 4. OpenmVIDE软件操作
- 5. 其他知识补充
1. 前言
在之前做毕业设计时曾使用到了OpenMV,但找资料时发现很少有人可以把OpenMV讲的简单易懂。故而根据自己的学习心得书写此篇博客,希望可以帮助后续的学习者快速入门上手。
2. 准备工作
为了上手入门OpenMV我们需要准备一些硬件、软件以及语言基础。
2.1 硬件准备
2.1.1 OpenMV主控板
如下图所示XX科技出品的,但是价格偏贵500左右的板子。
- 入门学习建议作为可以自己在b站上找开源的PCB自己打板,价格估计在200左右;或者嫌麻烦可以在某鱼淘二手的或者在某宝买那种一两百的个体店家卖的比较实惠如下图所示。
- 此外,其实不需要买最新版本,一般涉及的功能都比较基础,除非是涉及到神经网络,但其实使用OpenmV跑神经网络相关算法效果并不好,不如直接上国产的K210更具性价比。
2.1.2 数据线或者(SD卡+读卡器)
用于将程序下载到OpenMV上,一般购买板子的时候会送,买之前最好问清楚,没送的话就要自己准备。
- SD可以用于扩展容量,用于后续缓存视频保存照片扩展。
- 注意是数据线,不是充电线!
2.1.3 根据实际需求可选扩展外设
购买扩展前一定注意所买的型号,OpenmV是否支持
- 摄像头,更高的变焦要求或者更高的像素要求。
- TFT-LCD屏幕,用于脱机运行显示摄像头图像。
- 舵机云台,用于控制摄像头的姿态。
- 蓝牙模块或者Wifi模块,扩展蓝牙遥控或者Wifi图传功能。
- 小车底盘,电机等其他传感器。
2.2 软件准备
OpenMV IDE
2.3 编程基础
具有Python的入门水平即可。如果没有学过Python可以到B站随便找个一两个小时的入门视频看一下就可以,不要浪费过多时间。
3. OpenmV介绍
准备好上述的软硬件以及编程基础后,我们来对OpenMV进行一个简单的介绍。
3.1 OpenMV 概述
接触过嵌入式的道友应该清楚,主流的51系列单片机和32系列单片机都是通过C语言来编写实际程序的。有过编程基础的道友也应该清楚Python语言的优越性,如果将Python和嵌入式编程结合起来,我们就得到了MicoPython语言,即使用Python来完成嵌入式编程。OpenmV的编程即是使用这一语言,使用OpenMV这一开源项目可以让我们不再专注于如何对摄像头等各个外设的寄存器操作而是直接从MicoPython库中封装的函数进行调用从而实现相关功能,通常使用C语言要几百行代码才能实现的功能,MicoPython往往几十行就能搞定。
OpenMV其本质就是一块高性能的STM32单片机开发板,与普通的STM32单片机开发板不同的是:OpenMV将MicoPython作为了其编程语言,更容易上手,同时可以扩展各种外设,可玩性更高。
3.2 本文OpenMV硬件参数介绍
- 主控板stm32f407vet6
- 支持最大图像buffer 75KB,HQVGA分辨率RGB565或者QVGA分辨率灰度图像
- 512KB FLASH
- 摄像头支持OV7670,OV7725,OV2640
4. OpenmVIDE软件操作
启动软件,可以发现软件的布局大致可以分为4个板块:代码编译(书写代码出)、终端调试(调试程序)、图像缓冲(显示摄像头图像)以及色彩空间(显示分辨率的各种参数)
1.在没有连接OpenMV时,左下角的三角是灰色,使用数据线连接好后,三角会变成绿色,点击即可在线调试程序。
2.点击上端选项框中的“文件“,这里面最常用的示例。
这里面会有各种各样的示例文档可供参考阅读
import sensor, image, time#导入相关库文件
sensor.reset() #初始化相机传感器
sensor.set_pixformat(sensor.RGB565)#设置相机模块的像素模式 16 bits/像素 GRAY为8
sensor.set_framesize(sensor.QQVGA) #设置相机模块的帧大小 160x120
sensor.skip_frames(30) #跳过30帧 让相机图像在改变相机设置后稳定下来
sensor.set_auto_gain(False) #关闭自动增益
sensor.set_auto_whitebal(False) #关闭默认的白平衡
clock = time.clock() # 跟踪FPS帧率
while(True):
clock.tick() # 更新FPS帧率
img = sensor.snapshot() # 获取一帧图像
print(clock.fps()) # 终端打印FPS
2.第二个比较常用的阈值编辑器
帧缓冲区即是当前摄像头图像缓冲区的图像,图像文件则是在磁盘中选择图像进行标定。
随便打开一个图像:
通过拖动下方控件可以使得图像的灰度图发生变换,一般摄像头追踪的是白色区域图像:
点击翻转:
除了灰度图还有LAB格式图像:
同灰度图一样,只是参数变成了6个。
颜色阈值是后续功能中标定物体的基础,灰度阈值用于色彩像素格式设置为GRAY时,RGB565则适用于LAB格式的颜色阈值。
// sensor.set_pixformat(sensor.RGB565)#设置相机模块的像素模式 16 bits/像素 GRAY为8
5. 其他知识补充
- 灰度图即黑白图只有两个参数,两个极端状态即为全黑和全白。
- LAB色彩空间:L代表亮度,取值0-100 ,A代表从绿色到红色的分量取值-128-127 ,B代表 从蓝色到黄色的分量,取值-128~127。
- sensor.set_pixformat(sensor.RGB565)#设置相机模块的像素模式 16 bits/像素 GRAY为8
sensor.set_framesize(sensor.QQVGA) #设置相机模块的帧大小 160x120
这两行语句的设置会明显影响到程序运行的效率,第一行语句为色彩空间设置,一般GRAY格式时运行更快;第二行语句为分辨率设置,分辨率越低运行速度越快。 - 注意书写代码时的所见,有时少打一个空格可能程序就会报错。
以上就是本次的全部分享,后续考虑更新OpenMV典型功能实现的代码注解,希望各位道友留言建议,多提意见。