• 免费好用的星瞳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用串口接收图片数据会丢一部分?



    • 串口使用的是uart = UART(1,38400)下面是接收数据的关键函数

      def getImage(getimage,len1,len2):
          length = len1+len2+10
          if (length%40)!=0:
              times=int(length/40)+1;
          else:
              times=int(length/40)
          print("this is length,",length)
          uart.write(bytes(getimage))
          time.sleep_ms(100)
          Imagedata=bytes([])
      
          for i in range(times):
              if uart.any():
                  if (i+1) !=times:
                      re_data=uart.read(40)
                      Imagedata += re_data
                      time.sleep_ms(10)
                  else :
                      number = length-40*i
                      re_data=uart.read(number)
                      Imagedata += re_data
                      time.sleep_ms(10)            
          count=0
          lenImageData=len(Imagedata)
          print("This is len Imagedata before:",lenImageData)
          for i in Imagedata:
              print(i,end=" ")
              count+=1
              if count>0 and (count%40==0):
                  print("\n")
          print("\n\n")
          print("This is len Imagedata before:",len(Imagedata))
          Imagedata = Imagedata[5:]
          lenImageData=len(Imagedata)
          lenImageData-=5
          Imagedata = Imagedata[:lenImageData]
          print("This is len Imagedata after:",len(Imagedata))
          for i in Imagedata:
              print(i,end=" ")
              count+=1
              if count>0 and (count%40==0):
                  print("\n")
          return Imagedata
      

      下面是print打印出来的几个关键信息:
      This is len1 and len2: 19 3
      this is length, 4877
      This is len Imagedata before: 4631
      This is len Imagedata after: 4621

      在上面的打印信息中,4877为我应该接受到的数据字节数,为JPEG图片经压缩后的数据流的长度,我前期测试发现如果用if uart.any():re_data=uart.readline()一次只能读47个字节,所以我设置每次读40个字节,同时可以通过我应该接收到的字节数算出我要读几次。我通过打印接收到的数据,可以判断出头和尾固定的数据字节是对的,但是会造成中间有数据丢失,同时我在使用for循环接收数据时,每次还必须进行5-10ms的延时,不然字节丢失会更严重,请问是为什么?