溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

基于OpenMV如何實(shí)現(xiàn)數(shù)字識(shí)別功能

發(fā)布時(shí)間:2022-03-04 14:07:51 來源:億速云 閱讀:570 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要介紹基于OpenMV如何實(shí)現(xiàn)數(shù)字識(shí)別功能,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

    基于OpenMV的圖像識(shí)別

    OpenMV簡介

    什么是OpenMV

    OpenMV是由美國克里斯團(tuán)隊(duì)基于MicroPython發(fā)起的開源機(jī)器視覺項(xiàng)目,目的是創(chuàng)建低成本,可擴(kuò)展,使用python驅(qū)動(dòng)的機(jī)器視覺模塊。OpenMV搭載了MicroPython解釋器,使其可以在嵌入式端進(jìn)行python開發(fā),關(guān)于MicroPython可以參照我之前的博客專欄:MicroPython. OpenMV基于32位,ARM Cortex-M7內(nèi)核的OpenMV-H7, 并結(jié)合各種攝像頭,可以進(jìn)行多種機(jī)器視覺應(yīng)用的實(shí)現(xiàn),比如人臉檢測,物體分類等。

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

    在打開OpenMV攝像頭鏈接電腦時(shí),會(huì)彈出讓你升級的窗口

    這時(shí)切忌一定要選擇Cancel鍵,

    不能選擇升級?。?!

    不能選擇升級!?。?/strong>

    不能選擇升級?。?!

    基于OpenMV如何實(shí)現(xiàn)數(shù)字識(shí)別功能

    然后在進(jìn)行下一步的操作

    OpenMV中文入門視頻教程

    一、數(shù)字識(shí)別

    數(shù)字識(shí)別的基礎(chǔ)是需要配置使用NCC模板匹配。通過NCC模板的匹配可把

    需要識(shí)別的數(shù)字模板圖片保存到SD卡中,然后可進(jìn)行下一步的識(shí)別。

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

    基于OpenMV如何實(shí)現(xiàn)數(shù)字識(shí)別功能

    基于OpenMV如何實(shí)現(xiàn)數(shù)字識(shí)別功能

    2、如果運(yùn)行出現(xiàn)這個(gè)窗口就說明沒有保存模板圖片

    基于OpenMV如何實(shí)現(xiàn)數(shù)字識(shí)別功能

    所以這時(shí)就需要?jiǎng)?chuàng)建一個(gè)模板圖片:創(chuàng)建模板圖片的詳細(xì)視頻教程

    創(chuàng)建一個(gè)模板圖片首先要打開一個(gè)helloworld歷程文件

    基于OpenMV如何實(shí)現(xiàn)數(shù)字識(shí)別功能

    基于OpenMV如何實(shí)現(xiàn)數(shù)字識(shí)別功能

    然后在helloworld歷程文件中進(jìn)行匹配0~9這樣的基本數(shù)字,對這些數(shù)字進(jìn)

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

    在右邊的Frame Buffer框中進(jìn)行截取,注意:不要點(diǎn)Zoom,因?yàn)閆oom展示

    的是放大后的效果,在識(shí)別時(shí)可能會(huì)導(dǎo)致失幀。

    然后點(diǎn)擊左鍵選出一個(gè)框(如圖所示)

    基于OpenMV如何實(shí)現(xiàn)數(shù)字識(shí)別功能

    選完框后點(diǎn)擊右鍵選擇Save Image selection to PC

    基于OpenMV如何實(shí)現(xiàn)數(shù)字識(shí)別功能

    最后把截取的數(shù)字圖片進(jìn)行保存,一定要保存到OpenMV的SD卡中,保存的文件名可自己

    定義

    基于OpenMV如何實(shí)現(xiàn)數(shù)字識(shí)別功能

    3、把template.pgm改為你創(chuàng)建的模板圖片的名稱

    基于OpenMV如何實(shí)現(xiàn)數(shù)字識(shí)別功能

    (注意:模板圖片的格式一定要是pgm的格式,轉(zhuǎn)換格式可以在

    https://convertio.co/zh/bmp-pgm/網(wǎng)站直接進(jìn)行轉(zhuǎn)換)

    4、改完之后就可以運(yùn)行

    下面展示一些 有關(guān)數(shù)字識(shí)別的代碼。

    此代碼為源代碼,可根據(jù)自己的需求在上面進(jìn)行改動(dòng)。

    代碼來源:數(shù)字識(shí)別代碼,可直接引用并修改

    # 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())

    運(yùn)行的結(jié)果如圖所示

    基于OpenMV如何實(shí)現(xiàn)數(shù)字識(shí)別功能

    以上是“基于OpenMV如何實(shí)現(xiàn)數(shù)字識(shí)別功能”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI