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



    • 0_1679809539150_1.jpg

      import sensor, image, time
      import network, usocket, ujson
      from servo import Servos
      from machine import I2C, Pin
      i2c = I2C(sda=Pin('P5'), scl=Pin('P4'))
      
      
      # 初始化摄像头和PWM输出口
      sensor.reset()
      sensor.set_pixformat(sensor.RGB565)
      sensor.set_framesize(sensor.QVGA)
      sensor.skip_frames(time = 2000)
      tim = pyb.Timer(4, freq=50)
      channel = tim.channel(1, pyb.Timer.PWM, pin=P5.Pin.board.PA10)
      
      # 加载模型和标签
      model_path = "/trained_model/ei_image_classification"
      labels_path = "/trained_model/labels.txt"
      with open(labels_path, "r") as f:
          labels = [line.strip() for line in f.readlines()]
      
      # 加载模型到OpenMV中
      net = tf.load(model_path, load_to_fb=True)
      
      # 设置舵机初始位置
      channel.pulse_width_percent(5)
      
      # 识别循环
      while(True):
          img = sensor.snapshot()
          # 对图像进行预处理以及模型推理
          input_tensor = tf.keras.preprocessing.image.img_to_array(img)
          input_tensor = np.expand_dims(input_tensor, axis=0)
          input_tensor /= 255.
          output_tensor = net(input_tensor).numpy()[0]
          for i, label in enumerate(labels):
              if label == "shouji" and output_tensor[i] > 0.6:
                  # 控制舵机旋转180度
                  channel.pulse_width_percent(10)
                  time.sleep(1)
                  channel.pulse_width_percent(5)
      

      在做垃圾分拣项目——智能家电垃圾桶通过OPENMV 识别到物品,控制1号舵机旋转垃圾桶,控制2号舵机旋转控制托盘。
      遇到的问题:我想知道edge lmpulse建立的模型部署到OPEN MV H7 PLUS识别到标签数据,怎么控制ST90S舵机旋转一定角度;
      求具体代码,万分感谢!



    • 你看一下shuji是第几个标签,然后shuji_index就是几。(从0开始数)

      import sensor, image, time
      import network, usocket, ujson
      from servo import Servos
      
      s1 = Servo(1) # P7
      s2 = Servo(2) # P8
      
      # 初始化摄像头和PWM输出口
      sensor.reset()
      sensor.set_pixformat(sensor.RGB565)
      sensor.set_framesize(sensor.QVGA)
      sensor.skip_frames(time = 2000)
      
      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:
          print(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) + ')')
      
      
      s1.angle(0)
      clock = time.clock()
      
      shuji_index = 0
      
      while(True):
          img = sensor.snapshot()
          for obj in net.classify(img, min_scale=1.0, scale_mul=0.8, x_overlap=0.5, y_overlap=0.5):
              print("**********\nPredictions at [x=%d,y=%d,w=%d,h=%d]" % obj.rect())
              img.draw_rectangle(obj.rect())
              if obj.output()[shuji_index] > 0.6:
                  s1.angle(180)
              else:
                  s1.angle(0)
              time.sleep(1)
      
      


    • @kidswong999 0_1679929568407_回答.png
      我用的官方配的舵机扩展版。这种情况怎么搞。



    • @kidswong999 你这个OPENMV 用的传感器扩展板吗,如果用扩展版怎么搞



    • @nga5 不同的问题单独发帖子。



    • @kidswong999edge lmpulse建立的模型部署到OPEN MV H7 PLUS信号传递问题 中说:

      s1 = Servo(1) # P7
      s2 = Servo(2) # P8
      你这个是定义到open mv 上的吗。还是说舵机扩展版上的



    • @kidswong999 只需要改标签对吧,其他的不用动



    • @nga5 Servo(1)是OpenMV上P7引脚连接的舵机,Servo(2)是OpenMV上P8引脚连接的舵机,



    • @kidswong999 edge lmpulse建立的模型是通过你给的代码直接到进去的吗,没看到模型导入的代码,只看到了标签的



    • tf.load("trained.tflite", 这里是导入模型



    • @kidswong999 为什么我的显示伺服未定义,我需要怎么办



    • 为什么报错,求解答



    • @kidswong999 为什么显示未定义



    • @nga5 我上面的代码只是演示,你需要自己编写调试代码。