add modify human render

This commit is contained in:
jiegeaiai 2024-12-04 02:07:18 +08:00
parent e9691dbc81
commit 2a2a3cd349
9 changed files with 52 additions and 28 deletions

View File

@ -48,7 +48,7 @@ class HumanRender(AudioHandler):
logging.info('human render run') logging.info('human render run')
while self._exit_event.is_set() and self._is_running: while self._exit_event.is_set() and self._is_running:
self._run_step() self._run_step()
delay = 0.04 delay = 0.075
time.sleep(delay) time.sleep(delay)
logging.info('human render exit') logging.info('human render exit')

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -38,12 +38,13 @@ class IPCUtil:
self.__ipc_obj.send.restype = c_bool self.__ipc_obj.send.restype = c_bool
send_data = data.encode('utf-8') send_data = data.encode('utf-8')
send_len = len(send_data) + 1 send_len = len(send_data) + 1
return self.__ipc_obj.send(send_data, send_len) if not self.__ipc_obj.send(send_data, send_len):
self.__ipc_obj.reConnect()
return True
def send_binary(self, data, size): def send_binary(self, data, size):
if not self.__init: if not self.__init:
return False return False
print('send_binary', size)
self.__ipc_obj.send.argtypes = [c_char_p, c_uint] self.__ipc_obj.send.argtypes = [c_char_p, c_uint]
self.__ipc_obj.send.restype = c_bool self.__ipc_obj.send.restype = c_bool
data_ptr = cast(data, c_char_p) data_ptr = cast(data, c_char_p)
@ -58,9 +59,9 @@ class IPCUtil:
self.__ipc_obj.setReaderCallback.restype = c_bool self.__ipc_obj.setReaderCallback.restype = c_bool
return self.__ipc_obj.setReaderCallback(self.c_callback) return self.__ipc_obj.setReaderCallback(self.c_callback)
#
# def ipc_log_callback(log, size): # def ipc_log_callback(log, size):
# print(f'log={log}, len={size}') # print(f'log={log.decode("utf-8")}, len={size}')
# #
# #
# util = IPCUtil('ipc_sender', 'ipc_sender') # util = IPCUtil('ipc_sender', 'ipc_sender')

View File

@ -3,6 +3,7 @@
import logging import logging
import os import os
from ui import IpcRender
from utils import config_logging from utils import config_logging
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -12,6 +13,6 @@ if __name__ == '__main__':
config_logging('./logs/info.log', logging.INFO, logging.INFO) config_logging('./logs/info.log', logging.INFO, logging.INFO)
logger.info('------------start------------') logger.info('------------start------------')
ui = PyGameUI() render = IpcRender()
ui.run() render.run()
logger.info('------------finish------------') logger.info('------------finish------------')

View File

@ -1,3 +1,3 @@
#encoding = utf8 #encoding = utf8
from .ipc_render import IpcRender

View File

@ -2,10 +2,12 @@
import os import os
import logging import logging
import time
from queue import Queue from queue import Queue
from human import HumanContext from human import HumanContext
from ipc import IPCUtil from ipc import IPCUtil
from utils import render_image
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
current_file_path = os.path.dirname(os.path.abspath(__file__)) current_file_path = os.path.dirname(os.path.abspath(__file__))
@ -15,35 +17,55 @@ class IpcRender:
def __init__(self): def __init__(self):
self._human_context = None self._human_context = None
self._queue = None self._queue = None
self._ipc = IPCUtil('ipc_sender', 'ipc_sender') self._exit = False
self._ipc = None
def _send_image(self, identifier, image):
height, width, channels = image.shape
width_bytes = width.to_bytes(4, byteorder='little')
height_bytes = height.to_bytes(4, byteorder='little')
bit_depth_bytes = channels.to_bytes(4, byteorder='little')
img_bytes = image.tobytes()
data = identifier + width_bytes + height_bytes + bit_depth_bytes + img_bytes
self._ipc.send_binary(data, len(data))
def _on_reader_callback(self, data_str, size):
data_str = data_str.decode('utf-8')
print(f'on_reader_callback: {data_str}, size:{size}')
if 'quit' == data_str:
self._exit = True
elif 'heartbeat' == data_str:
pass
def run(self): def run(self):
self._queue = Queue() self._queue = Queue()
self._human_context = HumanContext() self._human_context = HumanContext()
self._human_context.build() self._human_context.build()
self._ipc = IPCUtil('human_product', 'human_render')
self._ipc.set_reader_callback(self._on_reader_callback)
logger.info(f'ipc listen:{self._ipc.listen()}')
render = self._human_context.render_handler render = self._human_context.render_handler
render.set_image_render(self) render.set_image_render(self)
while not self._exit:
if not self._queue.empty():
while self._queue.qsize() > 5:
self._queue.get()
print('render queue is slower')
image = self._queue.get()
image = render_image(self._human_context, image)
self._send_image(b'\x01', image)
else:
time.sleep(0.02)
logger.info('ipc render exit')
def stop(self): def stop(self):
pass pass
def get_image(self): def on_render(self, image):
pass self._queue.put(image)
def get_audio(self):
pass
def send_audio(self, audio):
pass
def send_image(self, image):
pass
def send_text(self, text):
pass
def send_command(self, command):
pass
def send_binary(self, data, length):
pass