Я пытаюсь создать какой-то общий экран с сокетом python. Проблема в том, что изображения на моем экране очень большие (3 110 482 байта), и сокету требуется много времени для их отправки на сервер. Чтобы сделать отправку более эффективной, я снизил разрешение отправляемых изображений, но этого недостаточно. Поэтому мне нужно сделать процесс отправки более эффективным.
Вот функция, которая снимает изображения моего экрана:
import numpy as np # for array manipulation
import pyautogui # for recording images of the screen
import cv2 # for change the resolution of the images
from screeninfo import get_monitors # for getting the screen size
def get_screen_img(): # take an image of the screen and return it
img = pyautogui.screenshot() # take a screenshot
img = np.array(img) # convert to numpy array
monitor = get_monitors()[0] # get info on the screen monitor
# lowered the resolution by half
img = cv2.resize(img, dsize=(monitor.width//2, monitor.height//2), interpolation=cv2.INTER_CUBIC)
# do some manipulation for seeing the image right
img = np.fliplr(img) # flip the image array
img = np.rot90(img) # rotate the image array in 90 degrees
return img # return the image
Вот функция, которая отправляет изображения:
import socket # for sending data
import pickle # for converting any kind of data to bytes
def send_image(): # send a message
# send the image and the type because I am sending more than just images so I need to tell the server what kind of info it gets
msg = {"type": "image", "content": get_screen_img()}
msg = pickle.dumps(msg) # convert the message to bytes
cSocket.send(msg) # send the msg
Редактировать: Я на 99% уверен, что проблема в размере сообщения. Когда я уменьшил разрешение, оно работает нормально, но мне нужно отправлять изображения в нормальном разрешении.