多面手OpenMV——一款基於OMV3的圖像識別輔助計算機視覺編程神器

一、什麼是OpenMV

OpenMV 是一款非常小巧、功能豐富的計算機視覺平台。支持圖像識別、顏色跟蹤、線性檢測等功能,且使用簡單、學習容易。通過硬件加速圖像處理和機器學習操作,OpenMV 可以在編寫控制器等較為負責的嵌入式系統時大大提高開發效率,降低開發成本,是一款性價比非常高的計算機視覺編程工具。

二、OpenMV的硬件和軟件配置

OpenMV最新的版本是OMV3,使用STM32H743VIT6處理器,擁有1MB SRAM,2MB flash,支持2560×1440高清輸出,以及22個通用輸入輸出(GPIO)。OpenMV 還搭載了外部SD卡槽和藍牙、WiFi等外圍設備接口,可以便捷地集成其它設備。OpenMV IDE是OpenMV官方的編程軟件,使用起來非常方便,主要功能有代碼編輯、圖像採集、顯示和調試。

三、OpenMV的集成應用

1.物聯網應用:OpenMV具有各種控制低功耗無線網絡通信,通過TCP / IP,LoRa,SIGFOX和Iridium進行通信,可實現基於物聯網的監控任務和人工智能解決方案等。

2.機器人控制:OpenMV可以通過Uart,SPI或IIC接口與機器人微控制器,如Arduino,Raspberry Pi進行通信,實現機器人的自動導航、行為分析。

3.智能安防:OpenMV可以實現智能門禁、人臉識別、目標跟蹤等功能,並能夠自動抓拍破壞者信息,可應用於實驗室門禁、家庭安防等場景中。

4.自動駕駛:OpenMV可以通過編寫相關程序,實現車輛的自主導航、環境感知等功能。

四、OpenMV硬件功能的使用示例

下面介紹一些OpenMV硬件功能的使用示例。

1.圖像採集

# Example for acquiring images only on movement.
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.QQVGA)  # Set frame size to QQVGA (80x60)
sensor.skip_frames(time = 2000)     # Wait for settings take effect.

# Reset the clock.
clock = time.clock()

# Save the previous frame.
previous = None

while(True):
    # Update clock.
    clock.tick()

    # Capture new image.
    image = sensor.snapshot()

    # Check if motion has occurred.
    if previous is not None and image.difference(previous).count() > 10:
        # Save image.
        image.save("/detect.bmp")

    # Store the previous image.
    previous = image.copy()

    # Print the elapsed time.
    print(clock.fps())

2.圖像處理

# 在圖像上查找一個由二進制形式的顏色掩碼錶示的顏色,返回矩形和兩個掉幀信息(x和y方向上)
import sensor, image, time

# 配合 OpenMV 學習手冊使用
# 有關顏色跟蹤,請參閱以下文檔:
# http://docs.openmv.io/library/omv.image.html#image.image_binary
# http: // docs.openmv.io/library/omv.image.html#image.image_mono_search

# 顏色跟蹤顏色的二進制值。在此示例中,它是從色輪工具中獲得的,某些部分的值略有不同。
MIN_DELTA = 1
MAX_DELTA = 10

