Я пытаюсь отправить изображение с IOS на сервер Python с помощью сокетов.
Вот код для отправки данных с клиента iOS на сервер Python
// Function to capture the frames again and again
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
if varCONNECT_STATUS {
guard let uiImage = self.imageFromSampleBuffer(sampleBuffer: sampleBuffer) else { return }
let imageData = uiImage.pngData()
sendData = imageData?.base64EncodedData()
let uData = sendData?.withUnsafeBytes({
(buffer:UnsafePointer<UInt8>?) -> UnsafePointer<UInt8> in return buffer!.advanced(by: 0)
})
// Send the data to the OUTPUT STREAM
outputStream?.write(uData!, maxLength: sendData!.count)
DispatchQueue.main.async {
self.colorLabel.text = varRECEIVED
}
}
}
IOS отправляетданные непрерывно, но на стороне получателя сервер не может получить изображение.Пытался просмотреть изображение с помощью cv2.imshow (), но всегда получал черный экран или только первый кадр.Кто-нибудь может помочь решить ??
Код Python-сервера для получения изображений:
import socket
import sys
import cv2
import numpy
import struct ## new
from detect_colors import color_detection
import base64
import io
from PIL import Image,ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True
HOST='0.0.0.0'
PORT=5007
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
print('Socket created')
s.bind((HOST,PORT))
print('Socket bind complete')
s.listen(10)
print('Socket now listening')
conn,addr=s.accept()
data = b""
payload_size = struct.calcsize(">L")
while True:
while len(data) < payload_size:
print("Recv: {}".format(len(data)))
data += conn.recv(4096)
print("Done Recv: {}".format(len(data)))
packed_msg_size = data[:payload_size]
data = data[payload_size:]
msg_size = struct.unpack(">L", packed_msg_size)[0]
print(len(data)," - ",msg_size)
while len(data) < msg_size:
data += conn.recv(4096)
frame_data = data[:msg_size]
data = data[msg_size:]
result = {}
try:
image = Image.open(io.BytesIO(base64.b64decode(frame_data))).convert('RGB')
image = numpy.array(image)
image = image[:, :, ::-1].copy()
cv2.imshow("Frame",image)
cv2.waitKey(1)
print(type(image))
result= color_detection(image) # UFD to identify color
print(result)
if "color" not in result.keys():
result["color"]=" "
except Exception as e:
print(str(e))
result["color"]=" "
conn.send(result["color"].encode())