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



    • 之前说过更新后采集速度会变快很多,但为什么我的帧率还是一样的数值(75)?速度也没有提升?之前的提问:https://forum.singtown.com/topic/5009/这个代码需要如何优化才能提速



    • 禁用帧缓冲区。硬件:OpenMV4,7725,固件2.6.4。

      0_1592812772092_d2d41c71-6568-488f-9e9b-a715800ff8f0-image.png



    • 没有用啊?0_1592962184102_1592962119(1).jpg

      # 红外RGB565跟踪示例
      
      #
      
      # 这个例子展示了使用OpenMV Cam进行红外RGB565跟踪。
      
      
      import sensor, image
      import time
      #from numba import jit
      from pyb import UART
      
      import json
      import utime
      
      import pyb
      
      #EXPOSURE_TIME_SCALE = 0.1
      thresholds = (100,100,0,0,0,0) # thresholds for bright white light from IR.
      
      TimeBin = [0,0]
      TimeBox = [0,0]
      
      sensor.reset()
      
      sensor.set_pixformat(sensor.RGB565)
      
      sensor.set_framesize(sensor.QQQVGA)
      
      sensor.set_auto_gain(False) # must be turned off for color tracking
      
      sensor.set_auto_whitebal(False) # must be turned off for color tracking
      
      sensor.skip_frames(time = 10)
      sensor.get_exposure_us()#以毫秒为单位返回曝光率
      
      sensor.set_auto_exposure(False,exposure_us=100)#设置曝光
      
      
      #sensor.set_auto_exposure(False, \
         # exposure_us = int(current_exposure_time_in_microseconds* EXPOSURE_TIME_SCALE))
      
      
      clock = time.clock() # Tracks FPS.
      
      uart = UART(3,115200)
      
      
      
      def find_max(blobs):
         max_size=0
         for blob in blobs:
              if blob.pixels() >max_size:
                  max_blob=blob
      #            max_size = blob.pixels()
         return max_blob
      
      
      
      while(True):
          #utime.sleep_ms(50)
      
          #for i in range(0,6000):
          clock.tick()# Track elapsed milliseconds between snapshots().
      
          img = sensor.snapshot()#binary([thresholds], invert=True, zero=True)
         # TimeBox[1]= TimeBox[0]
         # TimeBox[0] = utime.ticks_ms()
          #deal = utime.ticks_diff(TimeBox[0],TimeBox[1])
          #print("deal :",deal)
         # start = utime.ticks_ms()
          blobs=img.find_blobs([thresholds],pixels_threshold=200,area_threshold=250)
      
      
          if blobs:
      
            output_str = json.dumps(blobs)
      
            max_blob=find_max(blobs)
      
            img.draw_rectangle(max_blob.rect(),color=(255,0,0))
      
            output_str="[%d,%d]" % (max_blob.cx(),max_blob.cy())
      
            print('you send:',output_str)
            uart.write(output_str+'\n')
      
           # print("Initial exposure == %d" % sensor.set_auto_exposure())
      
            #current_exposure_time_in_microseconds=sensor.get_exposure_us()
      
            #sensor.set_auto_exposure(False, \'
               # exposure_us = int(sensor.get_exposure_us() * EXPOSURE_TIME_SCALE))
            print("New exposure == %d" % sensor.get_exposure_us())
      
            TimeBin[1] = TimeBin[0]
            TimeBin[0] = utime.ticks_ms()
            delta= utime.ticks_diff(TimeBin[0], TimeBin[1])
            print('duration:',delta)
      
            print("FPS:", clock.fps())
      
                  #img.draw_cross(blob.cx(), blob.cy())
          else:
      
                      print('not found!')
      
      
      
      
      
      
      


    • 运行hello world。



    • 运行这个代码速度不能达到吗?



    • 不同的代码不一样。

      你的代码里,sensor.get_exposure_us()耗时,删掉。

      曝光时间和帧率也有关系。sensor.set_auto_exposure(False,exposure_us=100)改一下。

      具体怎么改看你的需求。



    • 串口发送“uart = UART(3,115200)”,这一行就导致速度提不上去,但这行又不能缺少,有办法解决吗?



    • uart.write(output_str+'\n')发送数据会变慢。你可以换一下协议,发送二进制。
      这个代码是可以的。

      while(True):
          clock.tick()# Track elapsed milliseconds between snapshots().
          img = sensor.snapshot()#binary([thresholds], invert=True, zero=True)
          blobs=img.find_blobs([thresholds],pixels_threshold=200,area_threshold=250)
          if blobs:
              max_blob=find_max(blobs)
              output = bytes([0xFF,max_blob.cx(),max_blob.cy()])
              print('you send:',output)
              uart.write(output)
              print("FPS:", clock.fps())
      


    • 好像还是不行,有了uart = UART(3,115200)就会变慢

      # 红外RGB565跟踪示例
      
      #
      
      # 这个例子展示了使用OpenMV Cam进行红外RGB565跟踪。
      
      
      import sensor, image
      import time
      from pyb import UART
      
      import json
      import utime
      
      import pyb
      
      thresholds = (100,100,0,0,0,0) # thresholds for bright white light from IR.
      
      TimeBin = [0,0]
      TimeBox = [0,0]
      
      sensor.reset()
      
      sensor.set_pixformat(sensor.RGB565)
      
      sensor.set_framesize(sensor.QQQVGA)
      
      sensor.set_auto_gain(False) # must be turned off for color tracking
      
      sensor.set_auto_whitebal(False) # must be turned off for color tracking
      
      sensor.skip_frames(time = 10)
      #sensor.get_exposure_us()#以毫秒为单位返回曝光率
      
      #sensor.set_auto_exposure(False,exposure_us=1)#设置曝光
      
      
      #sensor.set_auto_exposure(False, \
         # exposure_us = int(current_exposure_time_in_microseconds* EXPOSURE_TIME_SCALE))
      
      
      clock = time.clock() # Tracks FPS.
      
      uart = UART(3,115200)
      
      
      
      def find_max(blobs):
         max_size=0
         for blob in blobs:
              if blob.pixels() >max_size:
                  max_blob=blob
                  max_size = blob.pixels()
         return max_blob
      
      
      
      while(True):
      
          clock.tick()# Track elapsed milliseconds between snapshots().
      
          img = sensor.snapshot()#binary([thresholds], invert=True, zero=True)
      
          blobs=img.find_blobs([thresholds],pixels_threshold=200,area_threshold=250)
      
      
          if blobs:
      
            #output_str = json.dumps(blobs)
      
            max_blob=find_max(blobs)
            output = bytes([0xFF,max_blob.cx(),max_blob.cy()])
      
            img.draw_rectangle(max_blob.rect(),color=(255,0,0))
      
            #output_str="[%d,%d]" % (max_blob.cx(),max_blob.cy())
      
            print('you send:',output)
            uart.write(output)
      
            TimeBin[1] = TimeBin[0]
            TimeBin[0] = utime.ticks_ms()
            delta= utime.ticks_diff(TimeBin[0], TimeBin[1])
            print('duration:',delta)
      
            print("FPS:", clock.fps())
      
                  #img.draw_cross(blob.cx(), blob.cy())
          #else:
      
                      #print('not found!')
      
      
      
      
      
      
      


    • 测试代码:

      # 红外RGB565跟踪示例
      
      #
      
      # 这个例子展示了使用OpenMV Cam进行红外RGB565跟踪。
      
      
      import sensor, image
      import time
      #from numba import jit
      from pyb import UART
      
      import json
      import utime
      
      import pyb
      
      #EXPOSURE_TIME_SCALE = 0.1
      thresholds = (100,100,0,0,0,0) # thresholds for bright white light from IR.
      
      TimeBin = [0,0]
      TimeBox = [0,0]
      
      sensor.reset()
      
      sensor.set_pixformat(sensor.RGB565)
      
      sensor.set_framesize(sensor.QQQVGA)
      
      sensor.set_auto_gain(False) # must be turned off for color tracking
      
      sensor.set_auto_whitebal(False) # must be turned off for color tracking
      
      sensor.skip_frames(time = 10)
      sensor.get_exposure_us()#以毫秒为单位返回曝光率
      
      sensor.set_auto_exposure(False,exposure_us=100)#设置曝光
      
      
      #sensor.set_auto_exposure(False, \
         # exposure_us = int(current_exposure_time_in_microseconds* EXPOSURE_TIME_SCALE))
      
      
      clock = time.clock() # Tracks FPS.
      
      uart = UART(3,115200)
      
      
      
      def find_max(blobs):
         max_size=0
         for blob in blobs:
              if blob.pixels() >max_size:
                  max_blob=blob
      #            max_size = blob.pixels()
         return max_blob
      
      
      
      while(True):
          clock.tick()# Track elapsed milliseconds between snapshots().
          img = sensor.snapshot()#binary([thresholds], invert=True, zero=True)
          blobs=img.find_blobs([thresholds],pixels_threshold=200,area_threshold=250)
          if blobs:
              max_blob=find_max(blobs)
              output = bytes([0xFF,max_blob.cx(),max_blob.cy()])
              print('you send:',output)
              uart.write(output)
              print("FPS:", clock.fps())
      

      测试结果:FPS: 136.1621

      0_1593451049032_38dea88a-0747-4fa7-9339-d4da5e6a9229-image.png



    • 为什么我还是75?只有一次是1360_1593520753249_1593520677(1).png



    • 不知道具体情况,建议联系卖家,把产品寄回去测试。



    • OpenMV4 ov7725 hello world可以到150帧,加入其他的代码不能保证是150帧。