因此,对于我的学校项目,我正在使用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
答案 0 :(得分:0)
在通过套接字发送之前先使用frame.flatten()然后使用frame.tostring()来解决它。