from dotenv import load_dotenv, find_dotenv import os import zerorpc import gevent import time from io import BytesIO import base64 from PIL import Image load_dotenv(find_dotenv()) class CortexRPC(object): def __init__(self, fn): super().__init__() self._listener = fn self.connect() def connect(self): print("Connecting to RPC on port {}".format(os.getenv('RPC_PORT'))) self.rpc = zerorpc.Server(self) self.rpc.bind("tcp://127.0.0.1:" + os.getenv('RPC_PORT')) gevent.spawn(self.connected) self.rpc.run() def connected(self): print("RPC running on port {}".format(os.getenv('RPC_PORT'))) print("Connecting to Relay on port {}".format(os.getenv('RELAY_PORT'))) self.relay = zerorpc.Client() self.relay.connect("tcp://127.0.0.1:" + os.getenv('RELAY_PORT')) val = None try: val = self.relay.connected("rpc") print("RPC connected...".format(val)) except zerorpc.TimeoutExpired: print("RPC timeout :(") return val # print("defer sending a file...") # gevent.sleep(1) # return self.get_last_frame() def get_last_frame(self): # self.send_frame("test.png", '01234567' * 8 * 8 * 8 * 8 * 2) from os import listdir from os.path import isfile, join path = '/Users/user/Desktop/woods_videos/test_clahe_brightness_posterize_256/' onlyfiles = sorted([f for f in listdir(path) if isfile(join(path, f))]) # im = Image.open(join(path, onlyfiles[0])) # for f in onlyfiles: # gevent.sleep(1/29) # output = BytesIO() # im.save(output, format="JPEG") # frame = base64.b64encode(output.getvalue()) # output.close() # self.send_frame(f, frame) for f in onlyfiles: gevent.sleep(1/30) output = BytesIO() im = Image.open(join(path, f)) # im = im.convert('RGB') im.save(output, format="JPEG") frame = output.getvalue() output.close() self.send_frame(f.replace('png', 'jpg'), frame) return "ok" def send_param(self, key, value): print("aloha. {}: {}".format(key, value)) if self._listener is not None: self._listener(key, value) else: print("No listener provided to CortexRPC") return "ok" def get_params(self): print("Get params call received!") return "lmao ok" def send_frame(self, fn, frame): if self.relay is not None: # print("Send frame " + fn) self.relay.send_frame(fn, frame) else: print("Can't send frame, relay not ready...") if __name__ == '__main__': def log_param(key, value): print("Log param. {}: {}".format(key, value)) # this will block rpc = CortexRPC(log_param)