まずは、私がしたいこと: 私のラズベリーパイからソケット付き写真をラップトップに送信しています。ソケットを介してnumpy配列を送信
クライアント:私は写真をアップロードしてnumpyの配列にそれを回す :ここに何が起こる
#!/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()
。次に、配列の各行(各リスト)を取り出し、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:文字列のサイズが
要素サイズの倍数でなければならない私は、ヘルプの任意の種類をいただければ幸いそれがリンクであるか、私のミスを指摘。 これについて何日も作業しており、この問題で私を助けてくれるものは見つかりませんでした。
ありがとうございます。
あなたがバイトとして直接画像を送信しない理由を私は知らない - 'FH =オープン(... "RB")'、 'のsendto(fh.read( )) ' – furas
もう少し説明できますか? sendto()関数はどのように機能しますか? 私は実際にソケットとそのすべてのもののためにかなり新しいです^^ –
あなたは何を意味するのか分かりましたが、メッセージが長すぎて動作しません。データをパッケージに分割して送信する方法はありますか? 'socket.error:[Errno 90] Message too long' –