diff --git a/src/main.py b/src/main.py index d6f28f8..381534d 100644 --- a/src/main.py +++ b/src/main.py @@ -8,7 +8,8 @@ from .utils.channel_shared_mem import SharedMemoryExclusiveChannel from multiprocessing import shared_memory from .utils.timer_wait import wait_until from PIL import Image - +from .utils.fps import FPS +import pyvirtualcam def main(): @@ -79,7 +80,16 @@ def main(): last_time : float = time.perf_counter() interval : float = 1.0 / args.frame_rate_limit if args.frame_rate_limit > 0 else 0.0 - from .utils.fps import FPS + if args.output_virtual_cam: + virtual_cam = pyvirtualcam.Camera(width=cam_width_scale * args.model_output_size, + height=args.model_output_size, + fps=args.frame_rate_limit, + backend='obs', + fmt=pyvirtualcam.PixelFormat.RGB) + print(f'Using virtual camera: {virtual_cam.device}') + else: + print("Using OpenCV windows for output display.") + pipeline_fps = FPS() print("Interval set to {:.3f} seconds".format(interval)) @@ -93,7 +103,7 @@ def main(): last_time += interval if args.output_virtual_cam: - pass + virtual_cam.send(np_ret_shms[i]) else: cv2.imshow("Output Frame Batch {}".format(i), np_ret_shms[i]) cv2.waitKey(1) @@ -102,8 +112,8 @@ def main(): infer_process.pipeline_fps_number.value, input_fps.value, infer_process.average_model_interval.value * 1000, - infer_process.cache_hit_ratio.value, - infer_process.gpu_cache_hit_ratio.value, + infer_process.cache_hit_ratio.value * 100, + infer_process.gpu_cache_hit_ratio.value * 100, pipeline_fps() ), end ='\r', flush=True) diff --git a/src/model_infer_client.py b/src/model_infer_client.py index 4d2a6c0..74ccda1 100644 --- a/src/model_infer_client.py +++ b/src/model_infer_client.py @@ -199,6 +199,10 @@ class ModelClientProcess(Process): bgr_channels = cv2.cvtColor(bgra_image, cv2.COLOR_BGRA2BGR) ret.append(bgr_channels) elif args.output_virtual_cam: + if rgb_channels is None: + rgb_channels = cv2.cvtColor(bgra_image, cv2.COLOR_BGRA2RGB) + if args.anime4k and not args.alpha_split: + rgb_channels = cv2.cvtColor(rgba_image, cv2.COLOR_RGBA2RGB) ret.append(rgb_channels) else: ret.append(rgba_image)