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



    • ![0_1692785268446_报错.jpg](正在上传 72%)

      # Edge Impulse - OpenMV Image Classification Example
      
      import sensor, image, time, os, tf, uos, gc,pyb,machine
      from pyb import UART
      uart = UART(3,115200)
      
      
      green = (10,100,-50,15,-15,50)
      red = (0,100,-30,50,-30,30)
      blue = (10,100,-20,40,-10,40)
      orange = (10,80,-10,30,-20,35)
      brown = (0,80,-10,20,-20,30)
      yellow = (50,80,-10,10,-20,60)
      white = (10,100,-20,30,-30,20)
      gray = (20,80,-10,15,-10,25)
      
      
      sensor.reset()                         # Reset and initialize the sensor.
      sensor.set_pixformat(sensor.RGB565)    # Set pixel format to RGB565 (or GRAYSCALE)
      sensor.set_framesize(sensor.QVGA)      # Set frame size to QVGA (320x240)
      sensor.set_windowing((240, 240))       # Set 240x240 window.
      sensor.skip_frames(time = 2000)
      sensor.set_auto_gain(False)
      sensor.set_auto_whitebal(False)
      clock = time.clock()
      
      name = 'c'
      
      while(True):
          clock.tick()
      
      
          def rubbish():
              net = None
              labels = None
      
              try:
                  # load the model, alloc the model file on the heap if we have at least 64K free after loading
                  net = tf.load("trained.tflite", load_to_fb=uos.stat('trained.tflite')[6] > (gc.mem_free() - (64 * 1024)))
              except Exception as e:
      
                  raise Exception(
                      'Failed to load "trained.tflite", did you copy the .tflite and labels.txt file onto the mass-storage device? (' + str(
                          e) + ')')
      
              try:
                  labels = [line.rstrip('\n') for line in open("labels.txt")]
              except Exception as e:
                  raise Exception(
                      'Failed to load "labels.txt", did you copy the .tflite and labels.txt file onto the mass-storage device? (' + str(
                          e) + ')')
      
              image = sensor.snapshot()
      
              scores = net.classify(image)
      
              # default settings just do one detection... change them to search the image...
              for obj in net.classify(image, min_scale=1.0, scale_mul=0.8, x_overlap=0.5, y_overlap=0.5):
      
                  image.draw_rectangle(obj.rect())
                  # This combines the labels and confidence values into a list of tuples
                  predictions_list = list(zip(labels, obj.output()))
                  name = predictions_list[0][0]
                  for i in range(len(predictions_list)):
      
                      max = 0.8
                      if predictions_list[i][1] > max:
                          max = predictions_list[i][1]
                          name = predictions_list[i][0]
      
                  if name == 'KHSLJ':
                      name = 'k'
                  elif name == 'YHLJ':
                      name = 'y'
                  elif name == 'CYLJ':
                      name = 'c'
                  elif name == 'QTLJ':
                      name = 'q'
      
              return name
          img = sensor.snapshot()
          blobs1 = img.find_blobs([green])
          blobs2 = img.find_blobs([red])
          blobs3 = img.find_blobs([blue])
          blobs4 = img.find_blobs([orange])
          blobs5 = img.find_blobs([brown])
          blobs6 = img.find_blobs([yellow])
          blobs7 = img.find_blobs([white])
          blobs8 = img.find_blobs([gray])
      
          if blobs1:
              rubbish()
              uart.write(name)
      
          if blobs2:
              rubbish()
              uart.write(name)
      
          if blobs3:
              rubbish()
              uart.write(name)
          if blobs4:
              rubbish()
              uart.write(name)
      
          if blobs5:
              rubbish()
              uart.write(name)
      
          if blobs6:
              rubbish()
              uart.write(name)
      
          if blobs7:
              rubbish()
              uart.write(name)
      
          if blobs8:
              rubbish()
              uart.write(name)
      
      
      
      
      
      


    • 你把name打印出来看看是啥。



    • 0_1692850268256_f7338f32-d1f2-484e-a898-f55540db5394-image.png

      import sensor, image, time, os, tf, uos, gc,pyb,machine
      from pyb import UART
      uart = UART(3,115200)
      
      
      green = (10,100,-50,15,-15,50)
      red = (0,100,-30,50,-30,30)
      blue = (10,100,-20,40,-10,40)
      orange = (10,80,-10,30,-20,35)
      brown = (0,80,-10,20,-20,30)
      yellow = (50,80,-10,10,-20,60)
      white = (10,100,-20,30,-30,20)
      gray = (20,80,-10,15,-10,25)
      
      
      sensor.reset()                         # Reset and initialize the sensor.
      sensor.set_pixformat(sensor.RGB565)    # Set pixel format to RGB565 (or GRAYSCALE)
      sensor.set_framesize(sensor.QVGA)      # Set frame size to QVGA (320x240)
      sensor.set_windowing((240, 240))       # Set 240x240 window.
      sensor.skip_frames(time = 2000)
      sensor.set_auto_gain(False)
      sensor.set_auto_whitebal(False)
      clock = time.clock()
      
      
      
      while(True):
          clock.tick()
      
      
          def rubbish():
              net = None
              labels = None
      
              try:
                  # load the model, alloc the model file on the heap if we have at least 64K free after loading
                  net = tf.load("trained.tflite", load_to_fb=uos.stat('trained.tflite')[6] > (gc.mem_free() - (64 * 1024)))
              except Exception as e:
      
                  raise Exception(
                      'Failed to load "trained.tflite", did you copy the .tflite and labels.txt file onto the mass-storage device? (' + str(
                          e) + ')')
      
              try:
                  labels = [line.rstrip('\n') for line in open("labels.txt")]
              except Exception as e:
                  raise Exception(
                      'Failed to load "labels.txt", did you copy the .tflite and labels.txt file onto the mass-storage device? (' + str(
                          e) + ')')
      
              image = sensor.snapshot()
      
              scores = net.classify(image)
      
              # default settings just do one detection... change them to search the image...
              for obj in net.classify(image, min_scale=1.0, scale_mul=0.8, x_overlap=0.5, y_overlap=0.5):
      
                  image.draw_rectangle(obj.rect())
                  # This combines the labels and confidence values into a list of tuples
                  predictions_list = list(zip(labels, obj.output()))
                  name = predictions_list[0][0]
                  for i in range(len(predictions_list)):
      
                      max = 0.8
                      if predictions_list[i][1] > max:
                          max = predictions_list[i][1]
                          name = predictions_list[i][0]
      
                  if name == 'KHSLJ':
                      name = 'k'
                  elif name == 'YHLJ':
                      name = 'y'
                  elif name == 'CYLJ':
                      name = 'c'
                  elif name == 'QTLJ':
                      name = 'q'
      
              return name
              
          name = rubbish()
      
          img = sensor.snapshot()
          blobs1 = img.find_blobs([green])
          blobs2 = img.find_blobs([red])
          blobs3 = img.find_blobs([blue])
          blobs4 = img.find_blobs([orange])
          blobs5 = img.find_blobs([brown])
          blobs6 = img.find_blobs([yellow])
          blobs7 = img.find_blobs([white])
          blobs8 = img.find_blobs([gray])
      
          if blobs1:
              rubbish()
              uart.write(name)
              print(name)
      
          if blobs2:
              rubbish()
              uart.write(name)
      
          if blobs3:
              rubbish()
              uart.write(name)
          if blobs4:
              rubbish()
              uart.write(name)
      
          if blobs5:
              rubbish()
              uart.write(name)
      
          if blobs6:
              rubbish()
              uart.write(name)
      
          if blobs7:
              rubbish()
              uart.write(name)
      
          if blobs8:
              rubbish()
              uart.write(name)
      


    • 前面打印name 一直是'c',我就把代码改成这样了,又提示了这个错误



    • tf.load不要在死循环里调用,只需要在一开始调用一次。