【问题标题】:Numpy to string over socket results in decoding errorsNumpy 通过套接字串接导致解码错误
【发布时间】:2018-11-18 11:47:31
【问题描述】:

所以对于我的学校项目,我正在使用 kivy 将图像发送到 Android 手机,到目前为止它进展顺利。但现在我被卡住了,因为服务器端正在向客户端发送一个 numpy 数组,但显然 kivy 无法在 python3 中安装 numpy,我在 python2.7 中尝试过这个,但我什至无法克服另一个关于设备功能的错误。所以我剩下的唯一解决方案是使用 numpy 并将其转换为字符串,以便 kivy gui 的纹理可以显示它。但到目前为止,我一直收到错误:“这是一个字节对象,它没有 tostring() 方法”,当我使用 tostring 时,我不断收到“无效的错误代码 utf -8 无法解码.....”。使用 numpy 在 pc 上一切正常,我只需要在没有 numpy 的情况下做客户端,但我似乎无法让它工作。

服务器端:

data = conn.recv(1024)

data = pickle.dumps(camera.get())  ### numpy frame

conn.sendall(struct.pack("!L", len(data)) + data)  ### new code
print("Test")

客户端:

data = b""
payload_size = struct.calcsize("!L")
while True:

    while len(data) < payload_size:
        data += self.s.recv(4096)

    packed_msg_size = data[:payload_size]
    data = data[payload_size:]

    msg_size = struct.unpack("!L", packed_msg_size)[0]

    while len(data) < msg_size:

        data += self.s.recv(4096)

    frame_data = data[:msg_size]
    data = data[msg_size:]

    frame = pickle.loads(frame_data)

客户端缓冲区纹理图像:

image_texture = Texture.create(
size=(frame.shape[1], frame.shape[0]), colorfmt='bgr')        
image_texture.blit_buffer(frame.flatten(), colorfmt='bgr', bufferfmt='ubyte')    
self.texture = image_texture

【问题讨论】:

    标签: python sockets numpy kivy


    【解决方案1】:

    通过使用 frame.flatten() 然后 frame.tostring() 在通过套接字发送之前解决它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-12
      • 2011-03-19
      • 2012-11-29
      • 2016-03-04
      • 1970-01-01
      • 2017-10-06
      • 1970-01-01
      • 2012-06-24
      相关资源
      最近更新 更多