• 免费好用的星瞳AI云服务上线!简单标注,云端训练,支持OpenMV H7和OpenMV H7 Plus。可以替代edge impulse。 https://forum.singtown.com/topic/9519
  • 我们只解决官方正版的OpenMV的问题(STM32),其他的分支有很多兼容问题,我们无法解决。
  • 如果有产品硬件故障问题,比如无法开机,论坛很难解决。可以直接找售后维修
  • 发帖子之前,请确认看过所有的视频教程,https://singtown.com/learn/ 和所有的上手教程http://book.openmv.cc/
  • 每一个新的提问,单独发一个新帖子
  • 帖子需要目的,你要做什么?
  • 如果涉及代码,需要报错提示全部代码文本,请注意不要贴代码图片
  • 必看:玩转星瞳论坛了解一下图片上传,代码格式等问题。
  • 169行之后有点小bug,关于一点串口发协议进行多次识别,求助一下大佬(标题写不了呢么长,具体一点在内容里面)



    • 我想着是 识别二维码 当识别到的时候将一个数组的第三位改变,判断 改变了之后跳出循环,当没识别到的时候numbb一直自减,但是现在没有识别到的时候他numbb会一直减到0才停止,并且在numbb自减的时候摄像头会一直卡住在某一帧的图像(或者有没有什么办法能 又避免卡住摄像头的同时 又能在没有识别到东西的时候进行再次识别,{功能:识别到了之后跳出,没识别到的时候可以转动摄像头调整角度同时识别,规定时间内还是没有识别到时候跳出防止程序卡死})

      import sensor, image,time,lcd
      
      from pyb import UART,Timer,LED
      
      
      sensor.reset()#初始化摄像头
      print("初始化摄像头成功")
      sensor.set_pixformat(sensor.RGB565)#设置格式,RGB565为彩图
      print("初始化格式成功")
      sensor.set_framesize(sensor.QVGA)#设置图像像素大小
      print("初始化图像类型成功")
      #sensor.skip_frames(time = 1000)#里面如果是数字就是跳过几帧,如果是time=1000就是跳过1s的帧数
      print("初始化跳帧成功")
      sensor.set_auto_whitebal(False)#关闭白平衡
      print("关闭白平衡")
      sensor.set_auto_gain(False)#关闭自动增益
      print("关闭自动增益")
      clock = time.clock()#记录帧数
      print("记录帧数")
      lcd.init()#初始化附带的lcd屏幕
      print("初始化lcd屏幕成功")
      uart = UART(3,115200,8,None,1)#初始化串口
      print("初始化串口成功")                                                #初始化
      
      
      #===================================================================================================
      
      #交通灯的阈值(经过曝光处理)
      red_threshold_01 = (29, 100, 38, 96, 20, 63)
      green_threshold_01 = (29, 91, -128, -18, 19, 46)
      yellow_threshold_01 = (34, 100, -31, 42, 48, 84)
      
      green_yuzhi=(28, 94, -128, -16, 2, 46)
                                                                           #阈值
      #===================================================================================================
      data = []#一个列表
      runData	 = [0x55,0x02,0x92,0x03,0x02,0x00,0x00,0xBB]
      if_Check = [0x55,0x00,0x00,0x00,0x00,0x00,0x00,0xBB]                 #返回的协议
      #===================================================================================================
      #串口发送函数
      def Send(src,length):
          for i in range(length):
              uart.writechar(src[i])                                       #串口发送函数
      #===================================================================================================
      def find_max(blobs):    #定义寻找色块面积最大的函数
          max_size=0
          for blob in blobs:
              if blob.pixels() > max_size:
                  max_blob=blob
                  max_size = blob.pixels()
          return max_blob                                                  #寻找面积最大的色块(暂时没用)
      #===================================================================================================
      
      def ceshi():
          print("ceshi key")
          uart.writechar(0x55)
                                                                           #测试用
      #===================================================================================================
      
      #交通灯的核对
      def traffic_Check():
          #numbb=2000
          sensor.set_auto_exposure(False, 800)#这里设置曝光时间
      
          #while(numbb!=0):
              #print (numbb)
              #if(if_Check[3]!=0x00):
                  #if_Check.insert(3,0x00)
                  #numbb=0
                  #break
      
          blobs = img.find_blobs([red_threshold_01], merge=True, margin=2);      #红色物块
          blobs1 = img.find_blobs([green_yuzhi], merge=True, margin=2); #绿色物块
          blobs2 = img.find_blobs([yellow_threshold_01], merge=True, margin=2);   #蓝色物块
      
          if blobs1:
              #如果找到了目标lv色
              print("绿色")
              if_Check.insert(3,0x02)
              uart.writechar(0x55)
              uart.writechar(0x02)
              uart.writechar(0x02)
              uart.writechar(0x03)
              uart.writechar(0x00)
              uart.writechar(0x00)
              uart.writechar(0x04)
              uart.writechar(0xBB)
      
          elif blobs2:
              print("huang色")
              if_Check.insert(3,0x03)
              uart.writechar(0x55)
              uart.writechar(0x02)
              uart.writechar(0x02)
              uart.writechar(0x02)
              uart.writechar(0x00)
              uart.writechar(0x00)
              uart.writechar(0x05)
              uart.writechar(0xBB)
      
          elif blobs:
              #如果找到了目标红色
              print("hong色")
              if_Check.insert(3,0x01)
              uart.writechar(0x55)
              uart.writechar(0x02)
              uart.writechar(0x02)
              uart.writechar(0x01)
              uart.writechar(0x00)
              uart.writechar(0x00)
              uart.writechar(0x03)
              uart.writechar(0xBB)
          else :
              Send(if_Check,8)
              #numbb=numbb-1                                               #交通灯识别函数
      #===================================================================================================
      
      def Color_Check():
          for code in img.find_qrcodes():
              qr_message = code.payload()
              print(qr_message)
              if_Check.insert(3,0x04)
      
              uart.writechar(0x55)
              uart.writechar(0x02)
              uart.writechar(0x92)
              uart.writechar(0x01)
              uart.writechar(len(qr_message))
              for qrdata in qr_message:
                  uart.writechar(ord(qrdata))
              uart.writechar(0xBB)
      #===================================================================================================
      
      #55 02 91 01 00 00 00 BB 交通灯识别串口协议
      #55 02 92 01 00 00 00 BB 二维码识别串口协议
      print("准备初始化系统")
      while(True):
          img = sensor.snapshot().lens_corr(1.8)
          if(uart.any()):
              print("串口连接成功,准备打印串口传输内容")
              data = uart.read(8)
              print(data)#调试串口输入
              if( len(data) >= 8):
                  if((data[0] == 0x55)and(data[1] == 0x02)and(data[7] == 0xBB)):
                      print("协议初始化成功")
      
                      if(data[2] == 0x91):
                          print("识别交通灯")
                          if(data[3] == 0x01):
                              print("开始识别交通灯")
                              while(numbb!=0):
                                  print (numbb)
                                  #当第三位有数据的时候跳出循环
                                  if(if_Check[3]!=0x00):
                                      if_Check.insert(3,0x00)
                                      numbb=0
                                      break
                                  #识别交通灯函数
                                  traffic_Check()
      
                      if(data[2] == 0x92):
                          print("识别二维码")
                          if(data[3] == 0x01 ):
                              print("开始识别二维码")
      
                              sensor.set_auto_exposure(True)#这里设置曝光时间
                              print(sensor.get_exposure_us())
                              numbb=2000
                              while(numbb!=0):
                                  print (numbb)
                                  #当第三位有数据的时候跳出循环
                                  if(if_Check[3]!=0x00):
                                      if_Check.insert(3,0x00)
                                      numbb=0
                                      break
                                  else:
                                      numbb=numbb-1          
                                  #识别二维码函数
                                  Color_Check()
      
      
      
      

      请在这里粘贴代码

      
      


    • 逻辑应该是这样的:

      收到指令
      如果指令是查找二维码:
          死循环找二维码
      

      死循环找二维码肯定是要循环采集的。