星瞳实验室APP,快速收到回复
  • 我们只解决官方正版的OpenMV的问题(STM32),其他的分支有很多兼容问题,我们无法解决。
  • 如果有产品硬件故障问题,比如无法开机,论坛很难解决。可以直接找售后维修
  • 发帖子之前,请确认看过所有的视频教程,https://singtown.com/learn/ 和所有的上手教程http://book.openmv.cc/
  • 每一个新的提问,单独发一个新帖子
  • 帖子需要目的,你要做什么?
  • 如果涉及代码,需要报错提示全部代码文本,请注意不要贴代码图片
  • 必看:玩转星瞳论坛了解一下图片上传,代码格式等问题。
  • 关于拍照时内容溢出的问题



    • 摄像头的设置如下:
      0_1551259357279_85e7214e-c47d-4d24-b921-5c654221ee27-image.png
      当我在一个whileTrue 循环中拍照时,
      代码:cframe = frame.compressed(quality=50)报错如下:
      0_1551259223598_a584a8f4-15e8-429f-93b3-5a68bc92e143-image.png
      注意:
      最开始我将quality设置为100,报错后根据提示,调小quality值为50,
      不幸的是问题没有被解决。
      我希望在不降低quality的条件下,连续拍照,请问有没有好的解决方案?



    • @yqw6 更新一个报错截图
      0_1551259770841_d2a6798c-45c7-4823-a6e4-480a28e38da7-image.png



    • 如果涉及代码,需要报错提示与全部代码文本,请注意不要贴代码图片



    • 其实在VGA彩色下,frame已经是一个压缩后的jpeg了,
      我认为没必要再调用compressed函数。



    • @kidswong999
      与问题相关的代码在这里:

      #camera类:初始化相机,拍照
      class camera:
          def __init__(self):
              # Reset sensor
              sensor.reset()
              # Set sensor settings
              sensor.set_contrast(1)#设置对比度
              sensor.set_brightness(1)#设置亮度
              sensor.set_saturation(1)#设置饱和度
              sensor.set_gainceiling(16)#设置相机图像增益上限
              sensor.set_framesize(sensor.VGA)#设置帧大小
              sensor.set_pixformat(sensor.RGB565)#设置像素模式
              #sensor.skip_frames(time = 2000)     # Wait for settings take effect.
      
          def getImage(self):
              frame = sensor.snapshot()
              cframe = frame.compressed(quality=50)
              #print(type(cframe))
              return cframe
      
      #clientSOCK:套接字客户端,发送图片
      class clientSOCK:
      
          def __init__(self,host,port):
              self.host=host
              self.port=port
              self.sock=usocket.socket(usocket.AF_INET,usocket.SOCK_STREAM)
              self.sock.connect((self.host,self.port))
              print("连接成功")
          def send(self,content,op):
              #发送文本消息
              if op==1:
                  self.sock.send(content)
                  self.sock.send("|*text*|")
                  a=b''
                  print("1")
                  recv=self.sock.recv(1024)
                  print("2")
                  #while recv:
                      #a+=recv
                      #recv=self.sock.recv(1024)
                  res=a.decode()
                  print("I have message:",res)
                  return res
              #发送图片消息
              if op==2:
                  self.sock.send(content)
                  self.sock.send("|*graph*|")
                  return
              return
      
      #循环:
      while True:
          #先建立TCP连接
          cli=clientSock(serverIP,serverPort)
          #初始化摄像模块
          pho = camera()
          #拍照
          img = getImage()
          #发送图片
          cli.send(img,2)
      

      做过的尝试:
      1.调低图像帧数(试过QVGA,QQVGA,),调整compressed函数的参数(试过50,10)
      仍然只能发送一次,就报MemoryError的错误,见题干截图
      2.使用VGA彩色图,不压缩直接发送,
      虽然能多次发送了,服务器收到的byte流经过解析无法得到JPEG图片,猜测不经压缩的图片不是常规JPEG格式。

      希望得到的帮助:
      如代码while循环所示,如何能多次拍摄,压缩彩色的图像?



    • 你的代码不完整。我无法运行。