OpenMV初体验
OpenMV项目创造一款低价,可扩展,支持Python的机器视觉模块,这个模块的目标是成为“机器视觉世界的Arduino “,
OpenMV搭载MicroPython解释器,这允许你在嵌入式上使用Python来编程 (Python 3 to be precise). Python使机器视觉算法的编程变得简单得多。比如,直接调用find_blobs()方法,就可以获得一个列表,包含所有色块的信息。 使用python遍历每一个色块,就可以获取他们所有信息。

OpenMV摄像头是一款小巧,低功耗,低成本的电路板,它帮助你很轻松的完成机器视觉(machine vision)应用。你可以通过高级语言Python脚本(准确的说是 MicroPython ),而不是C/C++。Python的高级数据结构使你很容易在机器视觉算法中处理复杂的输出。但是,你仍然可以完全控制OpenMV。你可以很容易的使用外部终端触发拍摄或者或者执行算法,也可以把算法的结果用来控制IO引脚。
STM32H743II ARM Cortex M7 处理器,480 MHz ,1MB RAM,2 MB flash. 所有的 I/O 引脚输出 3.3V 并且 5V 耐受。这个处理器有以下的IO接口。
全速 USB (12Mbs) 接口,连接到电脑。当插入OpenMV摄像头后,你的电脑会出现一个虚拟COM端口和一个“U盘”。
μSD卡槽拥有100Mbs读写,这允许你的OpenMV摄像头录制视频,和把机器视觉的素材从SD卡提取出来。
一个SPI总线高达100Mbs速度,允许你简单的把图像流数据传给LCD扩展板,WiFi扩展板,或者其他控制器。
一个 I2C总线,CAN总线, 和2两个异步串口总线 (TX/RX) ,用来链接其他控制器或者传感器。
一个12-bit ADC 和一个12-bit DAC。
2个 I/O 引脚用于舵机控制.
所有的IO口都可以用于,中断和PWM(板子上有10个I/O引脚)。
一个RGB LED(三色), 两个高亮的 850nm IR LED(红外)。
32 MB 外置的 32-bit SDRAM ,100 MHz的时钟,达到 400 MB/s 的带宽。
32 MB 外置的 quadspi flash, 100 MHz的时钟,4-bit DDR模式达到 100 MB/s 的带宽。
那么
OpenMV适合做什么?
DIY相关的项目制作,比如追踪小球的车,云台,或者解魔方的机器人。
对成本要求很高的嵌入式工业方案,比如流水线物品的分拣。
OpenMV不适合做什么?
复杂的算法:比如OCR识别,车牌识别,猫狗分类,深度学习之类的。
后期没有我的手把手教学去哪里找资料:
OpenMV美国官网:https://openmv.io
OpenMV中国官网:
http://openmv.ccwiki网站(已弃用):http://wiki.openmv.cc
论坛:https://forum.singtown.com/category/5/openmv-cam
OpenMV交流QQ群:324391148
图像处理的入门书,推荐冈哥的这本。
https://book.douban.com/subject/1106342/OpenMV各种库和使用,看官网文档:
http://docs.openmv.io/中文文档https://docs.singtown.com/micropython/zh/latest/openmvcam/index.html
如果之前有C/C++/Java(或任何其他语言)的编程经验,推荐
http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000如果之前没有任何编程经验,推荐
笨方法学Python,https://www.kancloud.cn/kancloud/learn-python-hard-way/49864MicroPython 文档,http://docs.micropython.org/en/latest/pyboard/
MicroPython 中文文档,,https://docs.singtown.com/micropython/zh/latest/pyboard/index.html
也得了解一些概念:
什么是帧率
帧率(FPS)就是每秒钟处理的图片数量,如果超过20帧,人眼就基本分辨不出卡顿。当然,如果用在机器上,帧率是越高越好的,OpenMV的最大帧率对比:
注:没有标注均为不传输图像给IDE,因为这个过程很耗费时间。
LAB亮度-对比度
Lab颜色空间中,L亮度;a的正数代表红色,负端代表绿色;b的正数代表黄色,负端代表兰色。不像RGB和CMYK色彩空间,Lab颜色被设计来接近人类视觉。
因此L分量可以调整亮度对,修改a和b分量的输出色阶来做精确的颜色平衡。
注意:在OpenMV的查找色块的算法中,运用的就是这个LAB模式!
镜头的焦距
因为图像是通过镜头的光学折射,照到感光元件上的。那么镜头就决定了,整个画面的大小和远近。一个最重要的参数就是焦距。
镜头焦距:是指镜头光学后主点到焦点的距离,是镜头的重要性能指标。镜头焦距的长短决定着拍摄的成像大小,视场角大小,景深大小和画面的透视强弱。当对同一距离远的同一个被摄目标拍摄时,镜头焦距长的所成的象大,镜头焦距短的所成的象小。注意焦距越长,视角越小。

