• OpenMV VSCode 扩展发布了,在插件市场直接搜索OpenMV就可以安装
  • 如果有产品硬件故障问题,比如无法开机,论坛很难解决。可以直接找售后维修
  • 发帖子之前,请确认看过所有的视频教程,https://singtown.com/learn/ 和所有的上手教程http://book.openmv.cc/
  • 每一个新的提问,单独发一个新帖子
  • 帖子需要目的,你要做什么?
  • 如果涉及代码,需要报错提示全部代码文本,请注意不要贴代码图片
  • 必看:玩转星瞳论坛了解一下图片上传,代码格式等问题。
  • OpenMv多个二维码识别后的值怎么回传给单片机?单个的值在 代码 数组 qrdata 中,那多个的呢?



    • import sensor, image, time, lcd
      from pyb import UART,Timer,LED
      
      sensor.reset()#初始化摄像头
      sensor.set_pixformat(sensor.RGB565)#设置彩图
      sensor.set_framesize(sensor.QVGA)#设置图像像素为QVGA
      sensor.skip_frames(1)#里面如果是数字就是跳过几帧,如果是time=1000就是跳过1s的帧数  # 等待设置生效 "设置跳帧成功,如果卡摄像头将这句话注释"
      sensor.set_auto_gain(False)#关闭自动增益
      sensor.set_auto_whitebal(False)#关闭白平衡
      clock = time.clock()#记录帧率
      lcd.init()#初始化LCE屏幕
      uart = UART(3,115200,8,None,1)#初始化串口
      #============================================================
      LEDR = LED(1)
      LEDG = LED(2)
      LEDB = LED(3)
      
      data = []#一个列表
      left_roi= [0,0,260,200]#设置了一个感兴趣区,如果框不住请调整 160宽度是最小的,但是不建议
      
      '''
      #交通灯的阈值(经过曝光处理)主要使用这个阈值
      red_threshold_01 = (29, 100, 38, 96, 20, 63)
      green_threshold_01 = (29, 91, -96, -18, 19, 67)
      yellow_threshold_01 = (34, 100, -31, 42, 48, 84)
      '''
      
      FlagOK = 0
      colorFlag = 0
      yellow_threshold_01 = (34, 100, -31, 42, 48, 84)
      green_threshold_01 = (29, 91, -96, -18, 19, 67)
      
      #===================================================================================================
      #UART发送函数
      def USART_Send(src,length):
          for i in range(length):
              uart.writechar(src[i])
      #===================================================================================================
      #二维码识别函数#
      def qrcode_check(srcbuf):
          global FlagOK
          if(FlagOK == 1):
      
              LEDB.on()
              time.sleep_ms(50)
              LEDB.off()
      
      #        img.lens_corr(1.8)
              for qrcode in img.find_qrcodes():
                  print(qrcode)
                  FlagOK = 0
                  qr_Tab = qrcode.payload()
                  uart.writechar(0x55)
                  uart.writechar(0x02)
                  uart.writechar(0x92)
                  uart.writechar(0x01)
                  uart.writechar(len(qr_Tab))
                  for qrdata in qr_Tab:
                      uart.writechar(ord(qrdata))
                  uart.writechar(0xBB)
          if(FlagOK == 2):
              FlagOK = 0
      #===================================================================================================
      #交通灯识别函数
      def colorfind(srcbuf):
          global colorFlag
      
          if(colorFlag == 1):#==================
      
              LEDR.on()
              time.sleep_ms(50)
              LEDR.off()
      
              #看参数根据距离更改   ,x_stride =5,y_stride=5  增加识别的速度   软件复位:machine.reset()
              # pixels_threshold=30  最小的色块
              # area_threshold=30  最小边界框区域
              # merge=True 合并色块
              # margin=2 合并的时候边界距离
      
              yellow = img.find_blobs([yellow_threshold_01],roi=left_roi,x_stride =5,y_stride=5, pixels_threshold=30, area_threshold=30, merge=True, margin=2)
              green  = img.find_blobs([green_threshold_01] ,roi=left_roi,x_stride =5,y_stride=5, pixels_threshold=30, area_threshold=30, merge=True, margin=2)
      
              if yellow:
                  LEDB.off()
                  LEDR.on()
                  LEDG.on()
                  LEDR.off()
                  LEDG.off()
                  uart.writechar(0x55)
                  uart.writechar(0x0E)
                  uart.writechar(0x02)
                  uart.writechar(0x03)
                  uart.writechar(0x00)
                  uart.writechar(0x00)
                  uart.writechar(0x05)
                  uart.writechar(0xBB)
                  print("发送黄色")
                  colorFlag = 0
      
              elif green:
                  LEDB.off()
                  LEDG.on()
                  LEDG.off()
                  uart.writechar(0x55)
                  uart.writechar(0x0E)
                  uart.writechar(0x02)
                  uart.writechar(0x02)
                  uart.writechar(0x00)
                  uart.writechar(0x00)
                  uart.writechar(0x04)
                  uart.writechar(0xBB)
                  print("发送绿色")
                  colorFlag = 0
      
              else :
                  LEDR.on()
                  LEDG.off()
                  LEDB.off()
                  uart.writechar(0x55)
                  uart.writechar(0x0E)
                  uart.writechar(0x02)
                  uart.writechar(0x01)
                  uart.writechar(0x00)
                  uart.writechar(0x00)
                  uart.writechar(0x03)
                  uart.writechar(0xBB)
                  print("发送红色")
                  colorFlag = 0
      
          if(colorFlag == 2):
              colorFlag = 0
      #===================================================================================================
      print("准备进入主循环")
      #55 02 92 01 00 00 00 BB 二维码识别串口协议
      #55 02 91 01 00 00 00 BB 交通灯识别串口协议
      ####################################################################################################
      while(True):
      #    LEDB.on()
          img = sensor.snapshot()# 拍一张照片并返回图像。
          #.lens_corr(1.8)       #如果二维码识别不到把注释去掉
          img.draw_rectangle( left_roi, color=(255,0,0))
          if(uart.any()):
              print("收到串口发送的数据")
              data = uart.read(8)
              print(data)
              if(len(data) >= 8):
      
                  if((data[0] == 0x55)&(data[1] == 0x02)& (data[2] == 0x92) & (data[7] == 0xBB)):
                          if(data[3] == 0x01):
                              if(FlagOK == 0):
                                  FlagOK = 1
                                  print("开始识别二维码")
                                  sensor.set_auto_exposure(True)#这里设置自动曝光
      
                          if(data[3] == 0x02):
                              print("停止QR识别")
                              FlagOK = 2
                                                                                               #主循环函数
      ####################################################################################################
                  if((data[0] == 0x55)&(data[1] == 0x02)& (data[2] == 0x91) & (data[7] == 0xBB)):
                          if(data[3] == 0x01):
                              if(colorFlag == 0):
                                  colorFlag = 1
                                  print("开始识别颜色")
                                  sensor.set_auto_exposure(False, 1000)#这里设置曝光时间
      
                          if(data[3] == 0x02):
                              print("停止颜色识别")
                              colorFlag = 2
      
                                                                                               #主循环函数
      #===================================================================================================
      
          lcd.display(img)
          qrcode_check(data)
          colorfind(data)
      
                                                                                                 #重点循环
      #===================================================================================================
      


    • img.find_qrcodes()是一个列表,里面有很多个二维码。你的现在的代码是:循环遍历每一个二维码,然后发送。