Я делаю клиент-серверную программу.клиент должен передать изображение с веб-камеры на сервер, сервер должен использовать библиотеку dlib для вычисления точек на лице и отправки их клиенту.
Клиент - Raspberry pi 3 (b +?), сервер настольный на Ubuntu 16.04
server.py
import socket
import dlib
import cv2
from io import BytesIO
from imutils import face_utils
import numpy as np
def calculateShape(img):
rects = detector(img, 0)
try:
shape = face_utils.shape_to_np(predictor(img, rects[0]))
except IndexError:
print('Face not found.')
shape = numpy.ndarray(Array([0]))
return shape
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
sock = socket.socket()
sock.bind(('', 9091))
sock.listen(1)
conn, addr = sock.accept()
print('connected:', addr)
while True:
try:
f = BytesIO()
while True:
data = conn.recv(1024)
if not data:
break
if len(data) != 0:
f.write(data)
else:
print('break')
break
f.seek(0)
image = np.loads(f.read().rstrip())
f.close()
cv2.imwrite('frame.jpg', image)
key = cv2.waitKey(1) & 0xFF
dataBack = calculateShape(image).dumps()
print(str(calculateShape(image))) #conn.send(dataBack + b' ' * (2048 - len(data)))
except KeyboardInterrupt:
pass
finally:
conn.close()
sock.close()
conn.close()
client.py
import socket
from imutils.video import VideoStream
from io import BytesIO
import numpy as np
c = 0
camera = VideoStream(src = 1).start()
sock = socket.socket()
sock.connect(('192.168.2.79', 9091))
while True:
try:
dataSend = BytesIO(camera.read().dumps())
while True:
c+=1
print(c)
data = dataSend.read(1024)
if len(data) == 1024:
sock.send(data)
if len(data) > 0:
sock.send(data + b' ' * (1025 - len(data)))
if not data:
break
except KeyboardInterrupt:
pass
finally:
sock.close()
#dataGet = np.loads(sock.recv(2048).rstrip())
sock.close()
print(data)
Я получил ошибку
Traceback (most recent call last):
File "server.py", line 52, in <module>
image = np.loads(f.read().rstrip())
File "/usr/local/lib/python3.5/dist-packages/numpy/lib/npyio.py", line 44, in loads
return pickle.loads(*args, **kwargs)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x85 in position 884: invalid start byte
Traceback (most recent call last):
File "client.py", line 19, in <module>
sock.send(data)
OSError: [Errno 9] Bad file descriptor
,но программа должна делать все правильно.