还有一点是镜头的畸变,因为光学原理,在感光芯片上不同的位置,与镜头的距离不同的,简单说就是近大远小,所以在边缘会出现鱼眼效果(桶型畸变)。为了解决这个问题,可以在代码中使用算法来矫正畸变,注:OpenMV中使用image.lens_corr(1.8)来矫正2.8mm焦距的镜头。也可以直接使用无畸变镜头。无畸变镜头加入了额外的矫正透镜部分,价格自然会高不少。

我们打开设备管理器看见了这个串口COM8

打开文件管理器里面有这个3个文件

打开这个txt的文档看见了这个项目的地址
目前这个小模块可以干的事情有以下这些事情~~~
Frame Differencing帧差分算法
你可以使用OpenMV Cam上的帧差分算法来查看场景中的运动情况。帧差分算法可以将OpenMV用于安全应用。
Color Tracking颜色追踪
你可以使用OpenMV在图像中同时检测多达16种颜色(实际上永远不会想要找到超过4种颜色),并且每种颜色都可以有任意数量的不同的色块。OpenMV会告诉您每个色块的位置,大小,中心和方向。使用颜色跟踪,您的OpenMV Cam可以进行编程,以跟踪太阳,线跟踪,目标跟踪等等。视频演示:https://singtown.com/learn/49993/
Marker Tracking标记跟踪
您可以使用OpenMV Cam来检测颜色组的颜色,而不是单独的颜色。这允许你在对象上放置颜色标签(2种或多种颜色的标签),OpenMV会获取标签对象的内容。
Face Detection人脸检测
你可以使用OpenMV Cam(或任何通用对象)检测脸。你的OpenMV摄像头可以处理Haar模板进行通用对象检测,并配有内置的Frontal Face 模板和Eye Haar模板来检测人脸和眼睛。https://singtown.com/learn/50013/
Eye Tracking眼动跟踪
你可以使用眼动跟踪来检测某人的注视方向。你可以使用它来控制机器人。眼睛跟踪检测瞳孔的位置,同时检测图像中是否有眼睛。
Person Detection人检测
你可以使用内置的人检测器(TensorFlow Lite模型)检测视野中是否有人。
Optical Flow光流
你可以使用光流来检测您的OpenMV摄像机面前的画面。例如,您可以使用四旋翼上的光流来控制在空中的稳定性。
QR Code Detection/Decoding二维码检测/解码
您可以使用OpenMV Cam在其视野中读取QR码。通过QR码检测/解码,您可以使智能机器人能够读取环境中的标签。
Data Matrix Detection/Decoding矩阵码检测/解码
OpenMV Cam 也可以检测和解码矩阵码(2D条形码 Data Matrix)。您可以在此处查看我们的视频。
Linear Barcode Decoding条形码
OpenMV Cam 还可以处理1D条形码。它可以解码 EAN2, EAN5, EAN8, UPCE, ISBN10, UPCA, EAN13, ISBN13, I25, DATABAR, DARABAR_EXP, CODABAR, CODE39, CODE93, 和 CODE128。在此处查看我们的视频:https://singtown.com/learn/50017/
AprilTag Tracking标记跟踪
甚至比上面的QR码更好,OpenMV Cam 也可以追踪AprilTags。AprilTags是旋转不变,尺度不变,剪切不变和照明不变的最先进的基准标记。在此处查看我们的视频: https://singtown.com/learn/49590/
Line Detection直线检测
OpenMV Cam可以在几乎跑满帧率的情况下,快速完成无限长的直线检测。而且,也可以找到非无限长的线段。您可以在这里看到我们的视频:https://singtown.com/learn/50009/
Circle Detection圆形检测
你可以使用OpenMV很容易的检测图像中的圆形。
Rectangle Detection矩形检测
OpenMV也可以检测矩形,它使用了AprilTag库中的方形检测代码。
Template Matching模板匹配
您可以使用OpenMV模板匹配来检测视野中是否有模板相似的图片。例如,可以使用模板匹配来查找PCB上的标记,或读取显示器上的已知数字。
Image Capture图像捕捉
你可以使用OpenMV捕获RGB565/灰度的 BMP / JPG / PPM / PGM图像。可以直接在Python脚本中控制如何捕获图像。最重要的是,使用机器视觉的算法,进行绘制直线,绘制字符,然后保存。
Video Recording视频录制
你可以使用OpenMV摄像机记录RGB565/灰度的MJPEG视频或GIF图像(或者RAW视频)。你可以在Python脚本中直接控制如何将每个视频帧记录,并完全控制视频录制的开始和结束。而且,像拍摄图像一样,您可以使用机器视觉的算法,进行绘制直线,绘制字符,然后保存。
TensorFlow Lite for Microcontrollers
TensorFlow Lite支持使你可以在OpenMV Cam上运行自定义图像分类和分割模型。借助TensorFlow Lite,你可以轻松分类画面中复杂的区域,并根据所看到的内容控制I/O引脚。
最后,所有上述功能都可以混合IO引脚的控制,来配合你自己的自定义应用,以与现实世界交谈。

