python - 通过 Socket 发送 numpy 数组

标签 python arrays sockets numpy pickle

首先,我想做的是: 使用套接字将照片从我的 Raspberry Pi 发送到我的笔记本电脑。

客户:

#!/usr/bin/python

import socket
import cv2
import numpy as np
import pickle

#Upload image
img = cv2.imread('/path/to/image', 0)

#Turn image into numpy-array
arr = np.asarray(img)

#Receiver ip
ip = "XXX.XXX.X.XXX"

#Set up socket and stuff 
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

#Loop through each array (5 for test)
for each in range(5):

    #Encode each array
    msg = pickle.dumps(arr[each][0])

    #Send msg to ip with port
    s.sendto(msg, (ip, 50000))

s.close()

这里发生了什么: 我上传一张图片,然后将其转换为 Numpy 数组。然后我获取数组的每一行(每个列表)并用 pickle“编码”它,然后通过 Socket 发送它。到目前为止一切正常。

服务器:

#!/usr/bin/python

import socket
import numpy as np
import cPickle as pickle

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

s.bind(("", 50000)) 

while True:
    data, addr = s.recvfrom(4096)
    conv = pickle.loads(data)
    print conv
    #print np.fromstring(conv,dtype=int)
s.close()

服务器接收编码数据并将其解码回 Numpy 数组(这就是我想要实现的)。

最后,它应该将数组转回图像,但由于我目前遇到的问题,我什至没有到达那部分。

我还尝试先将数组转换为字符串,用pickle对其进行编码,然后发送它,这样当它被解码时,它就是一个numpy数组。但效果并不好。

ValueError:字符串大小必须是元素大小的倍数

我将不胜感激任何形式的帮助,无论是链接还是指出我的错误。 我已经为此工作好几天了,但没有找到任何可以帮助我解决这个问题的东西。

提前致谢。

最佳答案

为此,您不需要 OpenCV 和 NumPy。相反,只需直接发送文件的字节即可。如果您有 Python 3.5,您甚至可以使用 socket.sendfile()

更多详情请参见:Sending a file over TCP sockets in Python

关于python - 通过 Socket 发送 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40331320/

相关文章:

python - Django 开发是否提供真正灵活的 3 层架构?

Java客户端,C#服务器,如何处理接收列表

c - 将文件中的整数数组存储在结构 C 中

javascript - 数字根JS

安卓服务器套接字

node.js - 如何从客户端socket.emit服务器端socket.io捕获命名空间起源

Python 字典包含编码值

python - 如何使用 Selenium 和 Python 在 https ://e. mail.ru/login 中发送密码元素内的文本

python - Pandas group by 和 sum,但在超过一定数量时创建一个新行

java - 使用 ArrayList<String> 的 Android Java 字符串数组