首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >OpenMV初体验

OpenMV初体验

作者头像
云深无际
发布2020-12-03 14:51:48
发布2020-12-03 14:51:48
2.3K0
举报
文章被收录于专栏:云深之无迹云深之无迹

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圆形检测
    • 你可以使用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版吧,之后再装别的版本

代码语言:javascript
复制
https://openmv.io/pages/download

下载中

next

next

下一步

安装驱动

第一次打开的样子

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

点是

ok啦

重新插拔

硬件的类型

点这个地方开始上传代码

这个地方有跳转行的功能

我的摄像头平放桌面

一些色彩空间,用到再讲

可以看文档,比较详细

代码语言:javascript
复制
file:///C:/Users/yunswj/AppData/Roaming/OpenMV/qtcreator/html/index.html
代码语言:javascript
复制
https://forums.openmv.io/
代码语言:javascript
复制
https://book.openmv.cc/

我们打开它的安装目录,试图找到demo再哪里

在这里

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

点这里运行

这个地方和以前的编辑器不一样,一些功能我找不到了

代码语言:javascript
复制
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,图像处理中的术语“感兴趣区”。就是在要处理的图像中提取出的要处理的区域。

代码语言:javascript
复制
sensor.set_framesize(sensor.VGA) # 高分辨率
sensor.set_windowing((640, 80)) #取中间的640*80区域
代码语言:javascript
复制
'''
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.

这个是现代的代码,写的更加的巧妙

原来串口在这个地方

还可以搜索东西~

代码语言:javascript
复制
https://blog.csdn.net/zhuoqianxun/article/details/104016800
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • OpenMV适合做什么?
  • OpenMV不适合做什么?
  • 什么是帧率
    • LAB亮度-对比度
  • 镜头的焦距
  • 初始化
  • 设置彩色/黑白
  • 设置图像大小
  • 跳过一些帧
  • 获取一张图像
  • 自动增益/白平衡/曝光
  • 设置窗口ROI
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档