这个是引脚图

可以看到其实性能还是比较羸弱的

此时我看见有质量,我正好有秤

上去就是一顿量,单位g

这个是刚开机的提示页面

安装成功的页面

下载IDE先,

下载win版吧,之后再装别的版本
https://openmv.io/pages/download
下载中

next

next

下一步

安装驱动

第一次打开的样子

不慌,多摁几次ok就行,3次

点是

昂



ok啦

重新插拔

硬件的类型

点这个地方开始上传代码

这个地方有跳转行的功能

我的摄像头平放桌面




一些色彩空间,用到再讲

可以看文档,比较详细

file:///C:/Users/yunswj/AppData/Roaming/OpenMV/qtcreator/html/index.html
https://forums.openmv.io/
https://book.openmv.cc/
我们打开它的安装目录,试图找到demo再哪里


在这里

自带demo很是丰富,这个是我在vscode里面打开


点这里运行

这个地方和以前的编辑器不一样,一些功能我找不到了
import sensor#引入感光元件的模块
# 设置摄像头sensor.reset()#初始化感光元件sensor.set_pixformat(sensor.RGB565)#设置为彩色sensor.set_framesize(sensor.QVGA)#设置图像的大小sensor.skip_frames()#跳过n张照片,在更改设置后,跳过一些帧,等待感光元件变稳定。
# 一直拍照while(True): img = sensor.snapshot()#拍摄一张照片,img为一个image对象
这个是以前的一个代码
初始化,对硬件做配置
然后写了一个有趣的东西是跳过照片,就是其实是对性能的妥协
下面一个死循环,到死
初始化
sensor.reset() 初始化感光元件
设置彩色/黑白
sensor.set_pixformat() 设置像素模式。
sensor.GRAYSCALE: 灰度,每个像素8bit。
sensor.RGB565: 彩色,每个像素16bit。
设置图像大小
sensor.set_framesize() 设置图像的大小
sensor.QQCIF: 88x72
sensor.QCIF: 176x144
sensor.CIF: 352x288
sensor.QQSIF: 88x60
sensor.QSIF: 176x120
sensor.SIF: 352x240
sensor.QQQQVGA: 40x30
sensor.QQQVGA: 80x60
sensor.QQVGA: 160x120
sensor.QVGA: 320x240
sensor.VGA: 640x480
sensor.HQQQVGA: 80x40
sensor.HQQVGA: 160x80
sensor.HQVGA: 240x160
sensor.B64X32: 64x32 (用于帧差异 image.find_displacement())
sensor.B64X64: 64x64 用于帧差异 image.find_displacement())
sensor.B128X64: 128x64 (用于帧差异 image.find_displacement())
sensor.B128X128: 128x128 (用于帧差异 image.find_displacement())
sensor.LCD: 128x160 (用于LCD扩展板)
sensor.QQVGA2: 128x160 (用于LCD扩展板)
sensor.WVGA: 720x480 (用于 MT9V034)
sensor.WVGA2:752x480 (用于 MT9V034)
sensor.SVGA: 800x600 (仅用于 OV5640 感光元件)
sensor.XGA: 1024x768 (仅用于 OV5640 感光元件)
sensor.SXGA: 1280x1024 (仅用于 OV5640 感光元件)
sensor.UXGA: 1600x1200 (仅用于 OV5640 感光元件)
sensor.HD: 1280x720 (仅用于 OV5640 感光元件)
sensor.FHD: 1920x1080 (仅用于 OV5640 感光元件)
sensor.QHD: 2560x1440 (仅用于 OV5640 感光元件)
sensor.QXGA: 2048x1536 (仅用于 OV5640 感光元件)
sensor.WQXGA: 2560x1600 (仅用于 OV5640 感光元件)
sensor.WQXGA2: 2592x1944 (仅用于 OV5640 感光元件)
跳过一些帧
sensor.skip_frames(n=10) 跳过n张照片,在更改设置后,跳过一些帧,等待感光元件变稳定。
获取一张图像
sensor.snapshot() 拍摄一张照片,返回一个image对象。
自动增益/白平衡/曝光
sensor.set_auto_gain() 自动增益开启(True)或者关闭(False)。在使用颜色追踪时,需要关闭自动增益。
sensor.set_auto_whitebal() 自动白平衡开启(True)或者关闭(False)。在使用颜色追踪时,需要关闭自动白平衡。
sensor.set_auto_exposure(enable[\, exposure_us])
enable 打开(True)或关闭(False)自动曝光。默认打开。
如果 enable 为False, 则可以用 exposure_us 设置一个固定的曝光时间(以微秒为单位)。
设置窗口ROI
sensor.set_windowing(roi)
ROI:Region Of Interest,图像处理中的术语“感兴趣区”。就是在要处理的图像中提取出的要处理的区域。

