diff --git a/args.py b/args.py index 34505de..de7a279 100644 --- a/args.py +++ b/args.py @@ -20,7 +20,7 @@ parser.add_argument('--output_webcam', type=str) parser.add_argument('--output_size', type=str, default='256x256') parser.add_argument('--debug_input', action='store_true') parser.add_argument('--mouse_input', type=str) -parser.add_argument('--perf', action='store_true') +parser.add_argument('--perf', type=str) parser.add_argument('--skip_model', action='store_true') parser.add_argument('--ifm', type=str) parser.add_argument('--anime4k', action='store_true') diff --git a/main.py b/main.py index 59caebb..07cb023 100644 --- a/main.py +++ b/main.py @@ -28,9 +28,17 @@ from tha2.mocap.ifacialmocap_constants import * from args import args +from tha3.util import torch_linear_to_srgb, resize_PIL_image, extract_PIL_image_from_filelike, \ + extract_pytorch_image_from_PIL_image + import collections +def convert_linear_to_srgb(image: torch.Tensor) -> torch.Tensor: + rgb_image = torch_linear_to_srgb(image[0:3, :, :]) + return torch.cat([rgb_image, image[3:4, :, :]], dim=0) + + class FPS: def __init__(self, avarageof=50): self.frametimestamps = collections.deque(maxlen=avarageof) @@ -173,32 +181,31 @@ class MouseClientProcess(Process): 'z_angle': 0, } while True: - pos=mouse.position + pos = mouse.position # print(pos) - eye_limit=[0.8,0.5] - head_eye_reduce=0.6 - head_slowness=0.2 + eye_limit = [0.8, 0.5] + head_eye_reduce = 0.6 + head_slowness = 0.2 mouse_data = { 'eye_l_h_temp': 0, 'eye_r_h_temp': 0, 'mouth_ratio': 0, - 'eye_y_ratio': np.interp(pos[1],[posLimit[1],posLimit[3]],[1,-1])*eye_limit[1], - 'eye_x_ratio': np.interp(pos[0],[posLimit[0],posLimit[2]],[1,-1])*eye_limit[0], - 'x_angle': np.interp(pos[1],[posLimit[1],posLimit[3]],[1,-1]), - 'y_angle': np.interp(pos[0],[posLimit[0],posLimit[2]],[1,-1]), + 'eye_y_ratio': np.interp(pos[1], [posLimit[1], posLimit[3]], [1, -1]) * eye_limit[1], + 'eye_x_ratio': np.interp(pos[0], [posLimit[0], posLimit[2]], [1, -1]) * eye_limit[0], + 'x_angle': np.interp(pos[1], [posLimit[1], posLimit[3]], [1, -1]), + 'y_angle': np.interp(pos[0], [posLimit[0], posLimit[2]], [1, -1]), 'z_angle': 0, } - mouse_data['x_angle']=np.interp(head_slowness,[0,1],[prev['x_angle'],mouse_data['x_angle']]) - mouse_data['y_angle']=np.interp(head_slowness,[0,1],[prev['y_angle'],mouse_data['y_angle']]) - mouse_data['eye_y_ratio']-=mouse_data['x_angle']*eye_limit[1]*head_eye_reduce - mouse_data['eye_x_ratio']-=mouse_data['y_angle']*eye_limit[0]*head_eye_reduce + mouse_data['x_angle'] = np.interp(head_slowness, [0, 1], [prev['x_angle'], mouse_data['x_angle']]) + mouse_data['y_angle'] = np.interp(head_slowness, [0, 1], [prev['y_angle'], mouse_data['y_angle']]) + mouse_data['eye_y_ratio'] -= mouse_data['x_angle'] * eye_limit[1] * head_eye_reduce + mouse_data['eye_x_ratio'] -= mouse_data['y_angle'] * eye_limit[0] * head_eye_reduce if args.bongo: - mouse_data['y_angle']+=0.05 - mouse_data['x_angle']+=0.05 - prev=mouse_data + mouse_data['y_angle'] += 0.05 + mouse_data['x_angle'] += 0.05 + prev = mouse_data self.queue.put_nowait(mouse_data) - time.sleep(1/60) - + time.sleep(1 / 60) class ModelClientProcess(Process): @@ -352,14 +359,14 @@ class ModelClientProcess(Process): cached = model_cache.get(input_hash) tot += 1 mouth_eye_vector_c = [0.0] * 27 - if cached is not None and hit_in_a_row