A20040427 2024-08-30 21:56 采纳率: 0%
浏览 4

请问这个代码最后为什么打印不出true

# Untitled - By: xmc - Thu Aug 29 2024

import pyb, sensor, image, math, time
from pyb import UART
import ustruct
from image import SEARCH_EX, SEARCH_DS
sensor.set_contrast(1)
sensor.set_gainceiling(16)
clock = time.clock()
uart = UART(3,115200,bits=8, parity=None, stop=1, timeout_char = 1000)


sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time = 2000)
sensor.set_auto_gain(False)  # 必须关闭此功能,以防止图像冲洗…
#sensor.skip_frames(20) # Let new settings take affect.
#sensor.set_auto_exposure(False, 1400)
sensor.set_auto_whitebal(False) # turn this off.
sensor.set_vflip(1)
sensor.set_hmirror(1)
clock = time.clock()

red_threshold = [(23, 58, 30, 70, -32, 24)]
green_threshold = [(45, 81, -74, -30, 10, 65)]
blue_threshold = [(55, 73, -65, -24, 17, 65)]
roi1=(96,53,98,88)

def sending_data(flag):
    global uart;
    data = ustruct.pack("<b",
                   flag
                   )
    uart.write(data);
#a = 10
while(True):
    #a = a + 1
    #print(a)
    clock.tick() 
    img = sensor.snapshot()
    #print(clock.fps())


    #img.lens_corr(1.8) # 消除桶形畸变   1.8的强度参数对于2.8mm镜头来说是不错的
    for code in img.find_qrcodes():
        img.draw_rectangle(code.rect(), color = (255, 0, 0))
        message = code.payload()
        print(message)
        num1 = message[0]
        num2 = message[1]
        #print(num1)
        #print(num1)

        #if message:
        b = 0
        #print(b)
        if num1 == '1':
            print('get')
        if num1 == '1':    
            red_blob = img.find_blobs(red_threshold, roi=roi1, area_threshold=3000)
            if red_blob:
                b = 1

        if num1 == '2':
            print(5)
            green_blob = img.find_blobs(green_threshold, roi=roi1, area_threshold=300)
            if green_blob:
                b = 1
               

        if num1 == '3':
            blue_blob = img.find_blobs(blue_threshold, roi=roi1, area_threshold=3000)
            if blue_blob:
                b = 1
        print(b)       
        if b == 1:
            print("True")
            #flag = 1
            #print(flag)
            #data = flag
            #print(data)
            #sending_data(data)

请问这个代码最后为什么打印不出true

  • 写回答

1条回答 默认 最新

  • 铭渊老黄 新星创作者: Python技术领域 2024-08-31 06:38
    关注
    🕒上午好,题主!目前:🟢[在线]
    📢参考GPT-4o mini 模型、由清水白石008整理提供!
    📣今日金句:时间是最好的医生,但也是最坏的美容师。” — 乔治·肖
    

    在你的代码中,print("True") 语句在某些条件下应该被执行,但你提到它没有打印出 "True"。我们可以逐步分析代码,找出可能的原因。

    代码分析

    1. QR码检测

      • 代码中使用 img.find_qrcodes() 来查找图像中的QR码。如果没有检测到QR码,for code in img.find_qrcodes(): 循环将不会执行,因此后面的代码也不会被执行。
    2. QR码内容

      • 你在处理QR码的内容时,使用 num1 = message[0]num2 = message[1]。确保 message 至少有两个字符。如果QR码的内容长度小于2,访问 message[1] 会导致错误,可能会导致程序崩溃或跳过后续代码。
    3. 条件判断

      • 你在检查 num1 的值时,只有在 num1 等于 '1''2''3' 时才会执行相应的代码块。如果QR码的内容不符合这些条件,b 将始终保持为0,导致不会打印 "True"。
    4. Blob检测

      • 在每个条件下,你都在查找特定颜色的blob(红色、绿色、蓝色)。如果没有找到任何blob,b 将不会被设置为1,因此不会打印 "True"。

    解决方案

    1. 确保QR码被检测到

      • 在循环开始时,打印出检测到的QR码数量,以确保QR码被正确识别。
      qrcodes = img.find_qrcodes()
      print("Detected QR codes:", len(qrcodes))
      
    2. 检查QR码内容的长度

      • 在访问 message 的索引之前,检查其长度。
      if len(message) >= 2:
          num1 = message[0]
          num2 = message[1]
      else:
          print("Invalid QR code message length")
          continue
      
    3. 调试Blob检测

      • 在每个颜色的blob检测后,打印出找到的blob数量。
      if num1 == '1':
          red_blob = img.find_blobs(red_threshold, roi=roi1, area_threshold=3000)
          print("Red blobs found:", len(red_blob))
          if red_blob:
              b = 1
      
    4. 打印b的值

      • 在每次循环结束时打印 b 的值,以便更好地理解程序的执行流程。
      print("Current value of b:", b)
      

    通过这些调试步骤,你应该能够更清楚地了解为什么 "True" 没有被打印出来,并找到解决问题的方法。希望这些建议能帮助你解决问题!

    评论

报告相同问题?

问题事件

  • 创建了问题 8月30日