sensor.set_framesize(sensor.VGA) # 高分辨率sensor.set_windowing((640, 80)) #取中间的640*80区域'''Author: your nameDate: 2020-11-23 19:44:28LastEditTime: 2020-11-23 19:48:58LastEditors: Please set LastEditorsDescription: In User Settings EditFilePath: \opwnmv\examples\01-Basics\helloworld.py'''# Hello World Example## Welcome to the OpenMV IDE! Click on the green run arrow button below to run the script!
import sensor, image, time
sensor.reset() # Reset and initialize the sensor.重启然后初始化传感器sensor.set_pixformat(sensor.RGB565) # Set pixel format to RGB565 (or GRAYSCALE)sensor.set_framesize(sensor.QVGA) # Set frame size to QVGA (320x240)sensor.skip_frames(time = 2000) # Wait for settings take effect.clock = time.clock() # Create a clock object to track the FPS.
while(True): clock.tick() # Update the FPS clock. img = sensor.snapshot() # Take a picture and return the image. print(clock.fps()) # Note: OpenMV Cam runs about half as fast when connected # to the IDE. The FPS should increase once disconnected.
这个是现代的代码,写的更加的巧妙

原来串口在这个地方

还可以搜索东西~
https://blog.csdn.net/zhuoqianxun/article/details/104016800