| from app.ui.widgets.actions import control_actions | |
| import cv2 | |
| from app.helpers.typing_helper import LayoutDictTypes | |
| SETTINGS_LAYOUT_DATA: LayoutDictTypes = { | |
| 'Appearance': { | |
| 'ThemeSelection': { | |
| 'level': 1, | |
| 'label': 'Theme', | |
| 'options': ['Dark', 'Dark-Blue', 'Light'], | |
| 'default': 'Dark', | |
| 'help': 'Select the theme to be used', | |
| 'exec_function': control_actions.change_theme, | |
| 'exec_function_args': [], | |
| }, | |
| }, | |
| 'General': { | |
| 'ProvidersPrioritySelection': { | |
| 'level': 1, | |
| 'label': 'Providers Priority', | |
| 'options': ['CUDA', 'TensorRT', 'TensorRT-Engine', 'CPU'], | |
| 'default': 'CUDA', | |
| 'help': 'Select the providers priority to be used with the system.', | |
| 'exec_function': control_actions.change_execution_provider, | |
| 'exec_function_args': [], | |
| }, | |
| 'nThreadsSlider': { | |
| 'level': 1, | |
| 'label': 'Number of Threads', | |
| 'min_value': '1', | |
| 'max_value': '30', | |
| 'default': '2', | |
| 'step': 1, | |
| 'help': 'Set number of execution threads while playing and recording. Depends strongly on GPU VRAM.', | |
| 'exec_function': control_actions.change_threads_number, | |
| 'exec_function_args': [], | |
| }, | |
| }, | |
| 'Video Settings': { | |
| 'VideoPlaybackCustomFpsToggle': { | |
| 'level': 1, | |
| 'label': 'Set Custom Video Playback FPS', | |
| 'default': False, | |
| 'help': 'Manually set the FPS to be used when playing the video', | |
| 'exec_function': control_actions.set_video_playback_fps, | |
| 'exec_function_args': [], | |
| }, | |
| 'VideoPlaybackCustomFpsSlider': { | |
| 'level': 2, | |
| 'label': 'Video Playback FPS', | |
| 'min_value': '1', | |
| 'max_value': '120', | |
| 'default': '30', | |
| 'parentToggle': 'VideoPlaybackCustomFpsToggle', | |
| 'requiredToggleValue': True, | |
| 'step': 1, | |
| 'help': 'Set the maximum FPS of the video when playing' | |
| }, | |
| }, | |
| 'Auto Swap':{ | |
| 'AutoSwapToggle': { | |
| 'level': 1, | |
| 'label': 'Auto Swap', | |
| 'default': False, | |
| 'help': 'Automatically Swap all faces using selected Source Faces/Embeddings when loading an video/image file' | |
| }, | |
| }, | |
| 'Detectors': { | |
| 'DetectorModelSelection': { | |
| 'level': 1, | |
| 'label': 'Face Detect Model', | |
| 'options': ['RetinaFace', 'Yolov8', 'SCRFD', 'Yunet'], | |
| 'default': 'RetinaFace', | |
| 'help': 'Select the face detection model to use for detecting faces in the input image or video.' | |
| }, | |
| 'DetectorScoreSlider': { | |
| 'level': 1, | |
| 'label': 'Detect Score', | |
| 'min_value': '1', | |
| 'max_value': '100', | |
| 'default': '50', | |
| 'step': 1, | |
| 'help': 'Set the confidence score threshold for face detection. Higher values ensure more confident detections but may miss some faces.' | |
| }, | |
| 'MaxFacesToDetectSlider': { | |
| 'level': 1, | |
| 'label': 'Max No of Faces to Detect', | |
| 'min_value': '1', | |
| 'max_value': '50', | |
| 'default': '20', | |
| 'step': 1, | |
| 'help': 'Set the maximum number of faces to detect in a frame' | |
| }, | |
| 'AutoRotationToggle': { | |
| 'level': 1, | |
| 'label': 'Auto Rotation', | |
| 'default': False, | |
| 'help': 'Automatically rotate the input to detect faces in various orientations.' | |
| }, | |
| 'ManualRotationEnableToggle': { | |
| 'level': 1, | |
| 'label': 'Manual Rotation', | |
| 'default': False, | |
| 'help': 'Rotate the face detector to better detect faces at different angles.' | |
| }, | |
| 'ManualRotationAngleSlider': { | |
| 'level': 2, | |
| 'label': 'Rotation Angle', | |
| 'min_value': '0', | |
| 'max_value': '270', | |
| 'default': '0', | |
| 'step': 90, | |
| 'parentToggle': 'ManualRotationEnableToggle', | |
| 'requiredToggleValue': True, | |
| 'help': 'Set this to the angle of the input face angle to help with laying down/upside down/etc. Angles are read clockwise.' | |
| }, | |
| 'LandmarkDetectToggle': { | |
| 'level': 1, | |
| 'label': 'Enable Landmark Detection', | |
| 'default': False, | |
| 'help': 'Enable or disable facial landmark detection, which is used to refine face alignment.' | |
| }, | |
| 'LandmarkDetectModelSelection': { | |
| 'level': 2, | |
| 'label': 'Landmark Detect Model', | |
| 'options': ['5', '68', '3d68', '98', '106', '203', '478'], | |
| 'default': '203', | |
| 'parentToggle': 'LandmarkDetectToggle', | |
| 'requiredToggleValue': True, | |
| 'help': 'Select the landmark detection model, where different models detect varying numbers of facial landmarks.' | |
| }, | |
| 'LandmarkDetectScoreSlider': { | |
| 'level': 2, | |
| 'label': 'Landmark Detect Score', | |
| 'min_value': '1', | |
| 'max_value': '100', | |
| 'default': '50', | |
| 'step': 1, | |
| 'parentToggle': 'LandmarkDetectToggle', | |
| 'requiredToggleValue': True, | |
| 'help': 'Set the confidence score threshold for facial landmark detection.' | |
| }, | |
| 'DetectFromPointsToggle': { | |
| 'level': 2, | |
| 'label': 'Detect From Points', | |
| 'default': False, | |
| 'parentToggle': 'LandmarkDetectToggle', | |
| 'requiredToggleValue': True, | |
| 'help': 'Enable detection of faces from specified landmark points.' | |
| }, | |
| 'ShowLandmarksEnableToggle': { | |
| 'level': 1, | |
| 'label': 'Show Landmarks', | |
| 'default': False, | |
| 'help': 'Show Landmarks in realtime.' | |
| }, | |
| 'ShowAllDetectedFacesBBoxToggle': { | |
| 'level': 1, | |
| 'label': 'Show Bounding Boxes', | |
| 'default': False, | |
| 'help': 'Draw bounding boxes to all detected faces in the frame' | |
| } | |
| }, | |
| 'DFM Settings':{ | |
| 'MaxDFMModelsSlider':{ | |
| 'level': 1, | |
| 'label': 'Maximum DFM Models to use', | |
| 'min_value': '1', | |
| 'max_value': '5', | |
| 'default': '1', | |
| 'step': 1, | |
| 'help': "Set the maximum number of DFM Models to keep in memory at a time. Set this based on your GPU's VRAM", | |
| } | |
| }, | |
| 'Frame Enhancer':{ | |
| 'FrameEnhancerEnableToggle':{ | |
| 'level': 1, | |
| 'label': 'Enable Frame Enhancer', | |
| 'default': False, | |
| 'help': 'Enable frame enhancement for video inputs to improve visual quality.' | |
| }, | |
| 'FrameEnhancerTypeSelection':{ | |
| 'level': 2, | |
| 'label': 'Frame Enhancer Type', | |
| 'options': ['RealEsrgan-x2-Plus', 'RealEsrgan-x4-Plus', 'RealEsr-General-x4v3', 'BSRGan-x2', 'BSRGan-x4', 'UltraSharp-x4', 'UltraMix-x4', 'DDColor-Artistic', 'DDColor', 'DeOldify-Artistic', 'DeOldify-Stable', 'DeOldify-Video'], | |
| 'default': 'RealEsrgan-x2-Plus', | |
| 'parentToggle': 'FrameEnhancerEnableToggle', | |
| 'requiredToggleValue': True, | |
| 'help': 'Select the type of frame enhancement to apply, based on the content and resolution requirements.' | |
| }, | |
| 'FrameEnhancerBlendSlider': { | |
| 'level': 2, | |
| 'label': 'Blend', | |
| 'min_value': '0', | |
| 'max_value': '100', | |
| 'default': '100', | |
| 'step': 1, | |
| 'parentToggle': 'FrameEnhancerEnableToggle', | |
| 'requiredToggleValue': True, | |
| 'help': 'Blends the enhanced results back into the original frame.' | |
| }, | |
| }, | |
| 'Webcam Settings': { | |
| 'WebcamMaxNoSelection': { | |
| 'level': 2, | |
| 'label': 'Webcam Max No', | |
| 'options': ['1', '2', '3', '4', '5', '6'], | |
| 'default': '1', | |
| 'help': 'Select the maximum number of webcam streams to allow for face swapping.' | |
| }, | |
| 'WebcamBackendSelection': { | |
| 'level': 2, | |
| 'label': 'Webcam Backend', | |
| 'options': ['Default', 'DirectShow', 'MSMF', 'V4L', 'V4L2', 'GSTREAMER'], | |
| 'default': 'Default', | |
| 'help': 'Choose the backend for accessing webcam input.' | |
| }, | |
| 'WebcamMaxResSelection': { | |
| 'level': 2, | |
| 'label': 'Webcam Resolution', | |
| 'options': ['480x360', '640x480', '1280x720', '1920x1080', '2560x1440', '3840x2160'], | |
| 'default': '1280x720', | |
| 'help': 'Select the maximum resolution for webcam input.' | |
| }, | |
| 'WebCamMaxFPSSelection': { | |
| 'level': 2, | |
| 'label': 'Webcam FPS', | |
| 'options': ['23', '30', '60'], | |
| 'default': '30', | |
| 'help': 'Set the maximum frames per second (FPS) for webcam input.' | |
| }, | |
| }, | |
| 'Virtual Camera': { | |
| 'SendVirtCamFramesEnableToggle': { | |
| 'level': 1, | |
| 'label': 'Send Frames to Virtual Camera', | |
| 'default': False, | |
| 'help': 'Send the swapped video/webcam output to virtual camera for using in external applications', | |
| 'exec_function': control_actions.toggle_virtualcam, | |
| 'exec_function_args': [], | |
| }, | |
| 'VirtCamBackendSelection': { | |
| 'level': 1, | |
| 'label': 'Virtual Camera Backend', | |
| 'options': ['obs', 'unitycapture'], | |
| 'default': 'obs', | |
| 'help': 'Choose the backend based on the Virtual Camera you have set up', | |
| 'parentToggle': 'SendVirtCamFramesEnableToggle', | |
| 'requiredToggleValue': True, | |
| 'exec_function': control_actions.enable_virtualcam, | |
| 'exec_funtion_args': [], | |
| }, | |
| }, | |
| 'Face Recognition': { | |
| 'RecognitionModelSelection': { | |
| 'level': 1, | |
| 'label': 'Recognition Model', | |
| 'options': ['Inswapper128ArcFace', 'SimSwapArcFace', 'GhostArcFace', 'CSCSArcFace'], | |
| 'default': 'Inswapper128ArcFace', | |
| 'help': 'Choose the ArcFace model to be used for comparing the similarity of faces.' | |
| }, | |
| 'SimilarityTypeSelection': { | |
| 'level': 1, | |
| 'label': 'Swapping Similarity Type', | |
| 'options': ['Opal', 'Pearl', 'Optimal'], | |
| 'default': 'Opal', | |
| 'help': 'Choose the type of similarity calculation for face detection and matching during the face swapping process.' | |
| }, | |
| }, | |
| 'Embedding Merge Method':{ | |
| 'EmbMergeMethodSelection':{ | |
| 'level': 1, | |
| 'label': 'Embedding Merge Method', | |
| 'options': ['Mean','Median'], | |
| 'default': 'Mean', | |
| 'help': 'Select the method to merge facial embeddings. "Mean" averages the embeddings, while "Median" selects the middle value, providing more robustness to outliers.' | |
| } | |
| }, | |
| 'Media Selection':{ | |
| 'TargetMediaFolderRecursiveToggle':{ | |
| 'level': 1, | |
| 'label': 'Target Media Include Subfolders', | |
| 'default': False, | |
| 'help': 'Include all files from Subfolders when choosing Target Media Folder' | |
| }, | |
| 'InputFacesFolderRecursiveToggle':{ | |
| 'level': 1, | |
| 'label': 'Input Faces Include Subfolders', | |
| 'default': False, | |
| 'help': 'Include all files from Subfolders when choosing Input Faces Folder' | |
| } | |
| } | |
| } | |
| CAMERA_BACKENDS = { | |
| 'Default': cv2.CAP_ANY, | |
| 'DirectShow': cv2.CAP_DSHOW, | |
| 'MSMF': cv2.CAP_MSMF, | |
| 'V4L': cv2.CAP_V4L, | |
| 'V4L2': cv2.CAP_V4L2, | |
| 'GSTREAMER': cv2.CAP_GSTREAMER, | |
| } |