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



    • import sensor, image, time, os, tf, math, uos, gc, ustruct,pyb#,thread
      from pyb import UART,LED
      from image import SEARCH_EX, SEARCH_DS
      from pyb import LED
      from pid import PID
      rho_pid = PID(p=0.4, i=0)
      theta_pid = PID(p=0.001, i=0)
      THRESHOLD = (0, 36, -46, 50, 44, -83)
      threshold = (245, 255)
      
      sensor.reset()
      sensor.set_vflip(False)
      sensor.set_hmirror(False)
      sensor.set_pixformat(sensor.GRAYSCALE)
      sensor.set_framesize(sensor.QQVGA)
      sensor.set_windowing((240,240))
      sensor.skip_frames(time=2000)
      sensor.set_contrast(1)
      sensor.set_gainceiling(16)
      sensor.set_auto_gain(False) # 颜色跟踪必须关闭自动增益
      sensor.set_auto_whitebal(False) # 颜色跟踪必须关闭白平衡
      clock = time.clock()
      
      roi = (10,0,30,30)#,(140,50,90,100)]
      led = pyb.LED(4)
      net = None
      labels = None
      min_confidence = 0.3
      
      flag = 0
      rho = 0
      theta = 0
      def track(rho,theta):        
          img = sensor.snapshot().binary([THRESHOLD])
          line = img.get_regression([(100,100)], robust = True)
          if (line):
               rho_err = abs(line.rho())-img.width()/2
               if line.theta()>90:
                 theta_err = line.theta()-180
               else:
                  theta_err = line.theta()
                  img.draw_line(line.line(), color = 127)
                  print(rho_err,line.magnitude(),rho_err)
               if line.magnitude()>8:
               #if -40<b_err<40 and -30<t_err<30:
                  rho_output = rho_pid.get_pid(rho_err,1)
                  theta_output = theta_pid.get_pid(theta_err,1)
                  output = rho_output+theta_output
                     # car.run(50+output, 50-output)
               else:
                  car.run(0,0)
          else:
              car.run(50,-50)
              pass
              #print(clock.fps())
              print(rho_err,line.magnitude(),rho_err)
              outuart(rho,theta)
                  
      
      
      try:
          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) + ')')
      colors = [
          (255,   0,   0),
          (  0, 255,   0),
          (255, 255,   0),
          (  0,   0, 255),
          (255,   0, 255),
          (  0, 255, 255),
          (255, 255, 255),
      ]
      
      
      uart = UART(3,115200)
      uart.init(9600, bits=8, parity=None, stop=1)
      def outuart(num):
          global uart
          data = ustruct.pack("<bbhhhhb",
                         0x2C,
                         0x12,
                         int(num),
                         int(88),
                         0x5B)
          uart.write(data)
          time.sleep_ms(1)
      data = [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]
      
      def UartReceiveDate():
          global Find_Task
          global Target_Num
          global x
          global data
          data[0] = uart.readchar()
          data[1] = uart.readchar()
          Target_Num=int(data[0]-48)*10+int(data[1]-48)
          #outuart(Target_Num)
      
      clock = time.clock()
      
      flag = 0
      rho = 0
      theta = 0
      def track(rho,theta):
          img = sensor.snapshot().binary([THRESHOLD])
          line = img.get_regression([(100,100)], robust = True)
          if (line):
              rho_err = abs(line.rho())-img.width()/2
              if line.theta()>90:
                  theta_err = line.theta()-180
              else:
                  theta_err = line.theta()
              img.draw_line(line.line(), color = 127)
              print(rho_err,line.magnitude(),rho_err)
      
      num = 0
      temp_num = 0
      UartReceiveDate
      #track(rho,theta)
      Target_Num = 0
      def find_number(temp_num):
          global tem
          global num
          while(True):
              clock.tick()
              img = sensor.snapshot()
              if(num == 0):
                  sensor.set_windowing(1,1,100,100)
                  sensor.set_windowing(10,20,50,60)
              if(num == 1):
                  sensor.set_windowing(60,40,180,180)
                  sensor.set_windowing(90,40,50,60)
              for i, detection_list in enumerate(net.detect(img, thresholds=[(math.ceil(min_confidence * 255), 255)])):
                  if (i == 0): continue
                  if (len(detection_list) == 0): continue
                  print(" %s " % labels[i])
                  tem = labels[i]
                  templatei ="/"+str(labels[i])+".pgm"
                  print(templatei)
                  outuart(tem)
                  num = num + 1
                  for d in detection_list:
                      [x, y, w, h] = d.rect()
                      center_x = math.floor(x + (w / 2))
                      center_y = math.floor(y + (h / 2))
                  print('x %d\ty %d' % (center_x, center_y))
                  sensor.set_windowing(240,240)
                  if(num == 1):
                      temp_num=int(tem)*10
                      print(temp_num)
                  elif(num == 2):
                      temp_num+=int(tem)
                      print(temp_num)
                      outuart(temp_num)
                      break
              if(num ==2):
                  break
          if(Target_Num==temp_num):
              print("okk")
              outuart(1)
              led = pyb.LED(2)
          else:
              print("error")
      
      UartReceiveDate()
      while(True):
          clock.tick()
          img = sensor.snapshot() # 拍一张照片并返回图像
          blobs = img.find_blobs([threshold=(245, 255),roi=(10,0,30,30)])
          if blobs==1:
          #如果找到了目标颜色
              for b in blobs:
                  #迭代找到的目标颜色区域
                  track(rho,theta)
          else:
              outuart("stop")
              find_number(temp_num)
          #track(rho,theta)
          #find_number(temp_num)
      


    • emmm原因贴上来



    • 你代码写错了

      blobs = img.find_blobs([threshold=(245, 255),roi=(10,0,30,30)])

      改为

      blobs = img.find_blobs(threshold=[(245, 255)],roi=(10,0,30,30))