首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过套接字发送numpy数组

问通过套接字发送numpy数组
EN

Stack Overflow用户
提问于 2016-10-30 16:45:46
回答 2查看 6.5K关注 0票数 2

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

客户端:

代码语言:javascript
复制
#!/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数组。然后,我取数组的每一行(每个列表),然后用泡菜“编码”它,然后通过套接字发送它。到目前为止一切都很顺利。

服务器:

代码语言:javascript
复制
#!/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数组(这正是我想要实现的)。

最后,它应该将数组转换回图像,但我甚至没有到那个部分,因为我在这一点上有问题。

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

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

我会感激任何帮助,无论是链接或指出我的错误。几天来一直在做这件事,但在这件事上找不到任何可以帮助我的东西。

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-31 12:44:25

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

有关更多细节,请参见:Sending a file over TCP sockets in Python

票数 1
EN

Stack Overflow用户

发布于 2016-10-31 12:19:26

我不知道您需要多少小数位,但您可以在UTF16 BE中对numpy数组值进行编码,然后在套接字发送后用

代码语言:javascript
复制
def retrieve_and_decode_data():
    try:
        data,addr = s.recvfrom(4096)                                                                                                                                                                                
        list_of_converted_utf16chars = (repr(data.decode('utf-16')).split("\\")[1:])

    except (ValueError, IndexError) as e:
        **perform some conversion-error exception...**

"repr“函数为您提供了可以在utf表中查找的utf16字符的表示形式。

然后,可以将此表示转换为int或float

代码语言:javascript
复制
integer_value = int(list_of_converted_utf16chars[index], 16)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40331320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档