def onClick(self, pressed): if pressed: print('Started server') self.sender().setText("STOP SERVER") # The grabber of the webcam grabber = video_grabber.VideoGrabber(jpeg_quality, encoder) grabber.start() get_message = lambda: grabber.get_buffer() keep_running = True sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) port = int(self.textbox.text()) # Bind the socket to the port server_address = (host, port) print('starting up on %s port %s\n' % server_address) sock.bind(server_address) ipAddr = socket.gethostbyname(socket.gethostname()) print("Server IP: ", ipAddr) frame_idx = 0 while (keep_running): data, address = sock.recvfrom(4) data = data.decode('utf-8') if (data == "get"): bufferRaw = get_message() buffer = b64encode(bufferRaw) frame_idx += 1 # print("Rec: ", data, " Frame: ", str(frame_idx), " Buff size", len(buffer), " b64: ", buffer[0], buffer[1], buffer[2], # bufferRaw[0], bufferRaw[1], bufferRaw[2], type(buffer)) if buffer is None: continue if len(buffer) > 65507: print( "The message is too large to be sent within a single UDP datagram. We do not handle splitting the message in multiple datagrams") sock.sendto("FAIL".encode('utf-8'), address) continue # We send back the buffer to the client sock.sendto(buffer, address) elif (data == "quit"): grabber.stop() keep_running = False print("Quitting..") grabber.join() sock.close() else: print('Disconnected') self.sender().setText("START SERVER")
"--encoder", type=str, choices=["cv2", "turbo"], help="Which library to use to encode/decode in JPEG the images", default="cv2", ) args = parser.parse_args() jpeg_quality = args.jpeg_quality host = "127.0.0.1" port = args.port encoder = args.encoder # The grabber of the webcam grabber = video_grabber.VideoGrabber(jpeg_quality, encoder) grabber.start() get_message = lambda: grabber.get_buffer() keep_running = True sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # Bind the socket to the port server_address = (host, port) print("starting up on %s port %s\n" % server_address) sock.bind(server_address) while keep_running: data, address = sock.recvfrom(4)
encoder = args.encoder # Create a UDP socket sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.settimeout(2.0) host = args.host port = args.port server_address = (host, port) # sock.bind(('127.0.0.1', 5000)) t0 = time.time() frame_idx = 0 iter = 0 grabber = video_grabber.VideoGrabber(jpeg_quality) grabber.start() get_message = lambda: grabber.get_buffer() while (True): iter += 1 buffer = get_message() if buffer is None: continue if len(buffer) > 65507: print( "The message is too large to be sent within a single UDP datagram. We do not handle splitting the message in multiple datagrams" ) sock.sendto("FAIL".encode('utf-8'), server_address) continue
port = args.port jpeg_quality = args.jpeg_quality resize_factor = args.resize cv2.namedWindow("Image") keep_running = True jpeg_handler = utils.make_jpeg_handler(args.encoder, jpeg_quality) if args.image is not None: grabber = None img = cv2.imread(args.image, cv2.IMREAD_UNCHANGED) get_buffer = functools.partial(jpeg_handler.compress, cv2_img=img) else: grabber = video_grabber.VideoGrabber(jpeg_quality, args.encoder, resize_factor) grabber.start() get_buffer = grabber.get_buffer # img = cv2.imread("monarch.png", cv2.IMREAD_UNCHANGED) # get_buffer = lambda: utils.encode_image(img, jpeg, jpeg_quality) # A temporary buffer in which the received data will be copied # this prevents creating a new buffer all the time tmp_buf = bytearray(7) # this allows to get a reference to a slice of tmp_buf tmp_view = memoryview(tmp_buf) # Creates a temporary buffer which can hold the largest image we can transmit img_buf = bytearray(9999999) img_view = memoryview(img_buf)