@ -26,6 +26,7 @@ from modules.utilities import (
has_image_extension ,
)
from modules . video_capture import VideoCapturer
from modules . gettext import LanguageManager
import platform
if platform . system ( ) == " Windows " :
@ -63,6 +64,7 @@ RECENT_DIRECTORY_SOURCE = None
RECENT_DIRECTORY_TARGET = None
RECENT_DIRECTORY_OUTPUT = None
_ = None
preview_label = None
preview_slider = None
source_label = None
@ -77,9 +79,11 @@ target_label_dict_live = {}
img_ft , vid_ft = modules . globals . file_types
def init ( start : Callable [ [ ] , None ] , destroy : Callable [ [ ] , None ] ) - > ctk . CTk :
global ROOT , PREVIEW
def init ( start : Callable [ [ ] , None ] , destroy : Callable [ [ ] , None ] , lang : str ) - > ctk . CTk :
global ROOT , PREVIEW , _
lang_manager = LanguageManager ( lang )
_ = lang_manager . _
ROOT = create_root ( start , destroy )
PREVIEW = create_preview ( ROOT )
@ -154,7 +158,7 @@ def create_root(start: Callable[[], None], destroy: Callable[[], None]) -> ctk.C
target_label . place ( relx = 0.6 , rely = 0.1 , relwidth = 0.3 , relheight = 0.25 )
select_face_button = ctk . CTkButton (
root , text = " Select a face " , cursor = " hand2 " , command = lambda : select_source_path ( )
root , text = _ ( " Select a face " ) , cursor = " hand2 " , command = lambda : select_source_path ( )
)
select_face_button . place ( relx = 0.1 , rely = 0.4 , relwidth = 0.3 , relheight = 0.1 )
@ -165,7 +169,7 @@ def create_root(start: Callable[[], None], destroy: Callable[[], None]) -> ctk.C
select_target_button = ctk . CTkButton (
root ,
text = " Select a target " ,
text = _ ( " Select a target " ) ,
cursor = " hand2 " ,
command = lambda : select_target_path ( ) ,
)
@ -174,7 +178,7 @@ def create_root(start: Callable[[], None], destroy: Callable[[], None]) -> ctk.C
keep_fps_value = ctk . BooleanVar ( value = modules . globals . keep_fps )
keep_fps_checkbox = ctk . CTkSwitch (
root ,
text = " Keep fps " ,
text = _ ( " Keep fps " ) ,
variable = keep_fps_value ,
cursor = " hand2 " ,
command = lambda : (
@ -187,7 +191,7 @@ def create_root(start: Callable[[], None], destroy: Callable[[], None]) -> ctk.C
keep_frames_value = ctk . BooleanVar ( value = modules . globals . keep_frames )
keep_frames_switch = ctk . CTkSwitch (
root ,
text = " Keep frames " ,
text = _ ( " Keep frames " ) ,
variable = keep_frames_value ,
cursor = " hand2 " ,
command = lambda : (
@ -200,7 +204,7 @@ def create_root(start: Callable[[], None], destroy: Callable[[], None]) -> ctk.C
enhancer_value = ctk . BooleanVar ( value = modules . globals . fp_ui [ " face_enhancer " ] )
enhancer_switch = ctk . CTkSwitch (
root ,
text = " Face Enhancer " ,
text = _ ( " Face Enhancer " ) ,
variable = enhancer_value ,
cursor = " hand2 " ,
command = lambda : (
@ -213,7 +217,7 @@ def create_root(start: Callable[[], None], destroy: Callable[[], None]) -> ctk.C
keep_audio_value = ctk . BooleanVar ( value = modules . globals . keep_audio )
keep_audio_switch = ctk . CTkSwitch (
root ,
text = " Keep audio " ,
text = _ ( " Keep audio " ) ,
variable = keep_audio_value ,
cursor = " hand2 " ,
command = lambda : (
@ -226,7 +230,7 @@ def create_root(start: Callable[[], None], destroy: Callable[[], None]) -> ctk.C
many_faces_value = ctk . BooleanVar ( value = modules . globals . many_faces )
many_faces_switch = ctk . CTkSwitch (
root ,
text = " Many faces " ,
text = _ ( " Many faces " ) ,
variable = many_faces_value ,
cursor = " hand2 " ,
command = lambda : (
@ -239,7 +243,7 @@ def create_root(start: Callable[[], None], destroy: Callable[[], None]) -> ctk.C
color_correction_value = ctk . BooleanVar ( value = modules . globals . color_correction )
color_correction_switch = ctk . CTkSwitch (
root ,
text = " Fix Blueish Cam " ,
text = _ ( " Fix Blueish Cam " ) ,
variable = color_correction_value ,
cursor = " hand2 " ,
command = lambda : (
@ -256,7 +260,7 @@ def create_root(start: Callable[[], None], destroy: Callable[[], None]) -> ctk.C
map_faces = ctk . BooleanVar ( value = modules . globals . map_faces )
map_faces_switch = ctk . CTkSwitch (
root ,
text = " Map faces " ,
text = _ ( " Map faces " ) ,
variable = map_faces ,
cursor = " hand2 " ,
command = lambda : (
@ -270,7 +274,7 @@ def create_root(start: Callable[[], None], destroy: Callable[[], None]) -> ctk.C
show_fps_value = ctk . BooleanVar ( value = modules . globals . show_fps )
show_fps_switch = ctk . CTkSwitch (
root ,
text = " Show FPS " ,
text = _ ( " Show FPS " ) ,
variable = show_fps_value ,
cursor = " hand2 " ,
command = lambda : (
@ -283,7 +287,7 @@ def create_root(start: Callable[[], None], destroy: Callable[[], None]) -> ctk.C
mouth_mask_var = ctk . BooleanVar ( value = modules . globals . mouth_mask )
mouth_mask_switch = ctk . CTkSwitch (
root ,
text = " Mouth Mask " ,
text = _ ( " Mouth Mask " ) ,
variable = mouth_mask_var ,
cursor = " hand2 " ,
command = lambda : setattr ( modules . globals , " mouth_mask " , mouth_mask_var . get ( ) ) ,
@ -293,7 +297,7 @@ def create_root(start: Callable[[], None], destroy: Callable[[], None]) -> ctk.C
show_mouth_mask_box_var = ctk . BooleanVar ( value = modules . globals . show_mouth_mask_box )
show_mouth_mask_box_switch = ctk . CTkSwitch (
root ,
text = " Show Mouth Mask Box " ,
text = _ ( " Show Mouth Mask Box " ) ,
variable = show_mouth_mask_box_var ,
cursor = " hand2 " ,
command = lambda : setattr (
@ -303,22 +307,22 @@ def create_root(start: Callable[[], None], destroy: Callable[[], None]) -> ctk.C
show_mouth_mask_box_switch . place ( relx = 0.6 , rely = 0.55 )
start_button = ctk . CTkButton (
root , text = " Start " , cursor = " hand2 " , command = lambda : analyze_target ( start , root )
root , text = _ ( " Start " ) , cursor = " hand2 " , command = lambda : analyze_target ( start , root )
)
start_button . place ( relx = 0.15 , rely = 0.80 , relwidth = 0.2 , relheight = 0.05 )
stop_button = ctk . CTkButton (
root , text = " Destroy " , cursor = " hand2 " , command = lambda : destroy ( )
root , text = _ ( " Destroy " ) , cursor = " hand2 " , command = lambda : destroy ( )
)
stop_button . place ( relx = 0.4 , rely = 0.80 , relwidth = 0.2 , relheight = 0.05 )
preview_button = ctk . CTkButton (
root , text = " Preview " , cursor = " hand2 " , command = lambda : toggle_preview ( )
root , text = _ ( " Preview " ) , cursor = " hand2 " , command = lambda : toggle_preview ( )
)
preview_button . place ( relx = 0.65 , rely = 0.80 , relwidth = 0.2 , relheight = 0.05 )
# --- Camera Selection ---
camera_label = ctk . CTkLabel ( root , text = " Select Camera: " )
camera_label = ctk . CTkLabel ( root , text = _ ( " Select Camera: " ) )
camera_label . place ( relx = 0.1 , rely = 0.86 , relwidth = 0.2 , relheight = 0.05 )
available_cameras = get_available_cameras ( )
@ -342,7 +346,7 @@ def create_root(start: Callable[[], None], destroy: Callable[[], None]) -> ctk.C
live_button = ctk . CTkButton (
root ,
text = " Live " ,
text = _ ( " Live " ) ,
cursor = " hand2 " ,
command = lambda : webcam_preview (
root ,
@ -416,7 +420,7 @@ def create_source_target_popup(
global POPUP , popup_status_label
POPUP = ctk . CTkToplevel ( root )
POPUP . title ( " Source x Target Mapper " )
POPUP . title ( _ ( " Source x Target Mapper " ) )
POPUP . geometry ( f " { POPUP_WIDTH } x { POPUP_HEIGHT } " )
POPUP . focus ( )
@ -440,7 +444,7 @@ def create_source_target_popup(
button = ctk . CTkButton (
scrollable_frame ,
text = " Select source image " ,
text = _ ( " Select source image " ) ,
command = lambda id = id : on_button_click ( map , id ) ,
width = DEFAULT_BUTTON_WIDTH ,
height = DEFAULT_BUTTON_HEIGHT ,
@ -474,7 +478,7 @@ def create_source_target_popup(
popup_status_label . grid ( row = 1 , column = 0 , pady = 15 )
close_button = ctk . CTkButton (
POPUP , text = " Submit " , command = lambda : on_submit_click ( start )
POPUP , text = _ ( " Submit " ) , command = lambda : on_submit_click ( start )
)
close_button . grid ( row = 2 , column = 0 , pady = 10 )
@ -485,7 +489,7 @@ def update_popup_source(
global source_label_dict
source_path = ctk . filedialog . askopenfilename (
title = " select an source image " ,
title = _ ( " select an source image " ) ,
initialdir = RECENT_DIRECTORY_SOURCE ,
filetypes = [ img_ft ] ,
)
@ -536,7 +540,7 @@ def create_preview(parent: ctk.CTkToplevel) -> ctk.CTkToplevel:
preview = ctk . CTkToplevel ( parent )
preview . withdraw ( )
preview . title ( " Preview " )
preview . title ( _ ( " Preview " ) )
preview . configure ( )
preview . protocol ( " WM_DELETE_WINDOW " , lambda : toggle_preview ( ) )
preview . resizable ( width = True , height = True )
@ -552,16 +556,16 @@ def create_preview(parent: ctk.CTkToplevel) -> ctk.CTkToplevel:
def update_status ( text : str ) - > None :
status_label . configure ( text = text)
status_label . configure ( text = _( text) )
ROOT . update ( )
def update_pop_status ( text : str ) - > None :
popup_status_label . configure ( text = text)
popup_status_label . configure ( text = _( text) )
def update_pop_live_status ( text : str ) - > None :
popup_status_label_live . configure ( text = text)
popup_status_label_live . configure ( text = _( text) )
def update_tumbler ( var : str , value : bool ) - > None :
@ -580,7 +584,7 @@ def select_source_path() -> None:
PREVIEW . withdraw ( )
source_path = ctk . filedialog . askopenfilename (
title = " select an source image " ,
title = _ ( " select an source image " ) ,
initialdir = RECENT_DIRECTORY_SOURCE ,
filetypes = [ img_ft ] ,
)
@ -623,7 +627,7 @@ def select_target_path() -> None:
PREVIEW . withdraw ( )
target_path = ctk . filedialog . askopenfilename (
title = " select an target image or video " ,
title = _ ( " select an target image or video " ) ,
initialdir = RECENT_DIRECTORY_TARGET ,
filetypes = [ img_ft , vid_ft ] ,
)
@ -647,7 +651,7 @@ def select_output_path(start: Callable[[], None]) -> None:
if is_image ( modules . globals . target_path ) :
output_path = ctk . filedialog . asksaveasfilename (
title = " save image output file " ,
title = _ ( " save image output file " ) ,
filetypes = [ img_ft ] ,
defaultextension = " .png " ,
initialfile = " output.png " ,
@ -655,7 +659,7 @@ def select_output_path(start: Callable[[], None]) -> None:
)
elif is_video ( modules . globals . target_path ) :
output_path = ctk . filedialog . asksaveasfilename (
title = " save video output file " ,
title = _ ( " save video output file " ) ,
filetypes = [ vid_ft ] ,
defaultextension = " .mp4 " ,
initialfile = " output.mp4 " ,
@ -958,7 +962,7 @@ def create_source_target_popup_for_webcam(
global POPUP_LIVE , popup_status_label_live
POPUP_LIVE = ctk . CTkToplevel ( root )
POPUP_LIVE . title ( " Source x Target Mapper " )
POPUP_LIVE . title ( _ ( " Source x Target Mapper " ) )
POPUP_LIVE . geometry ( f " { POPUP_LIVE_WIDTH } x { POPUP_LIVE_HEIGHT } " )
POPUP_LIVE . focus ( )
@ -983,14 +987,14 @@ def create_source_target_popup_for_webcam(
popup_status_label_live = ctk . CTkLabel ( POPUP_LIVE , text = None , justify = " center " )
popup_status_label_live . grid ( row = 1 , column = 0 , pady = 15 )
add_button = ctk . CTkButton ( POPUP_LIVE , text = " Add " , command = lambda : on_add_click ( ) )
add_button = ctk . CTkButton ( POPUP_LIVE , text = _ ( " Add " ) , command = lambda : on_add_click ( ) )
add_button . place ( relx = 0.1 , rely = 0.92 , relwidth = 0.2 , relheight = 0.05 )
clear_button = ctk . CTkButton ( POPUP_LIVE , text = " Clear " , command = lambda : on_clear_click ( ) )
clear_button = ctk . CTkButton ( POPUP_LIVE , text = _ ( " Clear " ) , command = lambda : on_clear_click ( ) )
clear_button . place ( relx = 0.4 , rely = 0.92 , relwidth = 0.2 , relheight = 0.05 )
close_button = ctk . CTkButton (
POPUP_LIVE , text = " Submit " , command = lambda : on_submit_click ( )
POPUP_LIVE , text = _ ( " Submit " ) , command = lambda : on_submit_click ( )
)
close_button . place ( relx = 0.7 , rely = 0.92 , relwidth = 0.2 , relheight = 0.05 )
@ -1033,7 +1037,7 @@ def refresh_data(map: list):
button = ctk . CTkButton (
scrollable_frame ,
text = " Select source image " ,
text = _ ( " Select source image " ) ,
command = lambda id = id : on_sbutton_click ( map , id ) ,
width = DEFAULT_BUTTON_WIDTH ,
height = DEFAULT_BUTTON_HEIGHT ,
@ -1050,7 +1054,7 @@ def refresh_data(map: list):
button = ctk . CTkButton (
scrollable_frame ,
text = " Select target image " ,
text = _ ( " Select target image " ) ,
command = lambda id = id : on_tbutton_click ( map , id ) ,
width = DEFAULT_BUTTON_WIDTH ,
height = DEFAULT_BUTTON_HEIGHT ,
@ -1100,7 +1104,7 @@ def update_webcam_source(
global source_label_dict_live
source_path = ctk . filedialog . askopenfilename (
title = " select an source image " ,
title = _ ( " select an source image " ) ,
initialdir = RECENT_DIRECTORY_SOURCE ,
filetypes = [ img_ft ] ,
)
@ -1152,7 +1156,7 @@ def update_webcam_target(
global target_label_dict_live
target_path = ctk . filedialog . askopenfilename (
title = " select an target image " ,
title = _ ( " select an target image " ) ,
initialdir = RECENT_DIRECTORY_SOURCE ,
filetypes = [ img_ft ] ,
)
@ -1195,4 +1199,4 @@ def update_webcam_target(
target_label_dict_live [ button_num ] = target_image
else :
update_pop_live_status ( " Face could not be detected in last upload! " )
return map
return map