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



    • 使用IDE给OPENMV4 H7 PLUS写入代码时,运行到110行net = tf.load("trained.tflite", load_to_fb=uos.stat('trained.tflite')[6] > (gc.mem_free() - (64*1024)))时,IDE会出现Attribute Error:'module' object has no attribute 'load'报错,如何解决呢

      '''
      openMV1
      实现:识别路标
      方式:神经网络数据集
      '''
      #------------------------------------------------------------
      ##使用库导入##
      import sensor, image, time, os, tf, uos, gc
      from pyb import UART,Timer
      #------------------------------------------------------------
      ##摄像头初始化##
      #像素与图片大小
      sensor.reset()
      sensor.set_pixformat(sensor.RGB565)
      sensor.set_framesize(sensor.QVGA)#320*240
      #摄像头翻转
      sensor.set_vflip (False)
      sensor.set_hmirror(False)
      #等待配置时间
      sensor.skip_frames(time = 1000)
      #设置画面
      sensor.set_windowing(0,30,320,180)
      
      #------------------------------------------------------------
      ##通信功能##
      #--------------------
      ##通信初始化
      uart = UART(3, 9600)  # 定义串口3变量
      uart.init(9600, bits=8, parity=None, stop=1)#串口3初始化
      #--------------------
      ##通信协议
      def send_data(mode,num,x,y):
          start = 0x24
          end = 0x23
          length = 5
          class_num = 0x05 #例程编号
          class_group = 0xBB #例程组
          data_num = 0x00 #数据量
          fenge = 0x2c #逗号
          crc = 0 #校验位
          data = [] #数据组
      
          #参数都为0
          if mode==0 and num==0 and x==0 and y ==0:
              pass
          else:
              #mode(小端模式)
              low = mode & 0xFF #低位
              high = mode >> 8& 0xFF #高位
              data.append(low)
              data.append(fenge) #增加","
              data.append(high)
              data.append(fenge) #增加","
      
              #num(小端模式)
              low = num & 0xFF #低位
              high = num >> 8& 0xFF #高位
              data.append(low)
              data.append(fenge) #增加","
              data.append(high)
              data.append(fenge) #增加","
      
              #x(小端模式)
              low = x & 0xFF #低位
              high = x >> 8& 0xFF #高位
              data.append(low)
              data.append(fenge) #增加","
              data.append(high)
              data.append(fenge) #增加","
      
              #y(小端模式)
              low = y & 0xFF #低位
              high = y >> 8& 0xFF #高位
              data.append(low)
              data.append(fenge) #增加","
              data.append(high)
              data.append(fenge) #增加","
      
          data_num = len(data)
          length += len(data)
          #print(length)
      
          send_merr = [length,class_num,class_group,data_num]
          for i in range(data_num):
              send_merr.append(data[i])
          #print(send_merr)
      
          #不加上CRC位,进行CRC运算
          for i in range(len(send_merr)):
              crc +=send_merr[i]
          crc = crc%256
      
          send_merr.insert(0,start) #插入头部
          send_merr.append(crc)
          send_merr.append(end)
      
          #print(send_merr)
          global send_buf
          send_buf = send_merr
          FH=bytearray(send_buf)
          print(send_buf)
          uart.write(FH)
      #--------------------
      ##发送识别结果1
      def send_temp(id):
          send_data(1,id,0,0)
      #------------------------------------------------------------
      ##识别功能##
      #--------------------
      net = tf.load("trained.tflite", load_to_fb=uos.stat('trained.tflite')[6] > (gc.mem_free() - (64*1024)))
      labels = [line.rstrip('\n') for line in open("labels.txt")]
      idbuffer=[0,0,0,0,0]#阈值清空buffer
      #色块识别阈值
      red=(26, 100, 29, 127, -37, 52)
      blue=(0, 58, -38, 80, -128, -32)
      green=(10, 75, -128, 20, 20, 106)
      #阈值清空标准,减少误识别概率
      buffer1=3
      buffer2=3
      buffer3=3
      buffer4=3
      #停止时间,防止识别同一个标识两次
      sleep1=800
      sleep2=600
      sleep3=400
      #------------------------------------------------------------
      clock = time.clock()
      while (True):
          clock.tick()
          img = sensor.snapshot()#.lens_corr(strength = 1.8, zoom = 1.0)
          #视上车情况开抗鱼眼
          #对数据集tensor进行匹配
          for obj in net.classify(img, min_scale=1.0, scale_mul=0.8, x_overlap=0.5, y_overlap=0.5):
              data=obj.output()
              if (data[0]>0.35):#数据集匹配率
                  idbuffer[0]=idbuffer[0]+1
                  idbuffer[4]=0
              elif (data[3]>0.55):
                  idbuffer[3]=idbuffer[3]+1
                  idbuffer[4]=0
              elif (data[1]>0.67):
                  idbuffer[1]=idbuffer[1]+1
                  idbuffer[4]=0
              elif (data[2]>0.75):
                  idbuffer[2]=idbuffer[2]+1
                  idbuffer[4]=0
              else:#无有效匹配值时,idbuffer[4]+1,用以清空idbuffer
                  idbuffer[4]=idbuffer[4]+1
      
          if idbuffer[0]>=buffer1:#红色标识1
              blobs=img.find_blobs([red],pixels_threshold=3, area_threshold=9, merge=True, margin=3)
              #对色块进行额外匹配,防止误识别
              if blobs:
                  send_temp(1)
                  idbuffer=[0,0,0,0,0]
                  time.sleep_ms(sleep1)
              else:
                  idbuffer[0]=0
      
          elif idbuffer[1]>=buffer2:#蓝色标识2
              blobs=img.find_blobs([blue],pixels_threshold=3, area_threshold=9, merge=True, margin=3)
              if blobs:
                  send_temp(2)
                  idbuffer=[0,0,0,0,0]
                  time.sleep_ms(sleep2)
              else:
                  idbuffer[1]=0
      
          elif idbuffer[2]>=buffer3:#绿色标识3
              blobs=img.find_blobs([green],pixels_threshold=3, area_threshold=9, merge=True, margin=3)
              if blobs:
                  send_temp(3)
                  idbuffer=[0,0,0,0,0]
                  time.sleep_ms(sleep3)
              else:
                  idbuffer[2]=0
      
          elif idbuffer[3]>=buffer4:#红色标识停
              blobs=img.find_blobs([red],pixels_threshold=3, area_threshold=9, merge=True, margin=3)
              if blobs:
                  send_temp(4)
                  idbuffer=[0,0,0,0,0]
                  time.sleep_ms(sleep1)
              else:
                  idbuffer[4]=0
      
          elif idbuffer[4]>=2*buffer1:#无有效识别对象后清空阈值,防止后续干扰
              idbuffer=[0,0,0,0,0]
      
          gc.collect()