OpenMV 是一款基于 MicroPython 的开源机器视觉模块,专为嵌入式设备设计。它集成了摄像头和处理器,支持实时图像处理、物体检测、颜色识别等功能。以下是 OpenMV 的一个简单示例(Demo),展示如何使用 OpenMV 进行颜色识别和物体跟踪。


一、硬件准备

  1. OpenMV 模块:如 OpenMV Cam H7。
  2. 摄像头:OpenMV 模块自带摄像头。
  3. 连接线:USB 线用于连接 OpenMV 和电脑。
  4. 电源:通过 USB 供电。

二、软件准备

  1. OpenMV IDE:从 OpenMV 官网下载并安装 IDE。
  2. MicroPython 固件:确保 OpenMV 模块的固件是最新版本。

三、示例:颜色识别与物体跟踪

步骤1:连接 OpenMV

  1. 使用 USB 线将 OpenMV 模块连接到电脑。
  2. 打开 OpenMV IDE,确保设备被正确识别。

步骤2:编写代码

以下是一个简单的颜色识别与物体跟踪的代码示例:

import sensor, image, time

# 初始化摄像头
sensor.reset()                      # 重置摄像头
sensor.set_pixformat(sensor.RGB565) # 设置图像格式为RGB565
sensor.set_framesize(sensor.QVGA)   # 设置图像分辨率为QVGA (320x240)
sensor.skip_frames(time = 2000)     # 等待摄像头稳定

# 定义颜色阈值 (LAB格式)
red_threshold = (30, 100, 15, 127, 15, 127)  # 红色阈值
green_threshold = (30, 100, -128, -20, -128, -20)  # 绿色阈值

# 主循环
while(True):
    img = sensor.snapshot()  # 捕获一帧图像

    # 查找红色物体
    red_blobs = img.find_blobs([red_threshold], pixels_threshold=100, area_threshold=100)
    for blob in red_blobs:
        img.draw_rectangle(blob.rect())  # 绘制矩形框
        img.draw_cross(blob.cx(), blob.cy())  # 绘制中心点
        print("Red Object: ", blob.cx(), blob.cy())

    # 查找绿色物体
    green_blobs = img.find_blobs([green_threshold], pixels_threshold=100, area_threshold=100)
    for blob in green_blobs:
        img.draw_rectangle(blob.rect())  # 绘制矩形框
        img.draw_cross(blob.cx(), blob.cy())  # 绘制中心点
        print("Green Object: ", blob.cx(), blob.cy())

    time.sleep(100)  # 延时100ms

步骤3:运行代码

  1. 将代码复制到 OpenMV IDE 中。
  2. 点击 “运行” 按钮(绿色三角形图标)。
  3. OpenMV 模块会实时捕捉图像,并识别红色和绿色的物体。

四、代码解析

  1. 摄像头初始化

    • sensor.reset():重置摄像头。
    • sensor.set_pixformat(sensor.RGB565):设置图像格式为 RGB565。
    • sensor.set_framesize(sensor.QVGA):设置图像分辨率为 QVGA(320x240)。
  2. 颜色阈值

    • 使用 LAB 颜色空间定义颜色阈值。
    • red_thresholdgreen_threshold 分别定义了红色和绿色的阈值范围。
  3. 物体检测

    • img.find_blobs():查找符合颜色阈值的物体。
    • blob.rect():获取物体的矩形框。
    • blob.cx()blob.cy():获取物体的中心点坐标。
  4. 图像绘制

    • img.draw_rectangle():在图像上绘制矩形框。
    • img.draw_cross():在图像上绘制十字标记。

五、扩展功能

  1. 人脸检测

    • 使用 OpenMV 内置的人脸检测功能。
    • 示例代码:
      import sensor, image, time
      
      sensor.reset()
      sensor.set_pixformat(sensor.GRAYSCALE)
      sensor.set_framesize(sensor.QVGA)
      sensor.skip_frames(time = 2000)
      
      while(True):
          img = sensor.snapshot()
          faces = img.find_features(image.HaarCascade("frontalface"))
          for face in faces:
              img.draw_rectangle(face)
          time.sleep(100)
      
  2. 二维码识别

    • 使用 OpenMV 的二维码识别功能。
    • 示例代码:
      import sensor, image, time
      
      sensor.reset()
      sensor.set_pixformat(sensor.RGB565)
      sensor.set_framesize(sensor.QVGA)
      sensor.skip_frames(time = 2000)
      
      while(True):
          img = sensor.snapshot()
          codes = img.find_qrcodes()
          for code in codes:
              img.draw_rectangle(code.rect())
              print("QR Code: ", code.payload())
          time.sleep(100)
      
  3. 物体跟踪

    • 使用 OpenMV 的模板匹配功能进行物体跟踪。
    • 示例代码:
      import sensor, image, time
      
      sensor.reset()
      sensor.set_pixformat(sensor.RGB565)
      sensor.set_framesize(sensor.QVGA)
      sensor.skip_frames(time = 2000)
      
      template = image.Image("/template.pgm")  # 加载模板图像
      while(True):
          img = sensor.snapshot()
          match = img.find_template(template, 0.7)
          if match:
              img.draw_rectangle(match)
          time.sleep(100)
      

六、OpenMV 资源

  1. OpenMV 官网: https://openmv.io/
  2. OpenMV IDE 下载: https://openmv.io/pages/download
  3. OpenMV 文档: https://docs.openmv.io/

通过以上示例,你可以快速上手 OpenMV 并进行简单的机器视觉开发。

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