基於OpenMV的圖像識別之數字識別功能

基於OpenMV的圖像識別

OpenMV簡介

什麼是OpenMV

OpenMV是由美國克裡斯團隊基於MicroPython發起的開源機器視覺項目,目的是創建低成本,可擴展,使用python驅動的機器視覺模塊。OpenMV搭載瞭MicroPython解釋器,使其可以在嵌入式端進行python開發,關於MicroPython可以參照我之前的博客專欄:MicroPython. OpenMV基於32位,ARM Cortex-M7內核的OpenMV-H7, 並結合各種攝像頭,可以進行多種機器視覺應用的實現,比如人臉檢測,物體分類等。

OpenMV是一個開源,低成本,功能強大的機器視覺模塊,以STM32F427CPU為核心,集成瞭OV7725攝像頭芯片,在小巧的硬件模塊上,用C語言高效地實現瞭核心機器視覺算法,提供Python編程接口 。同時 OpenMV也是一個可編程的攝像頭,通過Python語言可實現你想要的邏輯。而且攝像頭本身也內置瞭一些圖像處理的算法,使用起來也更加的方便,僅需要寫一些簡單的Python代碼,即可輕松的完成各種機器視覺相關的任務。在此,我們通過OpenMV實現瞭數字識別。

在打開OpenMV攝像頭鏈接電腦時,會彈出讓你升級的窗口

這時切忌一定要選擇Cancel鍵,

不能選擇升級!!!

不能選擇升級!!!

不能選擇升級!!!

在這裡插入圖片描述

然後在進行下一步的操作

OpenMV中文入門視頻教程

一、數字識別

數字識別的基礎是需要配置使用NCC模板匹配。通過NCC模板的匹配可把

需要識別的數字模板圖片保存到SD卡中,然後可進行下一步的識別。

1、可以通過打開模板匹配的歷程來直接打開代碼進行使用

在這裡插入圖片描述

在這裡插入圖片描述

2、如果運行出現這個窗口就說明沒有保存模板圖片

所以這時就需要創建一個模板圖片:創建模板圖片的詳細視頻教程

創建一個模板圖片首先要打開一個helloworld歷程文件

在這裡插入圖片描述

在這裡插入圖片描述

然後在helloworld歷程文件中進行匹配0~9這樣的基本數字,對這些數字進

行一一截取,用它們來作為我們的模板圖片。

在右邊的Frame Buffer框中進行截取,註意:不要點Zoom,因為Zoom展示

的是放大後的效果,在識別時可能會導致失幀。

然後點擊左鍵選出一個框(如圖所示)

在這裡插入圖片描述

選完框後點擊右鍵選擇Save Image selection to PC

在這裡插入圖片描述

最後把截取的數字圖片進行保存,一定要保存到OpenMV的SD卡中,保存的文件名可自己

定義

在這裡插入圖片描述

3、把template.pgm改為你創建的模板圖片的名稱

在這裡插入圖片描述

(註意:模板圖片的格式一定要是pgm的格式,轉換格式可以在

https://convertio.co/zh/bmp-pgm/網站直接進行轉換)

4、改完之後就可以運行

下面展示一些 有關數字識別的代碼。

此代碼為源代碼,可根據自己的需求在上面進行改動。

代碼來源:數字識別代碼,可直接引用並修改

# Template Matching Example - Normalized Cross Correlation (NCC)
#
# This example shows off how to use the NCC feature of your OpenMV Cam to match
# image patches to parts of an image... expect for extremely controlled enviorments
# NCC is not all to useful.
#
# WARNING: NCC supports needs to be reworked! As of right now this feature needs
# a lot of work to be made into somethin useful. This script will reamin to show
# that the functionality exists, but, in its current state is inadequate.

import time, sensor, image
from image import SEARCH_EX, SEARCH_DS

# Reset sensor
sensor.reset()

# Set sensor settings
sensor.set_contrast(1)
sensor.set_gainceiling(16)
# Max resolution for template matching with SEARCH_EX is QQVGA
sensor.set_framesize(sensor.QQVGA)
# You can set windowing to reduce the search image.
#sensor.set_windowing(((640-80)//2, (480-60)//2, 80, 60))
sensor.set_pixformat(sensor.GRAYSCALE)

# Load template.
# Template should be a small (eg. 32x32 pixels) grayscale image.
template8 = image.Image("/8.pgm")
template9 = image.Image("/9.pgm")
clock = time.clock()

# Run template matching
while (True):
    clock.tick()
    img = sensor.snapshot()

    # find_template(template, threshold, [roi, step, search])
    # ROI: The region of interest tuple (x, y, w, h).
    # Step: The loop step used (y+=step, x+=step) use a bigger step to make it faster.
    # Search is either image.SEARCH_EX for exhaustive search or image.SEARCH_DS for diamond search
    #
    # Note1: ROI has to be smaller than the image and bigger than the template.
    # Note2: In diamond search, step and ROI are both ignored.
    r 8= img.find_template(template8, 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
    if r8:
        img.draw_rectangle(r8)
   r 9= img.find_template(template9, 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
    if r9:
        img.draw_rectangle(r9)

    print(clock.fps())

運行的結果如圖所示

在這裡插入圖片描述

到此這篇關於基於OpenMV的圖像識別之數字識別的文章就介紹到這瞭,更多相關OpenMV圖像識別內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: