• 方案介紹
  • 附件下載
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

5.2.2-示例:利用LCD顯示畫面會(huì)方便調(diào)試 openmv+STM32串口通信

03/24 08:46
577
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

聯(lián)系方式.txt

共1個(gè)文件

**非常詳細(xì)的視頻和文字教程,講解常見的openmv教程包括 巡線、物體識(shí)別、圓環(huán)識(shí)別、閾值自動(dòng)獲取等。非常適合學(xué)習(xí)openmv、K210、K230等項(xiàng)目
視頻合集鏈接在


openmv教程合集 openmv入門到項(xiàng)目開發(fā) openmv和STM32通信 openmv和opencv區(qū)別 openmv巡線 openmv數(shù)字識(shí)別教程LCD

專刊openmv視覺文章鏈接:
https://blog.csdn.net/qq_46187594/category_12900902.html

5.2.2-示例:利用LCD顯示畫面會(huì)方便調(diào)試

LCD可以和像使用openmv IDE軟件的串行終端一樣,顯示你向知道的程序信息 比如3.2.5-增加 + 串口輸出+增加通過指定區(qū)域獲得閾值信息的代碼中 比如當(dāng)openmv 不再連接openmv IDE的適合就無法更直觀觀察到識(shí)別結(jié)果,那么我們可以通過

下面的適合固件版本是4.4.3及之前固件版本使用

lcd.init() #初始化lcd屏幕

在這里插入圖片描述
還有

代碼最后增加顯示在LCD屏幕上

注意LCD顯示語句的縮放,不是在for循環(huán)內(nèi)部的。

lcd_coyp = img.copy(0.7,0.7)# 兩個(gè)參數(shù)分別是 圖像在水平x方向上的縮放比例、圖像在垂直方向Y上的縮放比例 如果圖像顯示不全就調(diào)整更小些     
lcd.display(lcd_coyp) # 拍照并顯示圖像。

在這里插入圖片描述
還有最后

還有這個(gè)動(dòng)態(tài)獲得閾值,增加LCD顯示,這樣獲得閾值的綠色框也可以顯示了

主要LCD顯示一定要在等繪制完綠線后進(jìn)行。

lcd_coyp = img.copy(0.7,0.7)# 兩個(gè)參數(shù)分別是 圖像在水平x方向上的縮放比例、圖像在垂直方向Y上的縮放比例 如果圖像顯示不全就調(diào)整更小些     
lcd.display(lcd_coyp) # 拍照并顯示圖像。

在這里插入圖片描述
4.4.3及其一下固件使用程序。

import pyb, sensor, image, math, time
from pyb import UART
import ustruct
from image import SEARCH_EX, SEARCH_DS
import time
import sensor, lcd
#導(dǎo)入需要的庫和模塊
#教程作者:好家伙VCC
#歡迎交流群QQ: 771027961 作者郵箱: 1930299709@qq.com
#更多教程B站主頁:[好家伙VCC的個(gè)人空間-好家伙VCC個(gè)人主頁-嗶哩嗶哩視頻](https://space.bilibili.com/434192043)
#淘寶主頁鏈接:[首頁-好家伙VCC-淘寶網(wǎng)](https://shop415231378.taobao.com)
#更多嵌入式手把手教程-盡在好家伙VCC
#使用中可能根據(jù)自己情況需要修改的值
#1. GROUND_THRESHOLD 閾值參數(shù) 通過工具->機(jī)器視覺->閾值編輯器->幀緩沖區(qū) 調(diào)整出要識(shí)別的LAB閾值。
#2.注意是否有下面兩句根據(jù)自己攝像頭調(diào)整
  #sensor.set_vflip(True)
  #sensor.set_hmirror(True)


#sensor.set_contrast(1)#設(shè)置相機(jī)圖像對(duì)比度。-3至+3。
#sensor.set_gainceiling(16)#設(shè)置相機(jī)圖像增益上限。2, 4, 8, 16, 32, 64, 128。

uart = UART(3,115200,bits=8, parity=None, stop=1, timeout_char = 1000)#初始化串口三、波特率115200 TXD:P4PB10 RXD:P5PB11

roi1 =	 [( 20,   105, 10, 10),
          ( 45,   105, 10, 10),
          ( 75,   105, 10, 10),
          ( 105,  105, 10, 10),
          (130,   105, 10, 10)]#定義一個(gè)名為roi1的列表,其中包含了5個(gè)元組。每個(gè)元組代表了一個(gè)矩形感興趣區(qū)域在圖像上的位置和大小。
#具體而言,每個(gè)元組包含了4個(gè)數(shù)值依次的含義是:ROI左上角點(diǎn)的x坐標(biāo)、ROI左上角點(diǎn)的y坐標(biāo)、ROI的寬度、ROI的高度

led = pyb.LED(1) # led = pyb.LED(1)表示led表示紅燈。各種狀態(tài)如下:Red LED = 1, Green LED = 2, Blue LED = 3, IR LEDs = 4.
led.on()         #點(diǎn)亮紅燈 板載紅燈點(diǎn)亮表示程序得到執(zhí)行

sensor.reset()#初始化相機(jī)傳感器。
sensor.set_pixformat(sensor.RGB565)#設(shè)置相機(jī)模塊的像素模式:sensor.RGB565: 16 bits/像素。
sensor.set_framesize(sensor.QQVGA)#設(shè)置圖像分辨率、如果改變分辨率也要調(diào)整ROI區(qū)域。攝像頭不同、應(yīng)用場景不同可以選擇不同分辨率。這里使用QQVGA可能畫質(zhì)很胡,但是為了兼容不同型號(hào)攝像頭我們先使用QQVGA 不影響循跡效果
# ***************************如果不需要鏡像就注釋掉 下面 的代碼********************
# 設(shè)置攝像頭鏡像/翻轉(zhuǎn)操作,根據(jù)攝像頭安裝的方向決定是否需要
sensor.set_vflip(True)  # 垂直方向翻轉(zhuǎn)。根據(jù)實(shí)際攝像頭模塊的安裝位置調(diào)整是否需要此操作
# ?。?!重要:不同攝像頭是否需要鏡像,根據(jù)實(shí)際情況定。如果不需要鏡像,請(qǐng)注釋掉以下代碼:
sensor.set_hmirror(True)  # 水平方向反轉(zhuǎn)。根據(jù)實(shí)際攝像頭模塊的安裝位置調(diào)整是否需要此操作
# ?。?!重要:不同攝像頭是否需要鏡像,根據(jù)實(shí)際情況定。如果不需要鏡像,請(qǐng)注釋掉上述代碼。
# ***************************如果不需要鏡像就注釋掉 上面 的代碼********************
sensor.skip_frames(time=2000)#跳過指定數(shù)目的幀。在這里,設(shè)置為跳過2000毫秒(即2秒)的幀。這樣可以給傳感器一些時(shí)間進(jìn)行初始化和自適應(yīng)調(diào)整。
sensor.set_auto_whitebal(True)#設(shè)置為自動(dòng)白平衡模式。這使得攝像頭可以根據(jù)場景中的光照條件自動(dòng)調(diào)整圖像的白平衡,從而保持圖像色彩更加準(zhǔn)確和自然。
sensor.set_auto_gain(False)#關(guān)閉自動(dòng)增益模式。通常情況下,開啟自動(dòng)增益會(huì)幫助攝像頭自動(dòng)調(diào)整亮度,并在低亮度環(huán)境下提高圖像清晰度。通過設(shè)置為False,禁用了這個(gè)功能,使用固定增益值。

lcd.init() #初始化lcd屏幕

#最好根據(jù)自己情況設(shè)置一下?。?!
#GROUND_THRESHOLD=(0, 8, -128, 23, -128, 80)#閾值參數(shù),用于在圖像處理中對(duì)標(biāo)物體進(jìn)行顏色識(shí)別分割。在OpenMV IDE軟件 工具->機(jī)器視覺->閾值編輯器->幀緩沖區(qū) 調(diào)整出要識(shí)別的LAB閾值。
GROUND_THRESHOLD=(0, 30, -22, 23, -128, 80)#閾值參數(shù),用于在圖像處理中對(duì)標(biāo)物體進(jìn)行顏色識(shí)別分割。在OpenMV IDE軟件 工具->機(jī)器視覺->閾值編輯器->幀緩沖區(qū) 調(diào)整出要識(shí)別的LAB閾值。
#****************[0]-獲取指定位置閾值********************
threshold_calculated = False #控制閾值計(jì)算只執(zhí)行一次的標(biāo)志
# 封裝為函數(shù):識(shí)別指定區(qū)域的閾值
def get_threshold(roi):
    # 循環(huán)多次(默認(rèn)150次)更新閾值
    threshold = [0, 0, 0, 0, 0, 0]  # LAB色彩通道的閾值 [Lmin, Lmax, Amin, Amax, Bmin, Bmax]
    for _ in range(150):
        img = sensor.snapshot()
        # 獲取指定區(qū)域的顏色直方圖
        hist = img.get_histogram(roi=roi)
        img.draw_rectangle(roi, color=(0, 255, 0), thickness=2)  # 使用綠色(0, 255, 0),厚度為2# 在圖像上繪制綠色矩形框標(biāo)識(shí)采集區(qū)域
        # 在綠色矩形框上方顯示“采集計(jì)算閾值中...”并加上省略號(hào)
        img.draw_string(roi[0], roi[1] - 10, "Collecting Threshold...", color=(0, 255, 0), scale=1)
        
        lcd_coyp = img.copy(0.7,0.7)# 兩個(gè)參數(shù)分別是 圖像在水平x方向上的縮放比例、圖像在垂直方向Y上的縮放比例 如果圖像顯示不全就調(diào)整更小些     
        lcd.display(lcd_coyp) # 拍照并顯示圖像。
        
        # 獲取L、A、B三個(gè)通道的5%和95%分位值
        lo = hist.get_percentile(0.05)  # 獲取5%分位值,表示顏色分布的下邊界
        hi = hist.get_percentile(0.95)  # 獲取95%分位值,表示顏色分布的上邊界
        print("采集計(jì)算閾值中...請(qǐng)等待")  # 打印檢查結(jié)果,1表示滿足,0表示不滿足
        # 輸出lo和hi的值
#        print(f"5% Percentile (lo): L={lo.l_value()} A={lo.a_value()} B={lo.b_value()}")
#        print(f"95% Percentile (hi): L={hi.l_value()} A={hi.a_value()} B={hi.b_value()}")
        # L通道的最小值和最大值平均后作為新的閾值
        threshold[0] = (threshold[0] + lo.l_value()) // 2  # L通道的最小值
        threshold[1] = (threshold[1] + hi.l_value()) // 2  # L通道的最大值
        # A通道的最小值和最大值平均后作為新的閾值
        threshold[2] = (threshold[2] + lo.a_value()) // 2  # A通道的最小值
        threshold[3] = (threshold[3] + hi.a_value()) // 2  # A通道的最大值
        # B通道的最小值和最大值平均后作為新的閾值
        threshold[4] = (threshold[4] + lo.b_value()) // 2  # B通道的最小值
        threshold[5] = (threshold[5] + hi.b_value()) // 2  # B通道的最大值

    print(f"計(jì)算閾值的位置區(qū)域是 ROI Info: x={roi[0]}, y={roi[1]}, width={roi[2]}, height={roi[3]}")  # 輸出roi區(qū)域的信息
    # 打印每個(gè)通道的閾值信息
    print("計(jì)算出的閾值  Threshold: Lmin={0} Lmax={1}, Amin={2} Amax={3}, Bmin={4} Bmax={5}".format(
        threshold[0], threshold[1], threshold[2], threshold[3], threshold[4], threshold[5]
    ))

    # 返回計(jì)算得到的閾值列表,包含L、A、B三個(gè)通道的最小值和最大值
    return threshold  # 返回最終的閾值數(shù)組



def send_five_uchar(c1,c2,c3,c4,c5):#功能發(fā)送五個(gè)無符號(hào)字符(unsigned char)
    global uart;
    data = ustruct.pack("<BBBBBBBB",#使用了 ustruct.pack() 函數(shù)將這些數(shù)據(jù)打包為二進(jìn)制格式。使用 "<BBBBBBBB" 作為格式字符串來指定要打包的數(shù)據(jù)的類型和順序:
                   0xA5,
                   0xA6,
                   c1,
                   c2,
                   c3,
                   c4,
                   c5,
                   0x5B
                   )
    uart.write(data);#uart.write(data) 將打包好的二進(jìn)制數(shù)據(jù)幀寫入 UART 發(fā)送緩沖區(qū),從而將數(shù)據(jù)通過串口發(fā)送出去
    print(data)#通過 print(data) 打印發(fā)送的數(shù)據(jù)到串行終端,方便調(diào)試和確認(rèn)發(fā)送的內(nèi)容。

while(True):
    data=0
    blob1=None
    blob2=None
    blob3=None
    blob4=None
    blob5=None
    flag = [0,0,0,0,0]

#*****************[2]-獲取指定位置閾值-進(jìn)行閾值計(jì)算的內(nèi)容********************
    if not threshold_calculated:# 僅在閾值未計(jì)算時(shí)進(jìn)行計(jì)算
        # 調(diào)用函數(shù)獲取指定區(qū)域的閾值
        GROUND_THRESHOLD = get_threshold(roi1[2])

        # 設(shè)置閾值計(jì)算完成的標(biāo)志
        threshold_calculated = True

    img = sensor.snapshot().lens_corr(strength = 1.7 , zoom = 1.0)#對(duì)獲取到的圖像執(zhí)行鏡頭校正的操作。
    blob1 = img.find_blobs([GROUND_THRESHOLD], roi=roi1[0])#在圖像中通過顏色閾值 GROUND_THRESHOLD1 檢測 roi1[0] 區(qū)域內(nèi)的色塊,并將檢測結(jié)果賦值給 blob1。
    blob2 = img.find_blobs([GROUND_THRESHOLD], roi=roi1[1])#同理
    blob3 = img.find_blobs([GROUND_THRESHOLD], roi=roi1[2])
    blob4 = img.find_blobs([GROUND_THRESHOLD], roi=roi1[3])
    blob5 = img.find_blobs([GROUND_THRESHOLD], roi=roi1[4])

    if blob1:#如果roi1區(qū)域內(nèi)找到閾值色塊 就會(huì)賦值flag[0]為1
        flag[0] = 1
    if blob2:
        flag[1] = 1
    if blob3:
        flag[2] = 1
    if blob4:
        flag[3] = 1
    if blob5:
        flag[4] = 1
 #   print(flag[0],flag[1],flag[2],flag[3],flag[4])#把數(shù)據(jù)打印在串行終端方便調(diào)試
    send_five_uchar(flag[0],flag[1],flag[2],flag[3],flag[4])#把五個(gè)數(shù)據(jù)通過串口發(fā)送出去、發(fā)送五個(gè)無符號(hào)字符。

    # 遍歷所有感興趣的區(qū)域,并繪制矩形框及其識(shí)別結(jié)果
    for i, rec in enumerate(roi1):
        img.draw_rectangle(rec, color=(255, 0, 0))  # 繪制矩形框
        # 根據(jù)flag顯示識(shí)別結(jié)果
        result_text = str(flag[i])  # 顯示 1 或 0
        #rec 中的 rec[0] 對(duì)應(yīng)的是矩形框左上角的 橫坐標(biāo)(x),而 rec[1] 對(duì)應(yīng)的是矩形框左上角的 縱坐標(biāo)(y)
        text_y_position = rec[1] - 15  # 調(diào)整文本顯示位置,使其位于矩形框的上方
        img.draw_string(rec[0], text_y_position, result_text, color=(255, 255, 255), scale=2)  # 在矩形框內(nèi)繪制文本
        
    lcd_coyp = img.copy(0.7,0.7)# 兩個(gè)參數(shù)分別是 圖像在水平x方向上的縮放比例、圖像在垂直方向Y上的縮放比例 如果圖像顯示不全就調(diào)整更小些     
    lcd.display(lcd_coyp) # 拍照并顯示圖像。
       

4.5.1至新版本使用軟件

import pyb, sensor, image, math, time
from pyb import UART
import ustruct
from image import SEARCH_EX, SEARCH_DS
import time
import sensor, display
#導(dǎo)入需要的庫和模塊

#使用中可能根據(jù)自己情況需要修改的值
#1. GROUND_THRESHOLD 閾值參數(shù) 通過工具->機(jī)器視覺->閾值編輯器->幀緩沖區(qū) 調(diào)整出要識(shí)別的LAB閾值。
#2.注意是否有下面兩句根據(jù)自己攝像頭調(diào)整
  #sensor.set_vflip(True)
  #sensor.set_hmirror(True)


#sensor.set_contrast(1)#設(shè)置相機(jī)圖像對(duì)比度。-3至+3。
#sensor.set_gainceiling(16)#設(shè)置相機(jī)圖像增益上限。2, 4, 8, 16, 32, 64, 128。

uart = UART(3,115200,bits=8, parity=None, stop=1, timeout_char = 1000)#初始化串口三、波特率115200 TXD:P4PB10 RXD:P5PB11

roi1 =	 [( 20,   105, 10, 10),
          ( 45,   105, 10, 10),
          ( 75,   105, 10, 10),
          ( 105,  105, 10, 10),
          (130,   105, 10, 10)]#定義一個(gè)名為roi1的列表,其中包含了5個(gè)元組。每個(gè)元組代表了一個(gè)矩形感興趣區(qū)域在圖像上的位置和大小。
#具體而言,每個(gè)元組包含了4個(gè)數(shù)值依次的含義是:ROI左上角點(diǎn)的x坐標(biāo)、ROI左上角點(diǎn)的y坐標(biāo)、ROI的寬度、ROI的高度

led = pyb.LED(1) # led = pyb.LED(1)表示led表示紅燈。各種狀態(tài)如下:Red LED = 1, Green LED = 2, Blue LED = 3, IR LEDs = 4.
led.on()         #點(diǎn)亮紅燈 板載紅燈點(diǎn)亮表示程序得到執(zhí)行

sensor.reset()#初始化相機(jī)傳感器。
sensor.set_pixformat(sensor.RGB565)#設(shè)置相機(jī)模塊的像素模式:sensor.RGB565: 16 bits/像素。
sensor.set_framesize(sensor.QQVGA)#設(shè)置圖像分辨率、如果改變分辨率也要調(diào)整ROI區(qū)域。攝像頭不同、應(yīng)用場景不同可以選擇不同分辨率。這里使用QQVGA可能畫質(zhì)很胡,但是為了兼容不同型號(hào)攝像頭我們先使用QQVGA 不影響循跡效果
# ***************************如果不需要鏡像就注釋掉 下面 的代碼********************
# 設(shè)置攝像頭鏡像/翻轉(zhuǎn)操作,根據(jù)攝像頭安裝的方向決定是否需要
sensor.set_vflip(True)  # 垂直方向翻轉(zhuǎn)。根據(jù)實(shí)際攝像頭模塊的安裝位置調(diào)整是否需要此操作
# ?。?!重要:不同攝像頭是否需要鏡像,根據(jù)實(shí)際情況定。如果不需要鏡像,請(qǐng)注釋掉以下代碼:
sensor.set_hmirror(True)  # 水平方向反轉(zhuǎn)。根據(jù)實(shí)際攝像頭模塊的安裝位置調(diào)整是否需要此操作
# ?。?!重要:不同攝像頭是否需要鏡像,根據(jù)實(shí)際情況定。如果不需要鏡像,請(qǐng)注釋掉上述代碼。
# ***************************如果不需要鏡像就注釋掉 上面 的代碼********************
sensor.skip_frames(time=2000)#跳過指定數(shù)目的幀。在這里,設(shè)置為跳過2000毫秒(即2秒)的幀。這樣可以給傳感器一些時(shí)間進(jìn)行初始化和自適應(yīng)調(diào)整。
sensor.set_auto_whitebal(True)#設(shè)置為自動(dòng)白平衡模式。這使得攝像頭可以根據(jù)場景中的光照條件自動(dòng)調(diào)整圖像的白平衡,從而保持圖像色彩更加準(zhǔn)確和自然。
sensor.set_auto_gain(False)#關(guān)閉自動(dòng)增益模式。通常情況下,開啟自動(dòng)增益會(huì)幫助攝像頭自動(dòng)調(diào)整亮度,并在低亮度環(huán)境下提高圖像清晰度。通過設(shè)置為False,禁用了這個(gè)功能,使用固定增益值。

lcd = display.SPIDisplay() #使用的初始化方式