bar_threshold_deltas = (MAX_DELTA - MIN_DELTA + 1)
bar_thresholds = [(MIN_DELTA + (i * bar_threshold_deltas // 8)) for i in range(bar_threshold_deltas)]

print("bar thresholds: %s" % (bar_thresholds))

threshold_index = 0

sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_auto_gain(False, value=100)
sensor.set_auto_exposure(False, exposure_us=5000)
sensor.set_brightness(1)

clock = time.clock()
search_rect = [150, 80, 100, 100]  # [x, y, w, h]

while(True):
    clock.tick()

    img = sensor.snapshot()
    img.draw_rectangle(search_rect)
    img = img.crop(150, 80, 100, 100)
    img = img.mean_pooled(2, 2)

    # 方法 1: 使用二進制圖像查找單通道顏色跟蹤
    for threshold in bar_thresholds:
        result = img.binary([threshold]*3)
        # 用於只檢測水平條的中點。
        r = result.find_blobs([1, 11, 100, 40]) #尋找二進制中的連通域,返回一個Blob對象列表
        if r:
            # 對於blob對象列表,x()、y()是blob中心,cx()、cy()是blob重心,w()、h()是blob的寬和高
            img.draw_rectangle(search_rect)
            img.draw_rectangle(r[0].rect(),color=127)
            # Coords can be accessed through virtually any blob object attribute such as
            # rect(), cx(), cy(), x(), y(), etc.
            print(threshold, r[0].cx())
            break

    # 方法 2: 使用二進制圖像查找單通道顏色跟蹤(一行代碼)
    # 注意:如果使用這個,您必須根據情況調整一些參數,例如第8和第10行的參數。
    #
    # img.binary([(45, 75, -10, 14, -25, 27)], invert=False)
    #
    # 二進制函數可以同時採用 1 個、3 個或 6 個閾值元組(並帶有相應的通道計數)。
    # GT的閾值將部分圖像視為顏色,以後者為基礎繪製一個二進制圖像(一種選擇),然後查找連續的球體。
    # 連續的球體被稱為“大洞(大塊)”,並將通過“find_blobs()”來查找,作為一組Blob對象返回。
    #“大洞”的一些閾值調整可能需要進行匹配,以便將大洞與軌跡完全重疊。
    # 有關閾值方法,請查看顏色跟蹤和二進制函數的文檔,並在IDE中搜索有關此方面的文檔。
    #
    # 但是,在這個例子中,我們將使用普通色輪閾值(通過下面的“bar_thresholds”數組)來檢測條形碼上的藍條,例如:“[(0, 50, -30, -15, 0, 20)]”。

    print(clock.fps())

3.機器學習

# 該文件的目的是演示如何使用神經網絡在 OpenMV Cam 上進行識別。
#
# 您應該下​​載圖像以進行訓練。此示例使用一個圖像集,其中包含洛杉磯的Keras代碼中提供的250張圖像,
# 位於“下載”文件夾中。每個文件名都是“數字_編號.jpg”,例如“3_23.jpg”對於數字“3”,它是第23個圖像。
#
# 當然,您必須首先運行“mnist_cnn.py”來訓練模型。在訓練之後,請將生成的“權重.m5”文件複製到OpenMV的存儲設備上並重新啟動OpenMV Cam。

import sensor, image, time, os, nn

sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time=1000)
clock = time.clock()
labels = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

# Load the built-in "digits" classifier
net = nn.load('/digits.network')

while(True):
    clock.tick()
    img = sensor.snapshot().lens_corr(1.8)
    #img.draw_rectangle(80, 0, 80, 80)
    out = net.forward(img.binary([((200, 255), )])).index(max(net.out()))
    out = labels[out]
    print(clock.fps(), out)

五、總結

在本文中我們詳細地闡述了OpenMV這一款基於OMV3的圖像識別輔助計算機視覺編程神器。我們解釋了其硬件和軟件配置,介紹了其集成應用,最後展示了一些硬件功能的代碼示例。這款神器是學習和使用計算機視覺編程的良好選擇,同時還可以應用於生產實踐中,如物聯網、機器人控制、智能安防和自動駕駛等領域。OpenMV 的出現將進一步推進計算機視覺編程的普及和發展。

原創文章,作者:IGTSX,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/313648.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
IGTSX的頭像IGTSX
上一篇 2025-01-07 09:44
下一篇 2025-01-07 09:44

相關推薦

  • 如何在Java中拼接OBJ格式的文件並生成完整的圖像

    OBJ格式是一種用於表示3D對象的標準格式,通常由一組頂點、面和紋理映射坐標組成。在本文中,我們將討論如何將多個OBJ文件拼接在一起,生成一個完整的3D模型。 一、讀取OBJ文件 …

    編程 2025-04-29
  • 如何實現圖像粘貼到蒙版

    本文將從多個方面介紹圖像粘貼到蒙版的實現方法。 一、創建蒙版 首先,在HTML中創建一個蒙版元素,用於接收要粘貼的圖片。 <div id=”mask” style=”widt…

    編程 2025-04-29
  • Python圖像黑白反轉用法介紹

    本文將從多個方面詳細闡述Python圖像黑白反轉的方法和技巧。 一、Pillow模塊介紹 Pillow是Python的一個圖像處理模塊,可以進行圖片的裁剪、旋轉、縮放等操作。使用P…

    編程 2025-04-28
  • 使用boofcv進行圖像處理和機器視覺

    本文將詳細介紹使用boofcv進行圖像處理和機器視覺的方法和實踐。首先,我們將介紹boofcv的概述和安裝方法,然後分別介紹它的圖像處理、相機校準和機器學習功能。 一、概述和安裝 …

    編程 2025-04-28
  • Matlab二值圖像全面解析

    本文將全面介紹Matlab二值圖像的相關知識,包括二值圖像的基本原理、如何對二值圖像進行處理、如何從二值圖像中提取信息等等。通過本文的學習,你將能夠掌握Matlab二值圖像的基本操…

    編程 2025-04-28
  • Python實現圖像轉化為灰度圖像

    本文將從多個方面詳細闡述如何使用Python將圖像轉化為灰度圖像,包括圖像的概念、灰度圖像的概念、Python庫的使用以及完整的Python代碼實現。 一、圖像與灰度圖像 圖像是指…

    編程 2025-04-28
  • 圖像與信號處理期刊級別

    本文將從多個方面介紹圖像與信號處理期刊級別的相關知識,包括圖像壓縮、人臉識別、關鍵點匹配等等。 一、圖像壓縮 圖像在傳輸和存儲中佔據了大量的空間,因此圖像壓縮成為了很重要的技術。常…

    編程 2025-04-28
  • JFXtras樣式——美化JavaFX應用的必備神器

    本文將從多個方面對JFXtras樣式進行詳細的闡述,教你如何使用JFXtras樣式來美化你的JavaFX應用。無需任何前置知識,讓我們一步步來了解。 一、簡介 JFXtras是一個…

    編程 2025-04-27
  • Anaconda Python – 多面手的全能編程開發工具

    Anaconda Python是一個全能的編程開發工具,它集成了多種Python數據科學和機器學習庫以及其他工具。在這篇文章中,我們將從多個方面對Anaconda Python進行…

    編程 2025-04-27
  • Python 文件內圖像重命名

    Python作為一門功能強大的編程語言,可以實現很多實用的操作。在基本編程操作中,經常會遇到需要對文件進行操作,而文件中的圖像也需要進行重命名。本文將從多個方面詳細介紹如何使用Py…

    編程 2025-04-27

發表回復

登錄後才能評論