Не удается получить изображение на сервере сокетов Python, отправленное с клиента IOS в Swift - PullRequest
1 голос
/ 23 сентября 2019

Я пытаюсь отправить изображение с 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())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...