#最好根據(jù)自己情況設(shè)置一下?。。?
#GROUND_THRESHOLD=(0, 8, -128, 23, -128, 80)#閾值參數(shù),用于在圖像處理中對(duì)標(biāo)物體進(jìn)行顏色識(shí)別分割。在OpenMV IDE軟件 工具->機(jī)器視覺->閾值編輯器->幀緩沖區(qū) 調(diào)整出要識(shí)別的LAB閾值。
GROUND_THRESHOLD=(0, 30, -22, 23, -128, 80)#閾值參數(shù),用于在圖像處理中對(duì)標(biāo)物體進(jìn)行顏色識(shí)別分割。在OpenMV IDE軟件 工具->機(jī)器視覺->閾值編輯器->幀緩沖區(qū) 調(diào)整出要識(shí)別的LAB閾值。
#****************[0]-獲取指定位置閾值********************
threshold_calculated = False #控制閾值計(jì)算只執(zhí)行一次的標(biāo)志
# 封裝為函數(shù):識(shí)別指定區(qū)域的閾值
def get_threshold(roi):
    # 循環(huán)多次(默認(rèn)150次)更新閾值
    threshold = [0, 0, 0, 0, 0, 0]  # LAB色彩通道的閾值 [Lmin, Lmax, Amin, Amax, Bmin, Bmax]
    for _ in range(150):
        img = sensor.snapshot()
        # 獲取指定區(qū)域的顏色直方圖
        hist = img.get_histogram(roi=roi)
        img.draw_rectangle(roi, color=(0, 255, 0), thickness=2)  # 使用綠色(0, 255, 0),厚度為2# 在圖像上繪制綠色矩形框標(biāo)識(shí)采集區(qū)域
        # 在綠色矩形框上方顯示“采集計(jì)算閾值中...”并加上省略號(hào)
        img.draw_string(roi[0], roi[1] - 10, "Collecting Threshold...", color=(0, 255, 0), scale=1)
        
        lcd_coyp = img.copy(0.7,0.7)# 兩個(gè)參數(shù)分別是 圖像在水平x方向上的縮放比例、圖像在垂直方向Y上的縮放比例 如果圖像顯示不全就調(diào)整更小些     
        lcd.write(lcd_coyp) # 拍照并顯示圖像。
        
        # 獲取L、A、B三個(gè)通道的5%和95%分位值
        lo = hist.get_percentile(0.05)  # 獲取5%分位值,表示顏色分布的下邊界
        hi = hist.get_percentile(0.95)  # 獲取95%分位值,表示顏色分布的上邊界
        print("采集計(jì)算閾值中...請(qǐng)等待")  # 打印檢查結(jié)果,1表示滿足,0表示不滿足
        # 輸出lo和hi的值
#        print(f"5% Percentile (lo): L={lo.l_value()} A={lo.a_value()} B={lo.b_value()}")
#        print(f"95% Percentile (hi): L={hi.l_value()} A={hi.a_value()} B={hi.b_value()}")
        # L通道的最小值和最大值平均后作為新的閾值
        threshold[0] = (threshold[0] + lo.l_value()) // 2  # L通道的最小值
        threshold[1] = (threshold[1] + hi.l_value()) // 2  # L通道的最大值
        # A通道的最小值和最大值平均后作為新的閾值
        threshold[2] = (threshold[2] + lo.a_value()) // 2  # A通道的最小值
        threshold[3] = (threshold[3] + hi.a_value()) // 2  # A通道的最大值
        # B通道的最小值和最大值平均后作為新的閾值
        threshold[4] = (threshold[4] + lo.b_value()) // 2  # B通道的最小值
        threshold[5] = (threshold[5] + hi.b_value()) // 2  # B通道的最大值

    print(f"計(jì)算閾值的位置區(qū)域是 ROI Info: x={roi[0]}, y={roi[1]}, width={roi[2]}, height={roi[3]}")  # 輸出roi區(qū)域的信息
    # 打印每個(gè)通道的閾值信息
    print("計(jì)算出的閾值  Threshold: Lmin={0} Lmax={1}, Amin={2} Amax={3}, Bmin={4} Bmax={5}".format(
        threshold[0], threshold[1], threshold[2], threshold[3], threshold[4], threshold[5]
    ))

    # 返回計(jì)算得到的閾值列表,包含L、A、B三個(gè)通道的最小值和最大值
    return threshold  # 返回最終的閾值數(shù)組



