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



    • Openmv

      import sensor, image, time, os, tf, uos, gc, lcd, pyb
      from pyb import Pin,Timer,LED
      from pyb import UART
      #import json
      
      
      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)          # Let the camera adjust.
      sensor.set_auto_whitebal(False) # turn this off.
      
      apple=(15, 54, 75, 10, -57, 55)
      orange=(55, 98, -128, 127, 23, 127)
      #(55, 98, -128, 127, 23, 127),(13, 55, -11, 24, 9, 97)
      #strawberry=()
      
      net = None
      labels = None
      
      key1=Pin('P1',Pin.IN,Pin.PULL_UP)       #启动
      key2=Pin('P2',Pin.IN,Pin.PULL_UP)       #停止
      LED=Pin('P9',Pin.OUT_PP,Pin.PULL_NONE)
      
      StartFlag=0 #开始标志
      
      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) + ')')
      
      
      
      
      clock = time.clock()
      uart=UART(3,115200)
      uart.init(115200, bits=8, parity=None,timeout=1000, read_buf_len=128)  #8位数据位,无校验位,1位停止位、
      #uart = pyb.USB_VCP()
      
      
      
      def sending_data(size):
          global uart;
          
          #data = ustruct.pack("<bbhhh",      #格式为俩个字符俩个短整型(2字节)
                         #0x2C,                      #帧头1
                         #0x12,                      #帧头2
                         #int(size), # up sample by 4   #数据1)
          data=str(size)                 
          uart.write(data);   #必须要传入一个字节数组
      
      
      while(True):
          clock.tick()
      ###############################启动停止识别程序##############################################
          img = sensor.snapshot()
      
          if key1.value()==0:   # 按钮启动
              LED.value(1)      #LED灯亮
              while key1.value()==0:
                    key1.value()
              StartFlag=1        #开始识别
      
          if key2.value()==0:   # 按钮启动
              LED.value(1)      #LED灯亮
              while key2.value()==0:
                    key2.value()
              StartFlag=0        #停止识别
          LED.value(0)
      ############################################################################################
      
      #################################神经网络分类并画框读出尺寸################################################
          # default settings just do one detection... change them to search the image...
      
          if StartFlag==0:
              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())
                  # This combines the labels and confidence values into a list of tuples
                  predictions_list = list(zip(labels, obj.output()))
                  for i in range(len(predictions_list)):
                      print("%s = %f" % (predictions_list[i][0], predictions_list[i][1]))
                      if predictions_list[i][0] == 'apple':
                          apple_blobs=img.find_blobs([apple])
                          if len(apple_blobs) == 1:
                              b=apple_blobs[0]
                              img.draw_rectangle(b[0:4],color=(255,0,0)) # rect
                              img.draw_cross(b[5], b[6]) # cx, cy
                              length=b[2]-b[0]
                              width=b[3]-b[1]
                              #size=str(length if length>width else width)
                              #print(size)
                              #data_out=json.dumps(size)
                              #uart.write(data_out+'\n')
                              size=length if length>width else width
                              print(size)
                              sending_data(size)
      
      
      
      
                      if predictions_list[i][0] == 'orange':
                          orange_blobs=img.find_blobs([orange])
                          if len(orange_blobs) == 1:
                                  b=orange_blobs[0]
                                  img.draw_rectangle(b[0:4],color=(250, 140, 53)) # rect
                                  img.draw_cross(b[5], b[6]) # cx, cy
                                  length=b[2]-b[0]
                                  width=b[3]-b[1]
                                  #size=str(length if length>width else width)
                                  #print(size)
                                  #data_out=json.dumps(size)
                                  #uart.write(data_out+'\n')
                                  size=length if length>width else width
                                  print(size)
                                  sending_data(size)
      
      
                      #################################窗口显示水果种类#############################
                      if predictions_list[i][1]>0.75:
                          LED.value(1)    #LED灯亮
                          img.draw_string(30,10,predictions_list[i][0],color=(255,0,0),scale=2,x_spacing=1,mono_space=False,string_rotation=0,)
                      #############################################################################
          else:
               img.draw_string(30,0,"Stop",color=(255,0,0), scale=2,x_spacing=1,mono_space=False,string_rotation=0)
      
          print(clock.fps(), "fps")
      


    • @zhq6

      matlab端口
      % 配置串口
      clear all
      delete(instrfindall)
      instrreset()
      
      s = serialport('COM10',115200);
      configureTerminator(s,"LF")
      fprintf('Serial port is open and configured.\n');
      %device.Terminator
      while true
          data = readline(s);
          disp(data);
      end
      % Close the serial port when done
      fclose(s);