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.cc wiki网站(已弃用):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/49864 MicroPython 文档,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圆形检测 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 MicrocontrollersTensorFlow 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.htmlhttps://forums.openmv.io/我们打开它的安装目录,试图找到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.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 name
Date: 2020-11-23 19:44:28
LastEditTime: 2020-11-23 19:48:58
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \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