def send_five_uchar(c1,c2,c3,c4,c5):#功能發(fā)送五個(gè)無符號(hào)字符(unsigned char)
    global uart;
    data = ustruct.pack("<BBBBBBBB",#使用了 ustruct.pack() 函數(shù)將這些數(shù)據(jù)打包為二進(jìn)制格式。使用 "<BBBBBBBB" 作為格式字符串來指定要打包的數(shù)據(jù)的類型和順序:
                   0xA5,
                   0xA6,
                   c1,
                   c2,
                   c3,
                   c4,
                   c5,
                   0x5B
                   )
    uart.write(data);#uart.write(data) 將打包好的二進(jìn)制數(shù)據(jù)幀寫入 UART 發(fā)送緩沖區(qū),從而將數(shù)據(jù)通過串口發(fā)送出去
    print(data)#通過 print(data) 打印發(fā)送的數(shù)據(jù)到串行終端,方便調(diào)試和確認(rèn)發(fā)送的內(nèi)容。

while(True):
    data=0
    blob1=None
    blob2=None
    blob3=None
    blob4=None
    blob5=None
    flag = [0,0,0,0,0]

#*****************[2]-獲取指定位置閾值-進(jìn)行閾值計(jì)算的內(nèi)容********************
    if not threshold_calculated:# 僅在閾值未計(jì)算時(shí)進(jìn)行計(jì)算
        # 調(diào)用函數(shù)獲取指定區(qū)域的閾值
        GROUND_THRESHOLD = get_threshold(roi1[2])

        # 設(shè)置閾值計(jì)算完成的標(biāo)志
        threshold_calculated = True

    img = sensor.snapshot().lens_corr(strength = 1.7 , zoom = 1.0)#對(duì)獲取到的圖像執(zhí)行鏡頭校正的操作。
    blob1 = img.find_blobs([GROUND_THRESHOLD], roi=roi1[0])#在圖像中通過顏色閾值 GROUND_THRESHOLD1 檢測 roi1[0] 區(qū)域內(nèi)的色塊,并將檢測結(jié)果賦值給 blob1。
    blob2 = img.find_blobs([GROUND_THRESHOLD], roi=roi1[1])#同理
    blob3 = img.find_blobs([GROUND_THRESHOLD], roi=roi1[2])
    blob4 = img.find_blobs([GROUND_THRESHOLD], roi=roi1[3])
    blob5 = img.find_blobs([GROUND_THRESHOLD], roi=roi1[4])

    if blob1:#如果roi1區(qū)域內(nèi)找到閾值色塊 就會(huì)賦值flag[0]為1
        flag[0] = 1
    if blob2:
        flag[1] = 1
    if blob3:
        flag[2] = 1
    if blob4:
        flag[3] = 1
    if blob5:
        flag[4] = 1
 #   print(flag[0],flag[1],flag[2],flag[3],flag[4])#把數(shù)據(jù)打印在串行終端方便調(diào)試
    send_five_uchar(flag[0],flag[1],flag[2],flag[3],flag[4])#把五個(gè)數(shù)據(jù)通過串口發(fā)送出去、發(fā)送五個(gè)無符號(hào)字符。

    # 遍歷所有感興趣的區(qū)域,并繪制矩形框及其識(shí)別結(jié)果
    for i, rec in enumerate(roi1):
        img.draw_rectangle(rec, color=(255, 0, 0))  # 繪制矩形框
        # 根據(jù)flag顯示識(shí)別結(jié)果
        result_text = str(flag[i])  # 顯示 1 或 0
        #rec 中的 rec[0] 對(duì)應(yīng)的是矩形框左上角的 橫坐標(biāo)(x),而 rec[1] 對(duì)應(yīng)的是矩形框左上角的 縱坐標(biāo)(y)
        text_y_position = rec[1] - 15  # 調(diào)整文本顯示位置,使其位于矩形框的上方
        img.draw_string(rec[0], text_y_position, result_text, color=(255, 255, 255), scale=2)  # 在矩形框內(nèi)繪制文本
        
    lcd_coyp = img.copy(0.7,0.7)# 兩個(gè)參數(shù)分別是 圖像在水平x方向上的縮放比例、圖像在垂直方向Y上的縮放比例 如果圖像顯示不全就調(diào)整更小些     
    lcd.write(lcd_coyp) # 拍照并顯示圖像。
       
  • 聯(lián)系方式.txt
    下載

相關(guān)推薦

方案定制

去合作
方案開發(fā)定制化,2000+方案商即時(shí)響應(yīng)!