mirror of
https://github.com/deepfakes/faceswap
synced 2025-06-06 17:45:56 -04:00
Deprecate multi-character cli switches
This commit is contained in:
parent
64a7b5812e
commit
95b4431c57
99 changed files with 7978 additions and 6338 deletions
|
@ -111,6 +111,13 @@ menu module
|
|||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
options module
|
||||
==============
|
||||
.. automodule:: lib.gui.options
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
popup_configure module
|
||||
======================
|
||||
.. automodule:: lib.gui.popup_configure
|
||||
|
|
12
faceswap.py
12
faceswap.py
|
@ -10,6 +10,8 @@ if sys.platform.startswith("win"):
|
|||
os.environ["LANG"], _ = locale.getdefaultlocale()
|
||||
|
||||
from lib.cli import args as cli_args # pylint:disable=wrong-import-position
|
||||
from lib.cli.args_train import TrainArgs # pylint:disable=wrong-import-position
|
||||
from lib.cli.args_extract_convert import ConvertArgs, ExtractArgs # noqa:E501 pylint:disable=wrong-import-position
|
||||
from lib.config import generate_configs # pylint:disable=wrong-import-position
|
||||
|
||||
# LOCALES
|
||||
|
@ -41,11 +43,11 @@ def _main() -> None:
|
|||
generate_configs()
|
||||
|
||||
subparser = _PARSER.add_subparsers()
|
||||
cli_args.ExtractArgs(subparser, "extract", _("Extract the faces from pictures or a video"))
|
||||
cli_args.TrainArgs(subparser, "train", _("Train a model for the two faces A and B"))
|
||||
cli_args.ConvertArgs(subparser,
|
||||
"convert",
|
||||
_("Convert source pictures or video to a new one with the face swapped"))
|
||||
ExtractArgs(subparser, "extract", _("Extract the faces from pictures or a video"))
|
||||
TrainArgs(subparser, "train", _("Train a model for the two faces A and B"))
|
||||
ConvertArgs(subparser,
|
||||
"convert",
|
||||
_("Convert source pictures or video to a new one with the face swapped"))
|
||||
cli_args.GuiArgs(subparser, "gui", _("Launch the Faceswap Graphical User Interface"))
|
||||
_PARSER.set_defaults(func=_bad_args)
|
||||
arguments = _PARSER.parse_args()
|
||||
|
|
1044
lib/cli/args.py
1044
lib/cli/args.py
File diff suppressed because it is too large
Load diff
743
lib/cli/args_extract_convert.py
Normal file
743
lib/cli/args_extract_convert.py
Normal file
|
@ -0,0 +1,743 @@
|
|||
#!/usr/bin/env python3
|
||||
""" The Command Line Argument options for extracting and converting with faceswap.py """
|
||||
import argparse
|
||||
import gettext
|
||||
import typing as T
|
||||
|
||||
from lib.utils import get_backend
|
||||
from plugins.plugin_loader import PluginLoader
|
||||
|
||||
from .actions import (DirFullPaths, DirOrFileFullPaths, DirOrFilesFullPaths, FileFullPaths,
|
||||
FilesFullPaths, MultiOption, Radio, Slider)
|
||||
from .args import FaceSwapArgs
|
||||
|
||||
|
||||
# LOCALES
|
||||
_LANG = gettext.translation("lib.cli.args_extract_convert", localedir="locales", fallback=True)
|
||||
_ = _LANG.gettext
|
||||
|
||||
|
||||
class ExtractConvertArgs(FaceSwapArgs):
|
||||
""" Parent class to capture arguments that will be used in both extract and convert processes.
|
||||
|
||||
Extract and Convert share a fair amount of arguments, so arguments that can be used in both of
|
||||
these processes should be placed here.
|
||||
|
||||
No further processing is done in this class (this is handled by the children), this just
|
||||
captures the shared arguments.
|
||||
"""
|
||||
|
||||
@staticmethod
|
||||
def get_argument_list() -> list[dict[str, T.Any]]:
|
||||
""" Returns the argument list for shared Extract and Convert arguments.
|
||||
|
||||
Returns
|
||||
-------
|
||||
list
|
||||
The list of command line options for the given Extract and Convert
|
||||
"""
|
||||
argument_list: list[dict[str, T.Any]] = []
|
||||
argument_list.append({
|
||||
"opts": ("-i", "--input-dir"),
|
||||
"action": DirOrFileFullPaths,
|
||||
"filetypes": "video",
|
||||
"dest": "input_dir",
|
||||
"required": True,
|
||||
"group": _("Data"),
|
||||
"help": _(
|
||||
"Input directory or video. Either a directory containing the image files you wish "
|
||||
"to process or path to a video file. NB: This should be the source video/frames "
|
||||
"NOT the source faces.")})
|
||||
argument_list.append({
|
||||
"opts": ("-o", "--output-dir"),
|
||||
"action": DirFullPaths,
|
||||
"dest": "output_dir",
|
||||
"required": True,
|
||||
"group": _("Data"),
|
||||
"help": _("Output directory. This is where the converted files will be saved.")})
|
||||
argument_list.append({
|
||||
"opts": ("-p", "--alignments"),
|
||||
"action": FileFullPaths,
|
||||
"filetypes": "alignments",
|
||||
"type": str,
|
||||
"dest": "alignments_path",
|
||||
"group": _("Data"),
|
||||
"help": _(
|
||||
"Optional path to an alignments file. Leave blank if the alignments file is at "
|
||||
"the default location.")})
|
||||
# Deprecated multi-character switches
|
||||
argument_list.append({
|
||||
"opts": ("-al", ),
|
||||
"action": FileFullPaths,
|
||||
"filetypes": "alignments",
|
||||
"type": str,
|
||||
"dest": "depr_alignments_path_al_p",
|
||||
"help": argparse.SUPPRESS})
|
||||
return argument_list
|
||||
|
||||
|
||||
class ExtractArgs(ExtractConvertArgs):
|
||||
""" Creates the command line arguments for extraction.
|
||||
|
||||
This class inherits base options from :class:`ExtractConvertArgs` where arguments that are used
|
||||
for both Extract and Convert should be placed.
|
||||
|
||||
Commands explicit to Extract should be added in :func:`get_optional_arguments`
|
||||
"""
|
||||
|
||||
@staticmethod
|
||||
def get_info() -> str:
|
||||
""" The information text for the Extract command.
|
||||
|
||||
Returns
|
||||
-------
|
||||
str
|
||||
The information text for the Extract command.
|
||||
"""
|
||||
return _("Extract faces from image or video sources.\n"
|
||||
"Extraction plugins can be configured in the 'Settings' Menu")
|
||||
|
||||
@staticmethod
|
||||
def get_optional_arguments() -> list[dict[str, T.Any]]:
|
||||
""" Returns the argument list unique to the Extract command.
|
||||
|
||||
Returns
|
||||
-------
|
||||
list
|
||||
The list of optional command line options for the Extract command
|
||||
"""
|
||||
if get_backend() == "cpu":
|
||||
default_detector = "mtcnn"
|
||||
default_aligner = "cv2-dnn"
|
||||
else:
|
||||
default_detector = "s3fd"
|
||||
default_aligner = "fan"
|
||||
|
||||
argument_list: list[dict[str, T.Any]] = []
|
||||
argument_list.append({
|
||||
"opts": ("-b", "--batch-mode"),
|
||||
"action": "store_true",
|
||||
"dest": "batch_mode",
|
||||
"default": False,
|
||||
"group": _("Data"),
|
||||
"help": _(
|
||||
"R|If selected then the input_dir should be a parent folder containing multiple "
|
||||
"videos and/or folders of images you wish to extract from. The faces will be "
|
||||
"output to separate sub-folders in the output_dir.")})
|
||||
argument_list.append({
|
||||
"opts": ("-D", "--detector"),
|
||||
"action": Radio,
|
||||
"type": str.lower,
|
||||
"default": default_detector,
|
||||
"choices": PluginLoader.get_available_extractors("detect"),
|
||||
"group": _("Plugins"),
|
||||
"help": _(
|
||||
"R|Detector to use. Some of these have configurable settings in "
|
||||
"'/config/extract.ini' or 'Settings > Configure Extract 'Plugins':"
|
||||
"\nL|cv2-dnn: A CPU only extractor which is the least reliable and least resource "
|
||||
"intensive. Use this if not using a GPU and time is important."
|
||||
"\nL|mtcnn: Good detector. Fast on CPU, faster on GPU. Uses fewer resources than "
|
||||
"other GPU detectors but can often return more false positives."
|
||||
"\nL|s3fd: Best detector. Slow on CPU, faster on GPU. Can detect more faces and "
|
||||
"fewer false positives than other GPU detectors, but is a lot more resource "
|
||||
"intensive.")})
|
||||
argument_list.append({
|
||||
"opts": ("-A", "--aligner"),
|
||||
"action": Radio,
|
||||
"type": str.lower,
|
||||
"default": default_aligner,
|
||||
"choices": PluginLoader.get_available_extractors("align"),
|
||||
"group": _("Plugins"),
|
||||
"help": _(
|
||||
"R|Aligner to use."
|
||||
"\nL|cv2-dnn: A CPU only landmark detector. Faster, less resource intensive, but "
|
||||
"less accurate. Only use this if not using a GPU and time is important."
|
||||
"\nL|fan: Best aligner. Fast on GPU, slow on CPU.")})
|
||||
argument_list.append({
|
||||
"opts": ("-M", "--masker"),
|
||||
"action": MultiOption,
|
||||
"type": str.lower,
|
||||
"nargs": "+",
|
||||
"choices": [mask for mask in PluginLoader.get_available_extractors("mask")
|
||||
if mask not in ("components", "extended")],
|
||||
"group": _("Plugins"),
|
||||
"help": _(
|
||||
"R|Additional Masker(s) to use. The masks generated here will all take up GPU "
|
||||
"RAM. You can select none, one or multiple masks, but the extraction may take "
|
||||
"longer the more you select. NB: The Extended and Components (landmark based) "
|
||||
"masks are automatically generated on extraction."
|
||||
"\nL|bisenet-fp: Relatively lightweight NN based mask that provides more refined "
|
||||
"control over the area to be masked including full head masking (configurable in "
|
||||
"mask settings)."
|
||||
"\nL|custom: A dummy mask that fills the mask area with all 1s or 0s ("
|
||||
"configurable in settings). This is only required if you intend to manually edit "
|
||||
"the custom masks yourself in the manual tool. This mask does not use the GPU so "
|
||||
"will not use any additional VRAM."
|
||||
"\nL|vgg-clear: Mask designed to provide smart segmentation of mostly frontal "
|
||||
"faces clear of obstructions. Profile faces and obstructions may result in "
|
||||
"sub-par performance."
|
||||
"\nL|vgg-obstructed: Mask designed to provide smart segmentation of mostly "
|
||||
"frontal faces. The mask model has been specifically trained to recognize some "
|
||||
"facial obstructions (hands and eyeglasses). Profile faces may result in sub-par "
|
||||
"performance."
|
||||
"\nL|unet-dfl: Mask designed to provide smart segmentation of mostly frontal "
|
||||
"faces. The mask model has been trained by community members and will need "
|
||||
"testing for further description. Profile faces may result in sub-par "
|
||||
"performance."
|
||||
"\nThe auto generated masks are as follows:"
|
||||
"\nL|components: Mask designed to provide facial segmentation based on the "
|
||||
"positioning of landmark locations. A convex hull is constructed around the "
|
||||
"exterior of the landmarks to create a mask."
|
||||
"\nL|extended: Mask designed to provide facial segmentation based on the "
|
||||
"positioning of landmark locations. A convex hull is constructed around the "
|
||||
"exterior of the landmarks and the mask is extended upwards onto the forehead."
|
||||
"\n(eg: `-M unet-dfl vgg-clear`, `--masker vgg-obstructed`)")})
|
||||
argument_list.append({
|
||||
"opts": ("-O", "--normalization"),
|
||||
"action": Radio,
|
||||
"type": str.lower,
|
||||
"dest": "normalization",
|
||||
"default": "none",
|
||||
"choices": ["none", "clahe", "hist", "mean"],
|
||||
"group": _("Plugins"),
|
||||
"help": _(
|
||||
"R|Performing normalization can help the aligner better align faces with "
|
||||
"difficult lighting conditions at an extraction speed cost. Different methods "
|
||||
"will yield different results on different sets. NB: This does not impact the "
|
||||
"output face, just the input to the aligner."
|
||||
"\nL|none: Don't perform normalization on the face."
|
||||
"\nL|clahe: Perform Contrast Limited Adaptive Histogram Equalization on the face."
|
||||
"\nL|hist: Equalize the histograms on the RGB channels."
|
||||
"\nL|mean: Normalize the face colors to the mean.")})
|
||||
argument_list.append({
|
||||
"opts": ("-R", "--re-feed"),
|
||||
"action": Slider,
|
||||
"min_max": (0, 10),
|
||||
"rounding": 1,
|
||||
"type": int,
|
||||
"dest": "re_feed",
|
||||
"default": 0,
|
||||
"group": _("Plugins"),
|
||||
"help": _(
|
||||
"The number of times to re-feed the detected face into the aligner. Each time the "
|
||||
"face is re-fed into the aligner the bounding box is adjusted by a small amount. "
|
||||
"The final landmarks are then averaged from each iteration. Helps to remove "
|
||||
"'micro-jitter' but at the cost of slower extraction speed. The more times the "
|
||||
"face is re-fed into the aligner, the less micro-jitter should occur but the "
|
||||
"longer extraction will take.")})
|
||||
argument_list.append({
|
||||
"opts": ("-a", "--re-align"),
|
||||
"action": "store_true",
|
||||
"dest": "re_align",
|
||||
"default": False,
|
||||
"group": _("Plugins"),
|
||||
"help": _(
|
||||
"Re-feed the initially found aligned face through the aligner. Can help produce "
|
||||
"better alignments for faces that are rotated beyond 45 degrees in the frame or "
|
||||
"are at extreme angles. Slows down extraction.")})
|
||||
argument_list.append({
|
||||
"opts": ("-r", "--rotate-images"),
|
||||
"type": str,
|
||||
"dest": "rotate_images",
|
||||
"default": None,
|
||||
"group": _("Plugins"),
|
||||
"help": _(
|
||||
"If a face isn't found, rotate the images to try to find a face. Can find more "
|
||||
"faces at the cost of extraction speed. Pass in a single number to use increments "
|
||||
"of that size up to 360, or pass in a list of numbers to enumerate exactly what "
|
||||
"angles to check.")})
|
||||
argument_list.append({
|
||||
"opts": ("-I", "--identity"),
|
||||
"action": "store_true",
|
||||
"default": False,
|
||||
"group": _("Plugins"),
|
||||
"help": _(
|
||||
"Obtain and store face identity encodings from VGGFace2. Slows down extract a "
|
||||
"little, but will save time if using 'sort by face'")})
|
||||
argument_list.append({
|
||||
"opts": ("-m", "--min-size"),
|
||||
"action": Slider,
|
||||
"min_max": (0, 1080),
|
||||
"rounding": 20,
|
||||
"type": int,
|
||||
"dest": "min_size",
|
||||
"default": 0,
|
||||
"group": _("Face Processing"),
|
||||
"help": _(
|
||||
"Filters out faces detected below this size. Length, in pixels across the "
|
||||
"diagonal of the bounding box. Set to 0 for off")})
|
||||
argument_list.append({
|
||||
"opts": ("-n", "--nfilter"),
|
||||
"action": DirOrFilesFullPaths,
|
||||
"filetypes": "image",
|
||||
"dest": "nfilter",
|
||||
"default": None,
|
||||
"nargs": "+",
|
||||
"group": _("Face Processing"),
|
||||
"help": _(
|
||||
"Optionally filter out people who you do not wish to extract by passing in images "
|
||||
"of those people. Should be a small variety of images at different angles and in "
|
||||
"different conditions. A folder containing the required images or multiple image "
|
||||
"files, space separated, can be selected.")})
|
||||
argument_list.append({
|
||||
"opts": ("-f", "--filter"),
|
||||
"action": DirOrFilesFullPaths,
|
||||
"filetypes": "image",
|
||||
"dest": "filter",
|
||||
"default": None,
|
||||
"nargs": "+",
|
||||
"group": _("Face Processing"),
|
||||
"help": _(
|
||||
"Optionally select people you wish to extract by passing in images of that "
|
||||
"person. Should be a small variety of images at different angles and in different "
|
||||
"conditions A folder containing the required images or multiple image files, "
|
||||
"space separated, can be selected.")})
|
||||
argument_list.append({
|
||||
"opts": ("-l", "--ref_threshold"),
|
||||
"action": Slider,
|
||||
"min_max": (0.01, 0.99),
|
||||
"rounding": 2,
|
||||
"type": float,
|
||||
"dest": "ref_threshold",
|
||||
"default": 0.60,
|
||||
"group": _("Face Processing"),
|
||||
"help": _(
|
||||
"For use with the optional nfilter/filter files. Threshold for positive face "
|
||||
"recognition. Higher values are stricter.")})
|
||||
argument_list.append({
|
||||
"opts": ("-z", "--size"),
|
||||
"action": Slider,
|
||||
"min_max": (256, 1024),
|
||||
"rounding": 64,
|
||||
"type": int,
|
||||
"default": 512,
|
||||
"group": _("output"),
|
||||
"help": _(
|
||||
"The output size of extracted faces. Make sure that the model you intend to train "
|
||||
"supports your required size. This will only need to be changed for hi-res "
|
||||
"models.")})
|
||||
argument_list.append({
|
||||
"opts": ("-N", "--extract-every-n"),
|
||||
"action": Slider,
|
||||
"min_max": (1, 100),
|
||||
"rounding": 1,
|
||||
"type": int,
|
||||
"dest": "extract_every_n",
|
||||
"default": 1,
|
||||
"group": _("output"),
|
||||
"help": _(
|
||||
"Extract every 'nth' frame. This option will skip frames when extracting faces. "
|
||||
"For example a value of 1 will extract faces from every frame, a value of 10 will "
|
||||
"extract faces from every 10th frame.")})
|
||||
argument_list.append({
|
||||
"opts": ("-v", "--save-interval"),
|
||||
"action": Slider,
|
||||
"min_max": (0, 1000),
|
||||
"rounding": 10,
|
||||
"type": int,
|
||||
"dest": "save_interval",
|
||||
"default": 0,
|
||||
"group": _("output"),
|
||||
"help": _(
|
||||
"Automatically save the alignments file after a set amount of frames. By default "
|
||||
"the alignments file is only saved at the end of the extraction process. NB: If "
|
||||
"extracting in 2 passes then the alignments file will only start to be saved out "
|
||||
"during the second pass. WARNING: Don't interrupt the script when writing the "
|
||||
"file because it might get corrupted. Set to 0 to turn off")})
|
||||
argument_list.append({
|
||||
"opts": ("-B", "--debug-landmarks"),
|
||||
"action": "store_true",
|
||||
"dest": "debug_landmarks",
|
||||
"default": False,
|
||||
"group": _("output"),
|
||||
"help": _("Draw landmarks on the ouput faces for debugging purposes.")})
|
||||
argument_list.append({
|
||||
"opts": ("-P", "--singleprocess"),
|
||||
"action": "store_true",
|
||||
"default": False,
|
||||
"backend": ("nvidia", "directml", "rocm", "apple_silicon"),
|
||||
"group": _("settings"),
|
||||
"help": _(
|
||||
"Don't run extraction in parallel. Will run each part of the extraction process "
|
||||
"separately (one after the other) rather than all at the same time. Useful if "
|
||||
"VRAM is at a premium.")})
|
||||
argument_list.append({
|
||||
"opts": ("-s", "--skip-existing"),
|
||||
"action": "store_true",
|
||||
"dest": "skip_existing",
|
||||
"default": False,
|
||||
"group": _("settings"),
|
||||
"help": _(
|
||||
"Skips frames that have already been extracted and exist in the alignments file")})
|
||||
argument_list.append({
|
||||
"opts": ("-e", "--skip-existing-faces"),
|
||||
"action": "store_true",
|
||||
"dest": "skip_faces",
|
||||
"default": False,
|
||||
"group": _("settings"),
|
||||
"help": _("Skip frames that already have detected faces in the alignments file")})
|
||||
argument_list.append({
|
||||
"opts": ("-K", "--skip-saving-faces"),
|
||||
"action": "store_true",
|
||||
"dest": "skip_saving_faces",
|
||||
"default": False,
|
||||
"group": _("settings"),
|
||||
"help": _("Skip saving the detected faces to disk. Just create an alignments file")})
|
||||
# Deprecated multi-character switches
|
||||
argument_list.append({
|
||||
"opts": ("-min", ),
|
||||
"type": int,
|
||||
"dest": "depr_min_size_min_m",
|
||||
"help": argparse.SUPPRESS})
|
||||
argument_list.append({
|
||||
"opts": ("-een", ),
|
||||
"type": int,
|
||||
"dest": "depr_extract_every_n_een_N",
|
||||
"help": argparse.SUPPRESS})
|
||||
argument_list.append({
|
||||
"opts": ("-nm",),
|
||||
"type": str.lower,
|
||||
"dest": "depr_normalization_nm_O",
|
||||
"choices": ["none", "clahe", "hist", "mean"],
|
||||
"help": argparse.SUPPRESS})
|
||||
argument_list.append({
|
||||
"opts": ("-rf", ),
|
||||
"type": int,
|
||||
"dest": "depr_re_feed_rf_R",
|
||||
"help": argparse.SUPPRESS})
|
||||
argument_list.append({
|
||||
"opts": ("-sz", ),
|
||||
"type": int,
|
||||
"dest": "depr_size_sz_z",
|
||||
"help": argparse.SUPPRESS})
|
||||
argument_list.append({
|
||||
"opts": ("-si", ),
|
||||
"type": int,
|
||||
"dest": "depr_save_interval_si_v",
|
||||
"help": argparse.SUPPRESS})
|
||||
argument_list.append({
|
||||
"opts": ("-dl", ),
|
||||
"action": "store_true",
|
||||
"dest": "depr_debug_landmarks_dl_B",
|
||||
"help": argparse.SUPPRESS})
|
||||
argument_list.append({
|
||||
"opts": ("-sp", ),
|
||||
"dest": "depr_singleprocess_sp_P",
|
||||
"action": "store_true",
|
||||
"help": argparse.SUPPRESS})
|
||||
argument_list.append({
|
||||
"opts": ("-sf", ),
|
||||
"action": "store_true",
|
||||
"dest": "depr_skip_faces_sf_e",
|
||||
"help": argparse.SUPPRESS})
|
||||
argument_list.append({
|
||||
"opts": ("-ssf", ),
|
||||
"action": "store_true",
|
||||
"dest": "depr_skip_saving_faces_ssf_K",
|
||||
"help": argparse.SUPPRESS})
|
||||
return argument_list
|
||||
|
||||
|
||||
class ConvertArgs(ExtractConvertArgs):
|
||||
""" Creates the command line arguments for conversion.
|
||||
|
||||
This class inherits base options from :class:`ExtractConvertArgs` where arguments that are used
|
||||
for both Extract and Convert should be placed.
|
||||
|
||||
Commands explicit to Convert should be added in :func:`get_optional_arguments`
|
||||
"""
|
||||
|
||||
@staticmethod
|
||||
def get_info() -> str:
|
||||
""" The information text for the Convert command.
|
||||
|
||||
Returns
|
||||
-------
|
||||
str
|
||||
The information text for the Convert command.
|
||||
"""
|
||||
return _("Swap the original faces in a source video/images to your final faces.\n"
|
||||
"Conversion plugins can be configured in the 'Settings' Menu")
|
||||
|
||||
@staticmethod
|
||||
def get_optional_arguments() -> list[dict[str, T.Any]]:
|
||||
""" Returns the argument list unique to the Convert command.
|
||||
|
||||
Returns
|
||||
-------
|
||||
list
|
||||
The list of optional command line options for the Convert command
|
||||
"""
|
||||
|
||||
argument_list: list[dict[str, T.Any]] = []
|
||||
argument_list.append({
|
||||
"opts": ("-r", "--reference-video"),
|
||||
"action": FileFullPaths,
|
||||
"filetypes": "video",
|
||||
"type": str,
|
||||
"dest": "reference_video",
|
||||
"group": _("Data"),
|
||||
"help": _(
|
||||
"Only required if converting from images to video. Provide The original video "
|
||||
"that the source frames were extracted from (for extracting the fps and audio).")})
|
||||
argument_list.append({
|
||||
"opts": ("-m", "--model-dir"),
|
||||
"action": DirFullPaths,
|
||||
"dest": "model_dir",
|
||||
"required": True,
|
||||
"group": _("Data"),
|
||||
"help": _(
|
||||
"Model directory. The directory containing the trained model you wish to use for "
|
||||
"conversion.")})
|
||||
argument_list.append({
|
||||
"opts": ("-c", "--color-adjustment"),
|
||||
"action": Radio,
|
||||
"type": str.lower,
|
||||
"dest": "color_adjustment",
|
||||
"default": "avg-color",
|
||||
"choices": PluginLoader.get_available_convert_plugins("color", True),
|
||||
"group": _("Plugins"),
|
||||
"help": _(
|
||||
"R|Performs color adjustment to the swapped face. Some of these options have "
|
||||
"configurable settings in '/config/convert.ini' or 'Settings > Configure Convert "
|
||||
"Plugins':"
|
||||
"\nL|avg-color: Adjust the mean of each color channel in the swapped "
|
||||
"reconstruction to equal the mean of the masked area in the original image."
|
||||
"\nL|color-transfer: Transfers the color distribution from the source to the "
|
||||
"target image using the mean and standard deviations of the L*a*b* color space."
|
||||
"\nL|manual-balance: Manually adjust the balance of the image in a variety of "
|
||||
"color spaces. Best used with the Preview tool to set correct values."
|
||||
"\nL|match-hist: Adjust the histogram of each color channel in the swapped "
|
||||
"reconstruction to equal the histogram of the masked area in the original image."
|
||||
"\nL|seamless-clone: Use cv2's seamless clone function to remove extreme "
|
||||
"gradients at the mask seam by smoothing colors. Generally does not give very "
|
||||
"satisfactory results."
|
||||
"\nL|none: Don't perform color adjustment.")})
|
||||
argument_list.append({
|
||||
"opts": ("-M", "--mask-type"),
|
||||
"action": Radio,
|
||||
"type": str.lower,
|
||||
"dest": "mask_type",
|
||||
"default": "extended",
|
||||
"choices": PluginLoader.get_available_extractors("mask",
|
||||
add_none=True,
|
||||
extend_plugin=True) + ["predicted"],
|
||||
"group": _("Plugins"),
|
||||
"help": _(
|
||||
"R|Masker to use. NB: The mask you require must exist within the alignments file. "
|
||||
"You can add additional masks with the Mask Tool."
|
||||
"\nL|none: Don't use a mask."
|
||||
"\nL|bisenet-fp_face: Relatively lightweight NN based mask that provides more "
|
||||
"refined control over the area to be masked (configurable in mask settings). Use "
|
||||
"this version of bisenet-fp if your model is trained with 'face' or "
|
||||
"'legacy' centering."
|
||||
"\nL|bisenet-fp_head: Relatively lightweight NN based mask that provides more "
|
||||
"refined control over the area to be masked (configurable in mask settings). Use "
|
||||
"this version of bisenet-fp if your model is trained with 'head' centering."
|
||||
"\nL|custom_face: Custom user created, face centered mask."
|
||||
"\nL|custom_head: Custom user created, head centered mask."
|
||||
"\nL|components: Mask designed to provide facial segmentation based on the "
|
||||
"positioning of landmark locations. A convex hull is constructed around the "
|
||||
"exterior of the landmarks to create a mask."
|
||||
"\nL|extended: Mask designed to provide facial segmentation based on the "
|
||||
"positioning of landmark locations. A convex hull is constructed around the "
|
||||
"exterior of the landmarks and the mask is extended upwards onto the forehead."
|
||||
"\nL|vgg-clear: Mask designed to provide smart segmentation of mostly frontal "
|
||||
"faces clear of obstructions. Profile faces and obstructions may result in sub-"
|
||||
"par performance."
|
||||
"\nL|vgg-obstructed: Mask designed to provide smart segmentation of mostly "
|
||||
"frontal faces. The mask model has been specifically trained to recognize some "
|
||||
"facial obstructions (hands and eyeglasses). Profile faces may result in sub-par "
|
||||
"performance."
|
||||
"\nL|unet-dfl: Mask designed to provide smart segmentation of mostly frontal "
|
||||
"faces. The mask model has been trained by community members and will need "
|
||||
"testing for further description. Profile faces may result in sub-par "
|
||||
"performance."
|
||||
"\nL|predicted: If the 'Learn Mask' option was enabled during training, this will "
|
||||
"use the mask that was created by the trained model.")})
|
||||
argument_list.append({
|
||||
"opts": ("-w", "--writer"),
|
||||
"action": Radio,
|
||||
"type": str,
|
||||
"default": "opencv",
|
||||
"choices": PluginLoader.get_available_convert_plugins("writer", False),
|
||||
"group": _("Plugins"),
|
||||
"help": _(
|
||||
"R|The plugin to use to output the converted images. The writers are configurable "
|
||||
"in '/config/convert.ini' or 'Settings > Configure Convert Plugins:'"
|
||||
"\nL|ffmpeg: [video] Writes out the convert straight to video. When the input is "
|
||||
"a series of images then the '-ref' (--reference-video) parameter must be set."
|
||||
"\nL|gif: [animated image] Create an animated gif."
|
||||
"\nL|opencv: [images] The fastest image writer, but less options and formats than "
|
||||
"other plugins."
|
||||
"\nL|patch: [images] Outputs the raw swapped face patch, along with the "
|
||||
"transformation matrix required to re-insert the face back into the original "
|
||||
"frame. Use this option if you wish to post-process and composite the final face "
|
||||
"within external tools."
|
||||
"\nL|pillow: [images] Slower than opencv, but has more options and supports more "
|
||||
"formats.")})
|
||||
argument_list.append({
|
||||
"opts": ("-O", "--output-scale"),
|
||||
"action": Slider,
|
||||
"min_max": (25, 400),
|
||||
"rounding": 1,
|
||||
"type": int,
|
||||
"dest": "output_scale",
|
||||
"default": 100,
|
||||
"group": _("Frame Processing"),
|
||||
"help": _(
|
||||
"Scale the final output frames by this amount. 100%% will output the frames at "
|
||||
"source dimensions. 50%% at half size 200%% at double size")})
|
||||
argument_list.append({
|
||||
"opts": ("-R", "--frame-ranges"),
|
||||
"type": str,
|
||||
"nargs": "+",
|
||||
"dest": "frame_ranges",
|
||||
"group": _("Frame Processing"),
|
||||
"help": _(
|
||||
"Frame ranges to apply transfer to e.g. For frames 10 to 50 and 90 to 100 use "
|
||||
"--frame-ranges 10-50 90-100. Frames falling outside of the selected range will "
|
||||
"be discarded unless '-k' (--keep-unchanged) is selected. NB: If you are "
|
||||
"converting from images, then the filenames must end with the frame-number!")})
|
||||
argument_list.append({
|
||||
"opts": ("-S", "--face-scale"),
|
||||
"action": Slider,
|
||||
"min_max": (-10.0, 10.0),
|
||||
"rounding": 2,
|
||||
"dest": "face_scale",
|
||||
"type": float,
|
||||
"default": 0.0,
|
||||
"group": _("Face Processing"),
|
||||
"help": _(
|
||||
"Scale the swapped face by this percentage. Positive values will enlarge the "
|
||||
"face, Negative values will shrink the face.")})
|
||||
argument_list.append({
|
||||
"opts": ("-a", "--input-aligned-dir"),
|
||||
"action": DirFullPaths,
|
||||
"dest": "input_aligned_dir",
|
||||
"default": None,
|
||||
"group": _("Face Processing"),
|
||||
"help": _(
|
||||
"If you have not cleansed your alignments file, then you can filter out faces by "
|
||||
"defining a folder here that contains the faces extracted from your input files/"
|
||||
"video. If this folder is defined, then only faces that exist within your "
|
||||
"alignments file and also exist within the specified folder will be converted. "
|
||||
"Leaving this blank will convert all faces that exist within the alignments "
|
||||
"file.")})
|
||||
argument_list.append({
|
||||
"opts": ("-n", "--nfilter"),
|
||||
"action": FilesFullPaths,
|
||||
"filetypes": "image",
|
||||
"dest": "nfilter",
|
||||
"default": None,
|
||||
"nargs": "+",
|
||||
"group": _("Face Processing"),
|
||||
"help": _(
|
||||
"Optionally filter out people who you do not wish to process by passing in an "
|
||||
"image of that person. Should be a front portrait with a single person in the "
|
||||
"image. Multiple images can be added space separated. NB: Using face filter will "
|
||||
"significantly decrease extraction speed and its accuracy cannot be guaranteed.")})
|
||||
argument_list.append({
|
||||
"opts": ("-f", "--filter"),
|
||||
"action": FilesFullPaths,
|
||||
"filetypes": "image",
|
||||
"dest": "filter",
|
||||
"default": None,
|
||||
"nargs": "+",
|
||||
"group": _("Face Processing"),
|
||||
"help": _(
|
||||
"Optionally select people you wish to process by passing in an image of that "
|
||||
"person. Should be a front portrait with a single person in the image. Multiple "
|
||||
"images can be added space separated. NB: Using face filter will significantly "
|
||||
"decrease extraction speed and its accuracy cannot be guaranteed.")})
|
||||
argument_list.append({
|
||||
"opts": ("-l", "--ref_threshold"),
|
||||
"action": Slider,
|
||||
"min_max": (0.01, 0.99),
|
||||
"rounding": 2,
|
||||
"type": float,
|
||||
"dest": "ref_threshold",
|
||||
"default": 0.4,
|
||||
"group": _("Face Processing"),
|
||||
"help": _(
|
||||
"For use with the optional nfilter/filter files. Threshold for positive face "
|
||||
"recognition. Lower values are stricter. NB: Using face filter will significantly "
|
||||
"decrease extraction speed and its accuracy cannot be guaranteed.")})
|
||||
argument_list.append({
|
||||
"opts": ("-j", "--jobs"),
|
||||
"action": Slider,
|
||||
"min_max": (0, 40),
|
||||
"rounding": 1,
|
||||
"type": int,
|
||||
"dest": "jobs",
|
||||
"default": 0,
|
||||
"group": _("settings"),
|
||||
"help": _(
|
||||
"The maximum number of parallel processes for performing conversion. Converting "
|
||||
"images is system RAM heavy so it is possible to run out of memory if you have a "
|
||||
"lot of processes and not enough RAM to accommodate them all. Setting this to 0 "
|
||||
"will use the maximum available. No matter what you set this to, it will never "
|
||||
"attempt to use more processes than are available on your system. If "
|
||||
"singleprocess is enabled this setting will be ignored.")})
|
||||
argument_list.append({
|
||||
"opts": ("-T", "--on-the-fly"),
|
||||
"action": "store_true",
|
||||
"dest": "on_the_fly",
|
||||
"default": False,
|
||||
"group": _("settings"),
|
||||
"help": _(
|
||||
"Enable On-The-Fly Conversion. NOT recommended. You should generate a clean "
|
||||
"alignments file for your destination video. However, if you wish you can "
|
||||
"generate the alignments on-the-fly by enabling this option. This will use an "
|
||||
"inferior extraction pipeline and will lead to substandard results. If an "
|
||||
"alignments file is found, this option will be ignored.")})
|
||||
argument_list.append({
|
||||
"opts": ("-k", "--keep-unchanged"),
|
||||
"action": "store_true",
|
||||
"dest": "keep_unchanged",
|
||||
"default": False,
|
||||
"group": _("Frame Processing"),
|
||||
"help": _(
|
||||
"When used with --frame-ranges outputs the unchanged frames that are not "
|
||||
"processed instead of discarding them.")})
|
||||
argument_list.append({
|
||||
"opts": ("-s", "--swap-model"),
|
||||
"action": "store_true",
|
||||
"dest": "swap_model",
|
||||
"default": False,
|
||||
"group": _("settings"),
|
||||
"help": _("Swap the model. Instead converting from of A -> B, converts B -> A")})
|
||||
argument_list.append({
|
||||
"opts": ("-P", "--singleprocess"),
|
||||
"action": "store_true",
|
||||
"default": False,
|
||||
"group": _("settings"),
|
||||
"help": _("Disable multiprocessing. Slower but less resource intensive.")})
|
||||
# Deprecated multi-character switches
|
||||
argument_list.append({
|
||||
"opts": ("-sp", ),
|
||||
"action": "store_true",
|
||||
"dest": "depr_singleprocess_sp_P",
|
||||
"help": argparse.SUPPRESS})
|
||||
argument_list.append({
|
||||
"opts": ("-ref", ),
|
||||
"type": str,
|
||||
"dest": "depr_reference_video_ref_r",
|
||||
"help": argparse.SUPPRESS})
|
||||
argument_list.append({
|
||||
"opts": ("-fr", ),
|
||||
"type": str,
|
||||
"nargs": "+",
|
||||
"dest": "depr_frame_ranges_fr_R",
|
||||
"help": argparse.SUPPRESS})
|
||||
argument_list.append({
|
||||
"opts": ("-osc", ),
|
||||
"type": int,
|
||||
"dest": "depr_output_scale_osc_O",
|
||||
"help": argparse.SUPPRESS})
|
||||
argument_list.append({
|
||||
"opts": ("-otf", ),
|
||||
"action": "store_true",
|
||||
"dest": "depr_on_the_fly_otf_T",
|
||||
"help": argparse.SUPPRESS})
|
||||
return argument_list
|
382
lib/cli/args_train.py
Normal file
382
lib/cli/args_train.py
Normal file
|
@ -0,0 +1,382 @@
|
|||
#!/usr/bin/env python3
|
||||
""" The Command Line Argument options for training with faceswap.py """
|
||||
import argparse
|
||||
import gettext
|
||||
import typing as T
|
||||
|
||||
from plugins.plugin_loader import PluginLoader
|
||||
|
||||
from .actions import DirFullPaths, FileFullPaths, Radio, Slider
|
||||
from .args import FaceSwapArgs
|
||||
|
||||
|
||||
# LOCALES
|
||||
_LANG = gettext.translation("lib.cli.args_train", localedir="locales", fallback=True)
|
||||
_ = _LANG.gettext
|
||||
|
||||
|
||||
class TrainArgs(FaceSwapArgs):
|
||||
""" Creates the command line arguments for training. """
|
||||
|
||||
@staticmethod
|
||||
def get_info() -> str:
|
||||
""" The information text for the Train command.
|
||||
|
||||
Returns
|
||||
-------
|
||||
str
|
||||
The information text for the Train command.
|
||||
"""
|
||||
return _("Train a model on extracted original (A) and swap (B) faces.\n"
|
||||
"Training models can take a long time. Anything from 24hrs to over a week\n"
|
||||
"Model plugins can be configured in the 'Settings' Menu")
|
||||
|
||||
@staticmethod
|
||||
def get_argument_list() -> list[dict[str, T.Any]]:
|
||||
""" Returns the argument list for Train arguments.
|
||||
|
||||
Returns
|
||||
-------
|
||||
list
|
||||
The list of command line options for training
|
||||
"""
|
||||
argument_list: list[dict[str, T.Any]] = []
|
||||
argument_list.append({
|
||||
"opts": ("-A", "--input-A"),
|
||||
"action": DirFullPaths,
|
||||
"dest": "input_a",
|
||||
"required": True,
|
||||
"group": _("faces"),
|
||||
"help": _(
|
||||
"Input directory. A directory containing training images for face A. This is the "
|
||||
"original face, i.e. the face that you want to remove and replace with face B.")})
|
||||
argument_list.append({
|
||||
"opts": ("-B", "--input-B"),
|
||||
"action": DirFullPaths,
|
||||
"dest": "input_b",
|
||||
"required": True,
|
||||
"group": _("faces"),
|
||||
"help": _(
|
||||
"Input directory. A directory containing training images for face B. This is the "
|
||||
"swap face, i.e. the face that you want to place onto the head of person A.")})
|
||||
argument_list.append({
|
||||
"opts": ("-m", "--model-dir"),
|
||||
"action": DirFullPaths,
|
||||
"dest": "model_dir",
|
||||
"required": True,
|
||||
"group": _("model"),
|
||||
"help": _(
|
||||
"Model directory. This is where the training data will be stored. You should "
|
||||
"always specify a new folder for new models. If starting a new model, select "
|
||||
"either an empty folder, or a folder which does not exist (which will be "
|
||||
"created). If continuing to train an existing model, specify the location of the "
|
||||
"existing model.")})
|
||||
argument_list.append({
|
||||
"opts": ("-l", "--load-weights"),
|
||||
"action": FileFullPaths,
|
||||
"filetypes": "model",
|
||||
"dest": "load_weights",
|
||||
"required": False,
|
||||
"group": _("model"),
|
||||
"help": _(
|
||||
"R|Load the weights from a pre-existing model into a newly created model. For "
|
||||
"most models this will load weights from the Encoder of the given model into the "
|
||||
"encoder of the newly created model. Some plugins may have specific configuration "
|
||||
"options allowing you to load weights from other layers. Weights will only be "
|
||||
"loaded when creating a new model. This option will be ignored if you are "
|
||||
"resuming an existing model. Generally you will also want to 'freeze-weights' "
|
||||
"whilst the rest of your model catches up with your Encoder.\n"
|
||||
"NB: Weights can only be loaded from models of the same plugin as you intend to "
|
||||
"train.")})
|
||||
argument_list.append({
|
||||
"opts": ("-t", "--trainer"),
|
||||
"action": Radio,
|
||||
"type": str.lower,
|
||||
"default": PluginLoader.get_default_model(),
|
||||
"choices": PluginLoader.get_available_models(),
|
||||
"group": _("model"),
|
||||
"help": _(
|
||||
"R|Select which trainer to use. Trainers can be configured from the Settings menu "
|
||||
"or the config folder."
|
||||
"\nL|original: The original model created by /u/deepfakes."
|
||||
"\nL|dfaker: 64px in/128px out model from dfaker. Enable 'warp-to-landmarks' for "
|
||||
"full dfaker method."
|
||||
"\nL|dfl-h128: 128px in/out model from deepfacelab"
|
||||
"\nL|dfl-sae: Adaptable model from deepfacelab"
|
||||
"\nL|dlight: A lightweight, high resolution DFaker variant."
|
||||
"\nL|iae: A model that uses intermediate layers to try to get better details"
|
||||
"\nL|lightweight: A lightweight model for low-end cards. Don't expect great "
|
||||
"results. Can train as low as 1.6GB with batch size 8."
|
||||
"\nL|realface: A high detail, dual density model based on DFaker, with "
|
||||
"customizable in/out resolution. The autoencoders are unbalanced so B>A swaps "
|
||||
"won't work so well. By andenixa et al. Very configurable."
|
||||
"\nL|unbalanced: 128px in/out model from andenixa. The autoencoders are "
|
||||
"unbalanced so B>A swaps won't work so well. Very configurable."
|
||||
"\nL|villain: 128px in/out model from villainguy. Very resource hungry (You will "
|
||||
"require a GPU with a fair amount of VRAM). Good for details, but more "
|
||||
"susceptible to color differences.")})
|
||||
argument_list.append({
|
||||
"opts": ("-u", "--summary"),
|
||||
"action": "store_true",
|
||||
"dest": "summary",
|
||||
"default": False,
|
||||
"group": _("model"),
|
||||
"help": _(
|
||||
"Output a summary of the model and exit. If a model folder is provided then a "
|
||||
"summary of the saved model is displayed. Otherwise a summary of the model that "
|
||||
"would be created by the chosen plugin and configuration settings is displayed.")})
|
||||
argument_list.append({
|
||||
"opts": ("-f", "--freeze-weights"),
|
||||
"action": "store_true",
|
||||
"dest": "freeze_weights",
|
||||
"default": False,
|
||||
"group": _("model"),
|
||||
"help": _(
|
||||
"Freeze the weights of the model. Freezing weights means that some of the "
|
||||
"parameters in the model will no longer continue to learn, but those that are not "
|
||||
"frozen will continue to learn. For most models, this will freeze the encoder, "
|
||||
"but some models may have configuration options for freezing other layers.")})
|
||||
argument_list.append({
|
||||
"opts": ("-b", "--batch-size"),
|
||||
"action": Slider,
|
||||
"min_max": (1, 256),
|
||||
"rounding": 1,
|
||||
"type": int,
|
||||
"dest": "batch_size",
|
||||
"default": 16,
|
||||
"group": _("training"),
|
||||
"help": _(
|
||||
"Batch size. This is the number of images processed through the model for each "
|
||||
"side per iteration. NB: As the model is fed 2 sides at a time, the actual number "
|
||||
"of images within the model at any one time is double the number that you set "
|
||||
"here. Larger batches require more GPU RAM.")})
|
||||
argument_list.append({
|
||||
"opts": ("-i", "--iterations"),
|
||||
"action": Slider,
|
||||
"min_max": (0, 5000000),
|
||||
"rounding": 20000,
|
||||
"type": int,
|
||||
"default": 1000000,
|
||||
"group": _("training"),
|
||||
"help": _(
|
||||
"Length of training in iterations. This is only really used for automation. There "
|
||||
"is no 'correct' number of iterations a model should be trained for. You should "
|
||||
"stop training when you are happy with the previews. However, if you want the "
|
||||
"model to stop automatically at a set number of iterations, you can set that "
|
||||
"value here.")})
|
||||
argument_list.append({
|
||||
"opts": ("-D", "--distribution-strategy"),
|
||||
"dest": "distribution_strategy",
|
||||
"action": Radio,
|
||||
"type": str.lower,
|
||||
"choices": ["default", "central-storage", "mirrored"],
|
||||
"default": "default",
|
||||
"backend": ("nvidia", "directml", "rocm", "apple_silicon"),
|
||||
"group": _("training"),
|
||||
"help": _(
|
||||
"R|Select the distribution stategy to use."
|
||||
"\nL|default: Use Tensorflow's default distribution strategy."
|
||||
"\nL|central-storage: Centralizes variables on the CPU whilst operations are "
|
||||
"performed on 1 or more local GPUs. This can help save some VRAM at the cost of "
|
||||
"some speed by not storing variables on the GPU. Note: Mixed-Precision is not "
|
||||
"supported on multi-GPU setups."
|
||||
"\nL|mirrored: Supports synchronous distributed training across multiple local "
|
||||
"GPUs. A copy of the model and all variables are loaded onto each GPU with "
|
||||
"batches distributed to each GPU at each iteration.")})
|
||||
argument_list.append({
|
||||
"opts": ("-n", "--no-logs"),
|
||||
"action": "store_true",
|
||||
"dest": "no_logs",
|
||||
"default": False,
|
||||
"group": _("training"),
|
||||
"help": _(
|
||||
"Disables TensorBoard logging. NB: Disabling logs means that you will not be able "
|
||||
"to use the graph or analysis for this session in the GUI.")})
|
||||
argument_list.append({
|
||||
"opts": ("-r", "--use-lr-finder"),
|
||||
"action": "store_true",
|
||||
"dest": "use_lr_finder",
|
||||
"default": False,
|
||||
"group": _("training"),
|
||||
"help": _(
|
||||
"Use the Learning Rate Finder to discover the optimal learning rate for training. "
|
||||
"For new models, this will calculate the optimal learning rate for the model. For "
|
||||
"existing models this will use the optimal learning rate that was discovered when "
|
||||
"initializing the model. Setting this option will ignore the manually configured "
|
||||
"learning rate (configurable in train settings).")})
|
||||
argument_list.append({
|
||||
"opts": ("-s", "--save-interval"),
|
||||
"action": Slider,
|
||||
"min_max": (10, 1000),
|
||||
"rounding": 10,
|
||||
"type": int,
|
||||
"dest": "save_interval",
|
||||
"default": 250,
|
||||
"group": _("Saving"),
|
||||
"help": _("Sets the number of iterations between each model save.")})
|
||||
argument_list.append({
|
||||
"opts": ("-I", "--snapshot-interval"),
|
||||
"action": Slider,
|
||||
"min_max": (0, 100000),
|
||||
"rounding": 5000,
|
||||
"type": int,
|
||||
"dest": "snapshot_interval",
|
||||
"default": 25000,
|
||||
"group": _("Saving"),
|
||||
"help": _(
|
||||
"Sets the number of iterations before saving a backup snapshot of the model in "
|
||||
"it's current state. Set to 0 for off.")})
|
||||
argument_list.append({
|
||||
"opts": ("-x", "--timelapse-input-A"),
|
||||
"action": DirFullPaths,
|
||||
"dest": "timelapse_input_a",
|
||||
"default": None,
|
||||
"group": _("timelapse"),
|
||||
"help": _(
|
||||
"Optional for creating a timelapse. Timelapse will save an image of your selected "
|
||||
"faces into the timelapse-output folder at every save iteration. This should be "
|
||||
"the input folder of 'A' faces that you would like to use for creating the "
|
||||
"timelapse. You must also supply a --timelapse-output and a --timelapse-input-B "
|
||||
"parameter.")})
|
||||
argument_list.append({
|
||||
"opts": ("-y", "--timelapse-input-B"),
|
||||
"action": DirFullPaths,
|
||||
"dest": "timelapse_input_b",
|
||||
"default": None,
|
||||
"group": _("timelapse"),
|
||||
"help": _(
|
||||
"Optional for creating a timelapse. Timelapse will save an image of your selected "
|
||||
"faces into the timelapse-output folder at every save iteration. This should be "
|
||||
"the input folder of 'B' faces that you would like to use for creating the "
|
||||
"timelapse. You must also supply a --timelapse-output and a --timelapse-input-A "
|
||||
"parameter.")})
|
||||
argument_list.append({
|
||||
"opts": ("-z", "--timelapse-output"),
|
||||
"action": DirFullPaths,
|
||||
"dest": "timelapse_output",
|
||||
"default": None,
|
||||
"group": _("timelapse"),
|
||||
"help": _(
|
||||
"Optional for creating a timelapse. Timelapse will save an image of your selected "
|
||||
"faces into the timelapse-output folder at every save iteration. If the input "
|
||||
"folders are supplied but no output folder, it will default to your model folder/"
|
||||
"timelapse/")})
|
||||
argument_list.append({
|
||||
"opts": ("-p", "--preview"),
|
||||
"action": "store_true",
|
||||
"dest": "preview",
|
||||
"default": False,
|
||||
"group": _("preview"),
|
||||
"help": _("Show training preview output. in a separate window.")})
|
||||
argument_list.append({
|
||||
"opts": ("-w", "--write-image"),
|
||||
"action": "store_true",
|
||||
"dest": "write_image",
|
||||
"default": False,
|
||||
"group": _("preview"),
|
||||
"help": _(
|
||||
"Writes the training result to a file. The image will be stored in the root of "
|
||||
"your FaceSwap folder.")})
|
||||
argument_list.append({
|
||||
"opts": ("-M", "--warp-to-landmarks"),
|
||||
"action": "store_true",
|
||||
"dest": "warp_to_landmarks",
|
||||
"default": False,
|
||||
"group": _("augmentation"),
|
||||
"help": _(
|
||||
"Warps training faces to closely matched Landmarks from the opposite face-set "
|
||||
"rather than randomly warping the face. This is the 'dfaker' way of doing "
|
||||
"warping.")})
|
||||
argument_list.append({
|
||||
"opts": ("-P", "--no-flip"),
|
||||
"action": "store_true",
|
||||
"dest": "no_flip",
|
||||
"default": False,
|
||||
"group": _("augmentation"),
|
||||
"help": _(
|
||||
"To effectively learn, a random set of images are flipped horizontally. Sometimes "
|
||||
"it is desirable for this not to occur. Generally this should be left off except "
|
||||
"for during 'fit training'.")})
|
||||
argument_list.append({
|
||||
"opts": ("-c", "--no-augment-color"),
|
||||
"action": "store_true",
|
||||
"dest": "no_augment_color",
|
||||
"default": False,
|
||||
"group": _("augmentation"),
|
||||
"help": _(
|
||||
"Color augmentation helps make the model less susceptible to color differences "
|
||||
"between the A and B sets, at an increased training time cost. Enable this option "
|
||||
"to disable color augmentation.")})
|
||||
argument_list.append({
|
||||
"opts": ("-W", "--no-warp"),
|
||||
"action": "store_true",
|
||||
"dest": "no_warp",
|
||||
"default": False,
|
||||
"group": _("augmentation"),
|
||||
"help": _(
|
||||
"Warping is integral to training the Neural Network. This option should only be "
|
||||
"enabled towards the very end of training to try to bring out more detail. Think "
|
||||
"of it as 'fine-tuning'. Enabling this option from the beginning is likely to "
|
||||
"kill a model and lead to terrible results.")})
|
||||
# Deprecated multi-character switches
|
||||
argument_list.append({
|
||||
"opts": ("-su", ),
|
||||
"action": "store_true",
|
||||
"dest": "depr_summary_su_u",
|
||||
"help": argparse.SUPPRESS})
|
||||
argument_list.append({
|
||||
"opts": ("-bs", ),
|
||||
"type": int,
|
||||
"dest": "depr_batch_size_bs_b",
|
||||
"help": argparse.SUPPRESS})
|
||||
argument_list.append({
|
||||
"opts": ("-it", ),
|
||||
"type": int,
|
||||
"dest": "depr_iterations_it_i",
|
||||
"help": argparse.SUPPRESS})
|
||||
argument_list.append({
|
||||
"opts": ("-nl", ),
|
||||
"action": "store_true",
|
||||
"dest": "depr_no_logs_nl_n",
|
||||
"help": argparse.SUPPRESS})
|
||||
argument_list.append({
|
||||
"opts": ("-ss", ),
|
||||
"type": int,
|
||||
"dest": "depr_snapshot_interval_ss_I",
|
||||
"help": argparse.SUPPRESS})
|
||||
argument_list.append({
|
||||
"opts": ("-tia", ),
|
||||
"type": str,
|
||||
"dest": "depr_timelapse_input_a_tia_x",
|
||||
"help": argparse.SUPPRESS})
|
||||
argument_list.append({
|
||||
"opts": ("-tib", ),
|
||||
"type": str,
|
||||
"dest": "depr_timelapse_input_b_tib_y",
|
||||
"help": argparse.SUPPRESS})
|
||||
argument_list.append({
|
||||
"opts": ("-to", ),
|
||||
"type": str,
|
||||
"dest": "depr_timelapse_output_to_z",
|
||||
"help": argparse.SUPPRESS})
|
||||
argument_list.append({
|
||||
"opts": ("-wl", ),
|
||||
"action": "store_true",
|
||||
"dest": "depr_warp_to_landmarks_wl_M",
|
||||
"help": argparse.SUPPRESS})
|
||||
argument_list.append({
|
||||
"opts": ("-nf", ),
|
||||
"action": "store_true",
|
||||
"dest": "depr_no_flip_nf_P",
|
||||
"help": argparse.SUPPRESS})
|
||||
argument_list.append({
|
||||
"opts": ("-nac", ),
|
||||
"action": "store_true",
|
||||
"dest": "depr_no_augment_color_nac_c",
|
||||
"help": argparse.SUPPRESS})
|
||||
argument_list.append({
|
||||
"opts": ("-nw", ),
|
||||
"action": "store_true",
|
||||
"dest": "depr_no_warp_nw_W",
|
||||
"help": argparse.SUPPRESS})
|
||||
return argument_list
|
|
@ -170,7 +170,7 @@ class ScriptExecutor():
|
|||
If tkinter cannot be imported
|
||||
"""
|
||||
try:
|
||||
import tkinter # noqa pylint: disable=unused-import,import-outside-toplevel
|
||||
import tkinter # noqa pylint:disable=unused-import,import-outside-toplevel
|
||||
except ImportError as err:
|
||||
logger.error("It looks like TkInter isn't installed for your OS, so the GUI has been "
|
||||
"disabled. To enable the GUI please install the TkInter application. You "
|
||||
|
|
|
@ -9,6 +9,7 @@ from tkinter import ttk
|
|||
from .control_helper import ControlPanel
|
||||
from .custom_widgets import Tooltip
|
||||
from .utils import get_images, get_config
|
||||
from .options import CliOption
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
@ -129,7 +130,7 @@ class CommandTab(ttk.Frame): # pylint:disable=too-many-ancestors
|
|||
""" Build the tab """
|
||||
logger.debug("Build Tab: '%s'", self.command)
|
||||
options = get_config().cli_opts.opts[self.command]
|
||||
cp_opts = [val["cpanel_option"] for key, val in options.items() if key != "helptext"]
|
||||
cp_opts = [val.cpanel_option for val in options.values() if isinstance(val, CliOption)]
|
||||
ControlPanel(self,
|
||||
cp_opts,
|
||||
label_width=16,
|
||||
|
|
|
@ -1,172 +1,374 @@
|
|||
#!/usr/bin python3
|
||||
""" Cli Options for the GUI """
|
||||
from __future__ import annotations
|
||||
|
||||
import inspect
|
||||
from argparse import SUPPRESS
|
||||
from dataclasses import dataclass
|
||||
from importlib import import_module
|
||||
import logging
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
from collections import OrderedDict
|
||||
import typing as T
|
||||
|
||||
from lib.cli import actions, args as cli
|
||||
from lib.cli import actions
|
||||
from .utils import get_images
|
||||
from .control_helper import ControlPanelOption
|
||||
|
||||
if T.TYPE_CHECKING:
|
||||
from tkinter import Variable
|
||||
from types import ModuleType
|
||||
from lib.cli.args import FaceSwapArgs
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@dataclass
|
||||
class CliOption:
|
||||
""" A parsed command line option
|
||||
|
||||
Parameters
|
||||
----------
|
||||
cpanel_option: :class:`~lib.gui.control_helper.ControlPanelOption`:
|
||||
Object to hold information of a command line item for displaying in a GUI
|
||||
:class:`~lib.gui.control_helper.ControlPanel`
|
||||
opts: tuple[str, ...]:
|
||||
The short switch and long name (if exists) of the command line option
|
||||
nargs: Literal["+"] | None:
|
||||
``None`` for not used. "+" for at least 1 argument required with values to be contained
|
||||
in a list
|
||||
"""
|
||||
cpanel_option: ControlPanelOption
|
||||
""":class:`~lib.gui.control_helper.ControlPanelOption`: Object to hold information of a command
|
||||
line item for displaying in a GUI :class:`~lib.gui.control_helper.ControlPanel`"""
|
||||
opts: tuple[str, ...]
|
||||
"""tuple[str, ...]: The short switch and long name (if exists) of cli option """
|
||||
nargs: T.Literal["+"] | None
|
||||
"""Literal["+"] | None: ``None`` for not used. "+" for at least 1 argument required with
|
||||
values to be contained in a list """
|
||||
|
||||
|
||||
class CliOptions():
|
||||
""" Class and methods for the command line options """
|
||||
def __init__(self):
|
||||
def __init__(self) -> None:
|
||||
logger.debug("Initializing %s", self.__class__.__name__)
|
||||
self.categories = ("faceswap", "tools")
|
||||
self.commands = {}
|
||||
self.opts = {}
|
||||
self.build_options()
|
||||
self._base_path = os.path.realpath(os.path.dirname(sys.argv[0]))
|
||||
self._commands: dict[T.Literal["faceswap", "tools"], list[str]] = {"faceswap": [],
|
||||
"tools": []}
|
||||
self._opts: dict[str, dict[str, CliOption | str]] = {}
|
||||
self._build_options()
|
||||
logger.debug("Initialized %s", self.__class__.__name__)
|
||||
|
||||
def build_options(self):
|
||||
""" Get the commands that belong to each category """
|
||||
for category in self.categories:
|
||||
logger.debug("Building '%s'", category)
|
||||
if category == "tools":
|
||||
mod_classes = self._get_tools_cli_classes()
|
||||
self.commands[category] = self.sort_commands(category, mod_classes)
|
||||
for tool in sorted(mod_classes):
|
||||
self.opts.update(self.extract_options(mod_classes[tool], [tool]))
|
||||
else:
|
||||
mod_classes = self.get_cli_classes(cli)
|
||||
self.commands[category] = self.sort_commands(category, mod_classes)
|
||||
self.opts.update(self.extract_options(cli, mod_classes))
|
||||
logger.debug("Built '%s'", category)
|
||||
@property
|
||||
def categories(self) -> tuple[T.Literal["faceswap", "tools"], ...]:
|
||||
"""tuple[str, str] The categories for faceswap's GUI """
|
||||
return tuple(self._commands)
|
||||
|
||||
@staticmethod
|
||||
def get_cli_classes(cli_source):
|
||||
""" Parse the cli scripts for the argument classes """
|
||||
mod_classes = []
|
||||
for name, obj in inspect.getmembers(cli_source):
|
||||
if inspect.isclass(obj) and name.lower().endswith("args") \
|
||||
and name.lower() not in (("faceswapargs",
|
||||
"extractconvertargs",
|
||||
"guiargs")):
|
||||
mod_classes.append(name)
|
||||
logger.debug(mod_classes)
|
||||
return mod_classes
|
||||
@property
|
||||
def commands(self) -> dict[T.Literal["faceswap", "tools"], list[str]]:
|
||||
"""dict[str, ]"""
|
||||
return self._commands
|
||||
|
||||
@staticmethod
|
||||
def _get_tools_cli_classes():
|
||||
""" Parse the tools cli scripts for the argument classes """
|
||||
base_path = os.path.realpath(os.path.dirname(sys.argv[0]))
|
||||
tools_dir = os.path.join(base_path, "tools")
|
||||
mod_classes = {}
|
||||
@property
|
||||
def opts(self) -> dict[str, dict[str, CliOption | str]]:
|
||||
"""dict[str, dict[str, CliOption | str]] The command line options collected from faceswap's
|
||||
cli files """
|
||||
return self._opts
|
||||
|
||||
def _get_modules_tools(self) -> list[ModuleType]:
|
||||
""" Parse the tools cli python files for the modules that contain the command line
|
||||
arguments
|
||||
|
||||
Returns
|
||||
-------
|
||||
list[`types.ModuleType`]
|
||||
The modules for each faceswap tool that exists in the project
|
||||
"""
|
||||
tools_dir = os.path.join(self._base_path, "tools")
|
||||
logger.debug("Scanning '%s' for cli files", tools_dir)
|
||||
retval: list[ModuleType] = []
|
||||
for tool_name in sorted(os.listdir(tools_dir)):
|
||||
cli_file = os.path.join(tools_dir, tool_name, "cli.py")
|
||||
if os.path.exists(cli_file):
|
||||
mod = ".".join(("tools", tool_name, "cli"))
|
||||
mod_classes[f"{tool_name.title()}Args"] = import_module(mod)
|
||||
return mod_classes
|
||||
if not os.path.exists(cli_file):
|
||||
logger.debug("File does not exist. Skipping: '%s'", cli_file)
|
||||
continue
|
||||
|
||||
mod = ".".join(("tools", tool_name, "cli"))
|
||||
retval.append(import_module(mod))
|
||||
logger.debug("Collected: %s", retval[-1])
|
||||
return retval
|
||||
|
||||
def _get_modules_faceswap(self) -> list[ModuleType]:
|
||||
""" Parse the faceswap cli python files for the modules that contain the command line
|
||||
arguments
|
||||
|
||||
Returns
|
||||
-------
|
||||
list[`types.ModuleType`]
|
||||
The modules for each faceswap command line argument file that exists in the project
|
||||
"""
|
||||
base_dir = ["lib", "cli"]
|
||||
cli_dir = os.path.join(self._base_path, *base_dir)
|
||||
logger.debug("Scanning '%s' for cli files", cli_dir)
|
||||
retval: list[ModuleType] = []
|
||||
|
||||
for fname in os.listdir(cli_dir):
|
||||
if not fname.startswith("args"):
|
||||
logger.debug("Skipping file '%s'", fname)
|
||||
continue
|
||||
mod = ".".join((*base_dir, os.path.splitext(fname)[0]))
|
||||
retval.append(import_module(mod))
|
||||
logger.debug("Collected: '%s", retval[-1])
|
||||
return retval
|
||||
|
||||
def _get_modules(self, category: T.Literal["faceswap", "tools"]) -> list[ModuleType]:
|
||||
""" Parse the cli files for faceswap and tools and return the imported module
|
||||
|
||||
Parameters
|
||||
----------
|
||||
category: Literal["faceswap", "tools"]
|
||||
The faceswap category to obtain the cli modules
|
||||
|
||||
Returns
|
||||
-------
|
||||
list[`types.ModuleType`]
|
||||
The modules for each faceswap command/tool that exists in the project for the given
|
||||
category
|
||||
"""
|
||||
logger.debug("Getting '%s' cli modules", category)
|
||||
if category == "tools":
|
||||
return self._get_modules_tools()
|
||||
return self._get_modules_faceswap()
|
||||
|
||||
@classmethod
|
||||
def _get_classes(cls, module: ModuleType) -> list[T.Type[FaceSwapArgs]]:
|
||||
""" Obtain the classes from the given module that contain the command line
|
||||
arguments
|
||||
|
||||
Parameters
|
||||
----------
|
||||
module: :class:`types.ModuleType`
|
||||
The imported module to parse for command line argument classes
|
||||
|
||||
Returns
|
||||
-------
|
||||
list[:class:`~lib.cli.args.FaceswapArgs`]
|
||||
The command line argument class objects that exist in the module
|
||||
"""
|
||||
retval = []
|
||||
for name, obj in inspect.getmembers(module):
|
||||
if not inspect.isclass(obj) or not name.lower().endswith("args"):
|
||||
logger.debug("Skipping non-cli class object '%s'", name)
|
||||
continue
|
||||
if name.lower() in (("faceswapargs", "extractconvertargs", "guiargs")):
|
||||
logger.debug("Skipping uneeded object '%s'", name)
|
||||
continue
|
||||
logger.debug("Collecting %s", obj)
|
||||
retval.append(obj)
|
||||
logger.debug("Collected from '%s': %s", module.__name__, [c.__name__ for c in retval])
|
||||
return retval
|
||||
|
||||
def _get_all_classes(self, modules: list[ModuleType]) -> list[T.Type[FaceSwapArgs]]:
|
||||
"""Obtain the the command line options classes for the given modules
|
||||
|
||||
Parameters
|
||||
----------
|
||||
modules : list[:class:`types.ModuleType`]
|
||||
The imported modules to extract the command line argument classes from
|
||||
|
||||
Returns
|
||||
-------
|
||||
list[:class:`~lib.cli.args.FaceSwapArgs`]
|
||||
The valid command line class objects for the given modules
|
||||
"""
|
||||
retval = []
|
||||
for module in modules:
|
||||
mod_classes = self._get_classes(module)
|
||||
if not mod_classes:
|
||||
logger.debug("module '%s' contains no cli classes. Skipping", module)
|
||||
continue
|
||||
retval.extend(mod_classes)
|
||||
logger.debug("Obtained %s cli classes from %s modules", len(retval), len(modules))
|
||||
return retval
|
||||
|
||||
@classmethod
|
||||
def _class_name_to_command(cls, class_name: str) -> str:
|
||||
""" Format a FaceSwapArgs class name to a standardized command name
|
||||
|
||||
Parameters
|
||||
----------
|
||||
class_name: str
|
||||
The name of the class to convert to a command name
|
||||
|
||||
Returns
|
||||
-------
|
||||
str
|
||||
The formatted command name
|
||||
"""
|
||||
return class_name.lower()[:-4]
|
||||
|
||||
def _store_commands(self,
|
||||
category: T.Literal["faceswap", "tools"],
|
||||
classes: list[T.Type[FaceSwapArgs]]) -> None:
|
||||
""" Format classes into command names and sort. Store in :attr:`commands`.
|
||||
Sorting is in specific workflow order for faceswap and alphabetical for all others
|
||||
|
||||
Parameters
|
||||
----------
|
||||
category: Literal["faceswap", "tools"]
|
||||
The category to store the command names for
|
||||
classes: list[:class:`~lib.cli.args.FaceSwapArgs`]
|
||||
The valid command line class objects for the category
|
||||
"""
|
||||
class_names = [c.__name__ for c in classes]
|
||||
commands = sorted(self._class_name_to_command(n) for n in class_names)
|
||||
|
||||
def sort_commands(self, category, classes):
|
||||
""" Format classes into command names and sort:
|
||||
Specific workflow order for faceswap.
|
||||
Alphabetical for all others """
|
||||
commands = sorted(self.format_command_name(command)
|
||||
for command in classes)
|
||||
if category == "faceswap":
|
||||
ordered = ["extract", "train", "convert"]
|
||||
commands = ordered + [command for command in commands
|
||||
if command not in ordered]
|
||||
logger.debug(commands)
|
||||
return commands
|
||||
self._commands[category].extend(commands)
|
||||
logger.debug("Set '%s' commands: %s", category, self._commands[category])
|
||||
|
||||
@staticmethod
|
||||
def format_command_name(classname):
|
||||
""" Format args class name to command """
|
||||
return classname.lower()[:-4]
|
||||
@classmethod
|
||||
def _get_cli_arguments(cls,
|
||||
arg_class: T.Type[FaceSwapArgs],
|
||||
command: str) -> tuple[str, list[dict[str, T.Any]]]:
|
||||
""" Extract the command line options from the given cli class
|
||||
|
||||
def extract_options(self, cli_source, mod_classes):
|
||||
""" Extract the existing ArgParse Options
|
||||
into master options Dictionary """
|
||||
subopts = {}
|
||||
for classname in mod_classes:
|
||||
logger.debug("Processing: (classname: '%s')", classname)
|
||||
command = self.format_command_name(classname)
|
||||
info, options = self.get_cli_arguments(cli_source, classname, command)
|
||||
options = self.process_options(options, command)
|
||||
options["helptext"] = info
|
||||
logger.debug("Processed: (classname: '%s', command: '%s', options: %s)",
|
||||
classname, command, options)
|
||||
subopts[command] = options
|
||||
return subopts
|
||||
Parameters
|
||||
----------
|
||||
arg_class: :class:`~lib.cli.args.FaceSwapArgs`
|
||||
The class to extract the options from
|
||||
command: str
|
||||
The command name to extract the options for
|
||||
|
||||
@staticmethod
|
||||
def get_cli_arguments(cli_source, classname, command):
|
||||
""" Extract the options from the main and tools cli files """
|
||||
meth = getattr(cli_source, classname)(None, command)
|
||||
return meth.info, meth.argument_list + meth.optional_arguments + meth.global_arguments
|
||||
Returns
|
||||
-------
|
||||
info: str
|
||||
The helptext information for given command
|
||||
options: list[dict. str, Any]
|
||||
The command line options for the given command
|
||||
"""
|
||||
args = arg_class(None, command)
|
||||
arg_list = args.argument_list + args.optional_arguments + args.global_arguments
|
||||
logger.debug("Obtain options for '%s'. Info: '%s', options: %s",
|
||||
command, args.info, len(arg_list))
|
||||
return args.info, arg_list
|
||||
|
||||
def process_options(self, command_options, command):
|
||||
""" Process the options for a single command """
|
||||
gui_options = OrderedDict()
|
||||
for opt in command_options:
|
||||
logger.trace("Processing: %s", opt)
|
||||
if opt.get("help", "") == SUPPRESS:
|
||||
logger.trace("Skipping suppressed option: %s", opt)
|
||||
continue
|
||||
title = self.set_control_title(opt["opts"])
|
||||
cpanel_option = ControlPanelOption(
|
||||
title,
|
||||
self.get_data_type(opt),
|
||||
group=opt.get("group", None),
|
||||
default=opt.get("default", None),
|
||||
choices=opt.get("choices", None),
|
||||
is_radio=opt.get("action", "") == actions.Radio,
|
||||
is_multi_option=opt.get("action", "") == actions.MultiOption,
|
||||
rounding=self.get_rounding(opt),
|
||||
min_max=opt.get("min_max", None),
|
||||
sysbrowser=self.get_sysbrowser(opt, command_options, command),
|
||||
helptext=opt["help"],
|
||||
track_modified=True,
|
||||
command=command)
|
||||
gui_options[title] = {"cpanel_option": cpanel_option,
|
||||
"opts": opt["opts"],
|
||||
"nargs": opt.get("nargs", None)}
|
||||
logger.trace("Processed: %s", gui_options)
|
||||
return gui_options
|
||||
@classmethod
|
||||
def _set_control_title(cls, opts: tuple[str, ...]) -> str:
|
||||
""" Take the option switch and format it nicely
|
||||
|
||||
@staticmethod
|
||||
def set_control_title(opts):
|
||||
""" Take the option switch and format it nicely """
|
||||
Parameters
|
||||
----------
|
||||
opts: tuple[str, ...]
|
||||
The option switch for a command line option
|
||||
|
||||
Returns
|
||||
-------
|
||||
str
|
||||
The option switch formatted for display
|
||||
"""
|
||||
ctltitle = opts[1] if len(opts) == 2 else opts[0]
|
||||
ctltitle = ctltitle.replace("-", " ").replace("_", " ").strip().title()
|
||||
return ctltitle
|
||||
retval = ctltitle.replace("-", " ").replace("_", " ").strip().title()
|
||||
logger.debug("Formatted '%s' to '%s'", ctltitle, retval)
|
||||
return retval
|
||||
|
||||
@staticmethod
|
||||
def get_data_type(opt):
|
||||
""" Return a datatype for passing into control_helper.py to get the correct control """
|
||||
if opt.get("type", None) is not None and isinstance(opt["type"], type):
|
||||
retval = opt["type"]
|
||||
@classmethod
|
||||
def _get_data_type(cls, opt: dict[str, T.Any]) -> type:
|
||||
""" Return a data type for passing into control_helper.py to get the correct control
|
||||
|
||||
Parameters
|
||||
----------
|
||||
option: dict[str, Any]
|
||||
The option to extract the data type from
|
||||
|
||||
Returns
|
||||
-------
|
||||
:class:`type`
|
||||
The Python type for the option
|
||||
"""
|
||||
type_ = opt.get("type")
|
||||
if type_ is not None and isinstance(opt["type"], type):
|
||||
retval = type_
|
||||
elif opt.get("action", "") in ("store_true", "store_false"):
|
||||
retval = bool
|
||||
else:
|
||||
retval = str
|
||||
logger.debug("Setting type to %s for %s", retval, type_)
|
||||
return retval
|
||||
|
||||
@staticmethod
|
||||
def get_rounding(opt):
|
||||
""" Return rounding if correct data type, else None """
|
||||
dtype = opt.get("type", None)
|
||||
@classmethod
|
||||
def _get_rounding(cls, opt: dict[str, T.Any]) -> int | None:
|
||||
""" Return rounding for the given option
|
||||
|
||||
Parameters
|
||||
----------
|
||||
option: dict[str, Any]
|
||||
The option to extract the rounding from
|
||||
|
||||
Returns
|
||||
-------
|
||||
int | None
|
||||
int if the data type supports rounding otherwise ``None``
|
||||
"""
|
||||
dtype = opt.get("type")
|
||||
if dtype == float:
|
||||
retval = opt.get("rounding", 2)
|
||||
elif dtype == int:
|
||||
retval = opt.get("rounding", 1)
|
||||
else:
|
||||
retval = None
|
||||
logger.debug("Setting rounding to %s for type %s", retval, dtype)
|
||||
return retval
|
||||
|
||||
def get_sysbrowser(self, option, options, command):
|
||||
""" Return the system file browser and file types if required else None """
|
||||
@classmethod
|
||||
def _expand_action_option(cls,
|
||||
option: dict[str, T.Any],
|
||||
options: list[dict[str, T.Any]]) -> None:
|
||||
""" Expand the action option to the full command name
|
||||
|
||||
Parameters
|
||||
----------
|
||||
option: dict[str, Any]
|
||||
The option to expand the action for
|
||||
options: list[dict[str, Any]]
|
||||
The full list of options for the command
|
||||
"""
|
||||
opts = {opt["opts"][0]: opt["opts"][-1]
|
||||
for opt in options}
|
||||
old_val = option["action_option"]
|
||||
new_val = opts[old_val]
|
||||
logger.debug("Updating action option from '%s' to '%s'", old_val, new_val)
|
||||
option["action_option"] = new_val
|
||||
|
||||
def _get_sysbrowser(self,
|
||||
option: dict[str, T.Any],
|
||||
options: list[dict[str, T.Any]],
|
||||
command: str) -> dict[T.Literal["filetypes",
|
||||
"browser",
|
||||
"command",
|
||||
"destination",
|
||||
"action_option"], str | list[str]] | None:
|
||||
""" Return the system file browser and file types if required
|
||||
|
||||
Parameters
|
||||
----------
|
||||
option: dict[str, Any]
|
||||
The option to obtain the system browser for
|
||||
options: list[dict[str, Any]]
|
||||
The full list of options for the command
|
||||
command: str
|
||||
The command that the options belong to
|
||||
|
||||
Returns
|
||||
-------
|
||||
dict[Literal["filetypes", "browser", "command",
|
||||
"destination", "action_option"], list[str]] | None
|
||||
The browser information, if valid, or ``None`` if browser not required
|
||||
"""
|
||||
action = option.get("action", None)
|
||||
if action not in (actions.DirFullPaths,
|
||||
actions.FileFullPaths,
|
||||
|
@ -177,10 +379,14 @@ class CliOptions():
|
|||
actions.ContextFullPaths):
|
||||
return None
|
||||
|
||||
retval = {}
|
||||
retval: dict[T.Literal["filetypes",
|
||||
"browser",
|
||||
"command",
|
||||
"destination",
|
||||
"action_option"], str | list[str]] = {}
|
||||
action_option = None
|
||||
if option.get("action_option", None) is not None:
|
||||
self.expand_action_option(option, options)
|
||||
self._expand_action_option(option, options)
|
||||
action_option = option["action_option"]
|
||||
retval["filetypes"] = option.get("filetypes", "default")
|
||||
if action == actions.FileFullPaths:
|
||||
|
@ -203,50 +409,147 @@ class CliOptions():
|
|||
logger.debug(retval)
|
||||
return retval
|
||||
|
||||
@staticmethod
|
||||
def expand_action_option(option, options):
|
||||
""" Expand the action option to the full command name """
|
||||
opts = {opt["opts"][0]: opt["opts"][-1]
|
||||
for opt in options}
|
||||
old_val = option["action_option"]
|
||||
new_val = opts[old_val]
|
||||
logger.debug("Updating action option from '%s' to '%s'", old_val, new_val)
|
||||
option["action_option"] = new_val
|
||||
def _process_options(self, command_options: list[dict[str, T.Any]], command: str
|
||||
) -> dict[str, CliOption]:
|
||||
""" Process the options for a single command
|
||||
|
||||
def gen_command_options(self, command):
|
||||
""" Yield each option for specified command """
|
||||
for key, val in self.opts.get(command, {}).items():
|
||||
if not isinstance(val, dict):
|
||||
Parameters
|
||||
----------
|
||||
command_options: list[dict. str, Any]
|
||||
The command line options for the given command
|
||||
command: str
|
||||
The command name to process
|
||||
|
||||
Returns
|
||||
-------
|
||||
dict[str, :class:`CliOption`]
|
||||
The collected command line options for handling by the GUI
|
||||
"""
|
||||
retval: dict[str, CliOption] = {}
|
||||
for opt in command_options:
|
||||
logger.debug("Processing: cli option: %s", opt["opts"])
|
||||
if opt.get("help", "") == SUPPRESS:
|
||||
logger.debug("Skipping suppressed option: %s", opt)
|
||||
continue
|
||||
title = self._set_control_title(opt["opts"])
|
||||
cpanel_option = ControlPanelOption(
|
||||
title,
|
||||
self._get_data_type(opt),
|
||||
group=opt.get("group", None),
|
||||
default=opt.get("default", None),
|
||||
choices=opt.get("choices", None),
|
||||
is_radio=opt.get("action", "") == actions.Radio,
|
||||
is_multi_option=opt.get("action", "") == actions.MultiOption,
|
||||
rounding=self._get_rounding(opt),
|
||||
min_max=opt.get("min_max", None),
|
||||
sysbrowser=self._get_sysbrowser(opt, command_options, command),
|
||||
helptext=opt["help"],
|
||||
track_modified=True,
|
||||
command=command)
|
||||
retval[title] = CliOption(cpanel_option=cpanel_option,
|
||||
opts=opt["opts"],
|
||||
nargs=opt.get("nargs"))
|
||||
logger.debug("Processed: %s", retval)
|
||||
return retval
|
||||
|
||||
def _extract_options(self, arguments: list[T.Type[FaceSwapArgs]]):
|
||||
""" Extract the collected command line FaceSwapArg options into master options
|
||||
:attr:`opts` dictionary
|
||||
|
||||
Parameters
|
||||
----------
|
||||
arguments: list[:class:`~lib.cli.args.FaceSwapArgs`]
|
||||
The command line class objects to process
|
||||
"""
|
||||
retval = {}
|
||||
for arg_class in arguments:
|
||||
logger.debug("Processing: '%s'", arg_class.__name__)
|
||||
command = self._class_name_to_command(arg_class.__name__)
|
||||
info, options = self._get_cli_arguments(arg_class, command)
|
||||
opts = T.cast(dict[str, CliOption | str], self._process_options(options, command))
|
||||
opts["helptext"] = info
|
||||
retval[command] = opts
|
||||
self._opts.update(retval)
|
||||
|
||||
def _build_options(self) -> None:
|
||||
""" Parse the command line argument modules and populate :attr:`commands` and :attr:`opts`
|
||||
for each category """
|
||||
for category in self.categories:
|
||||
modules = self._get_modules(category)
|
||||
classes = self._get_all_classes(modules)
|
||||
self._store_commands(category, classes)
|
||||
self._extract_options(classes)
|
||||
logger.debug("Built '%s'", category)
|
||||
|
||||
def _gen_command_options(self, command: str
|
||||
) -> T.Generator[tuple[str, CliOption], None, None]:
|
||||
""" Yield each option for specified command
|
||||
|
||||
Parameters
|
||||
----------
|
||||
command: str
|
||||
The faceswap command to generate the options for
|
||||
|
||||
Yields
|
||||
------
|
||||
str
|
||||
The option name for display
|
||||
:class:`CliOption`:
|
||||
The option object
|
||||
"""
|
||||
for key, val in self._opts.get(command, {}).items():
|
||||
if not isinstance(val, CliOption):
|
||||
continue
|
||||
yield key, val
|
||||
|
||||
def options_to_process(self, command=None):
|
||||
def _options_to_process(self, command: str | None = None) -> list[CliOption]:
|
||||
""" Return a consistent object for processing regardless of whether processing all commands
|
||||
or just one command for reset and clear. Removes helptext from return value """
|
||||
if command is None:
|
||||
options = [opt for opts in self.opts.values()
|
||||
for opt in opts.values() if isinstance(opt, dict)]
|
||||
else:
|
||||
options = [opt for opt in self.opts[command].values() if isinstance(opt, dict)]
|
||||
return options
|
||||
or just one command for reset and clear. Removes helptext from return value
|
||||
|
||||
def reset(self, command=None):
|
||||
""" Reset the options for all or passed command
|
||||
back to default value """
|
||||
Parameters
|
||||
----------
|
||||
command: str | None, optional
|
||||
The command to return the options for. ``None`` for all commands. Default ``None``
|
||||
|
||||
Returns
|
||||
-------
|
||||
list[:class:`CliOption`]
|
||||
The options to be processed
|
||||
"""
|
||||
if command is None:
|
||||
return [opt for opts in self._opts.values()
|
||||
for opt in opts if isinstance(opt, CliOption)]
|
||||
return [opt for opt in self._opts[command] if isinstance(opt, CliOption)]
|
||||
|
||||
def reset(self, command: str | None = None) -> None:
|
||||
""" Reset the options for all or passed command back to default value
|
||||
|
||||
Parameters
|
||||
----------
|
||||
command: str | None, optional
|
||||
The command to reset the options for. ``None`` to reset for all commands.
|
||||
Default: ``None``
|
||||
"""
|
||||
logger.debug("Resetting options to default. (command: '%s'", command)
|
||||
for option in self.options_to_process(command):
|
||||
cp_opt = option["cpanel_option"]
|
||||
for option in self._options_to_process(command):
|
||||
cp_opt = option.cpanel_option
|
||||
default = "" if cp_opt.default is None else cp_opt.default
|
||||
if (option.get("nargs", None)
|
||||
and isinstance(default, (list, tuple))):
|
||||
if option.nargs is not None and isinstance(default, (list, tuple)):
|
||||
default = ' '.join(str(val) for val in default)
|
||||
cp_opt.set(default)
|
||||
|
||||
def clear(self, command=None):
|
||||
""" Clear the options values for all or passed commands """
|
||||
def clear(self, command: str | None = None) -> None:
|
||||
""" Clear the options values for all or passed commands
|
||||
|
||||
Parameters
|
||||
----------
|
||||
command: str | None, optional
|
||||
The command to clear the options for. ``None`` to clear options for all commands.
|
||||
Default: ``None``
|
||||
"""
|
||||
logger.debug("Clearing options. (command: '%s'", command)
|
||||
for option in self.options_to_process(command):
|
||||
cp_opt = option["cpanel_option"]
|
||||
for option in self._options_to_process(command):
|
||||
cp_opt = option.cpanel_option
|
||||
if isinstance(cp_opt.get(), bool):
|
||||
cp_opt.set(False)
|
||||
elif isinstance(cp_opt.get(), (int, float)):
|
||||
|
@ -254,54 +557,92 @@ class CliOptions():
|
|||
else:
|
||||
cp_opt.set("")
|
||||
|
||||
def get_option_values(self, command=None):
|
||||
""" Return all or single command control titles with the associated tk_var value """
|
||||
ctl_dict = {}
|
||||
for cmd, opts in self.opts.items():
|
||||
def get_option_values(self, command: str | None = None
|
||||
) -> dict[str, dict[str, bool | int | float | str]]:
|
||||
""" Return all or single command control titles with the associated tk_var value
|
||||
|
||||
Parameters
|
||||
----------
|
||||
command: str | None, optional
|
||||
The command to get the option values for. ``None`` to get all option values.
|
||||
Default: ``None``
|
||||
|
||||
Returns
|
||||
-------
|
||||
dict[str, dict[str, bool | int | float | str]]
|
||||
option values in the format {command: {option_name: option_value}}
|
||||
"""
|
||||
ctl_dict: dict[str, dict[str, bool | int | float | str]] = {}
|
||||
for cmd, opts in self._opts.items():
|
||||
if command and command != cmd:
|
||||
continue
|
||||
cmd_dict = {}
|
||||
cmd_dict: dict[str, bool | int | float | str] = {}
|
||||
for key, val in opts.items():
|
||||
if not isinstance(val, dict):
|
||||
if not isinstance(val, CliOption):
|
||||
continue
|
||||
cmd_dict[key] = val["cpanel_option"].get()
|
||||
cmd_dict[key] = val.cpanel_option.get()
|
||||
ctl_dict[cmd] = cmd_dict
|
||||
logger.debug("command: '%s', ctl_dict: %s", command, ctl_dict)
|
||||
return ctl_dict
|
||||
|
||||
def get_one_option_variable(self, command, title):
|
||||
""" Return a single tk_var for the specified
|
||||
command and control_title """
|
||||
for opt_title, option in self.gen_command_options(command):
|
||||
def get_one_option_variable(self, command: str, title: str) -> Variable | None:
|
||||
""" Return a single :class:`tkinter.Variable` tk_var for the specified command and
|
||||
control_title
|
||||
|
||||
Parameters
|
||||
----------
|
||||
command: str
|
||||
The command to return the variable from
|
||||
title: str
|
||||
The option title to return the variable for
|
||||
|
||||
Returns
|
||||
-------
|
||||
:class:`tkinter.Variable` | None
|
||||
The requested tkinter variable, or ``None`` if it could not be found
|
||||
"""
|
||||
for opt_title, option in self._gen_command_options(command):
|
||||
if opt_title == title:
|
||||
return option["cpanel_option"].tk_var
|
||||
return option.cpanel_option.tk_var
|
||||
return None
|
||||
|
||||
def gen_cli_arguments(self, command):
|
||||
""" Return the generated cli arguments for the selected command """
|
||||
def gen_cli_arguments(self, command: str) -> T.Generator[tuple[str, ...], None, None]:
|
||||
""" Yield the generated cli arguments for the selected command
|
||||
|
||||
Parameters
|
||||
----------
|
||||
command: str
|
||||
The command to generate the command line arguments for
|
||||
|
||||
Yields
|
||||
------
|
||||
tuple[str, ...]
|
||||
The generated command line arguments
|
||||
"""
|
||||
output_dir = None
|
||||
batch_mode = False
|
||||
for _, option in self.gen_command_options(command):
|
||||
optval = str(option["cpanel_option"].get())
|
||||
opt = option["opts"][0]
|
||||
if command in ("extract", "convert") and opt == "-o": # Output location for preview
|
||||
output_dir = optval
|
||||
if command == "extract" and opt == "-b": # Check for batch mode
|
||||
batch_mode = optval
|
||||
if optval in ("False", ""):
|
||||
for _, option in self._gen_command_options(command):
|
||||
str_val = str(option.cpanel_option.get())
|
||||
switch = option.opts[0]
|
||||
batch_mode = command == "extract" and switch == "-b" # Check for batch mode
|
||||
if command in ("extract", "convert") and switch == "-o": # Output location for preview
|
||||
output_dir = str_val
|
||||
|
||||
if str_val in ("False", ""): # skip no value opts
|
||||
continue
|
||||
if optval == "True":
|
||||
yield (opt, )
|
||||
else:
|
||||
if option.get("nargs", None):
|
||||
if "\"" in optval:
|
||||
optval = [arg[1:-1] for arg in re.findall(r"\".+?\"", optval)]
|
||||
else:
|
||||
optval = optval.split(" ")
|
||||
opt = [opt] + optval
|
||||
|
||||
if str_val == "True": # store_true just output the switch
|
||||
yield (switch, )
|
||||
continue
|
||||
|
||||
if option.nargs is not None:
|
||||
if "\"" in str_val:
|
||||
val = [arg[1:-1] for arg in re.findall(r"\".+?\"", str_val)]
|
||||
else:
|
||||
opt = (opt, optval)
|
||||
yield opt
|
||||
val = str_val.split(" ")
|
||||
retval = (switch, *val)
|
||||
else:
|
||||
retval = (switch, str_val)
|
||||
yield retval
|
||||
|
||||
if command in ("extract", "convert") and output_dir is not None:
|
||||
get_images().preview_extract.set_faceswap_output_path(output_dir,
|
||||
|
|
|
@ -11,7 +11,7 @@ from lib.serializer import get_serializer
|
|||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class _GuiSession():
|
||||
class _GuiSession(): # pylint:disable=too-few-public-methods
|
||||
""" Parent class for GUI Session Handlers.
|
||||
|
||||
Parameters
|
||||
|
@ -90,11 +90,12 @@ class _GuiSession():
|
|||
def _selected_to_choices(self):
|
||||
""" dict: The selected value and valid choices for multi-option, radio or combo options.
|
||||
"""
|
||||
valid_choices = {cmd: {opt: {"choices": val["cpanel_option"].choices,
|
||||
"is_multi": val["cpanel_option"].is_multi_option}
|
||||
valid_choices = {cmd: {opt: {"choices": val.cpanel_option.choices,
|
||||
"is_multi": val.cpanel_option.is_multi_option}
|
||||
for opt, val in data.items()
|
||||
if isinstance(val, dict) and "cpanel_option" in val
|
||||
and val["cpanel_option"].choices is not None}
|
||||
if hasattr(val, "cpanel_option") # Filter out helptext
|
||||
and val.cpanel_option.choices is not None
|
||||
}
|
||||
for cmd, data in self._config.cli_opts.opts.items()}
|
||||
logger.trace("valid_choices: %s", valid_choices)
|
||||
retval = {command: {option: {"value": value,
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#!/usr/bin/python
|
||||
""" Logging Functions for Faceswap. """
|
||||
# NOTE: Don't import non stdlib packages. This module is accessed by setup.py
|
||||
import collections
|
||||
import logging
|
||||
from logging.handlers import RotatingFileHandler
|
||||
|
@ -144,7 +145,7 @@ class ColoredFormatter(logging.Formatter):
|
|||
def _get_sample_time_string(self) -> int:
|
||||
""" Obtain a sample time string and calculate correct padding.
|
||||
|
||||
This may be inaccurate wheb ticking over an integer from single to double digits, but that
|
||||
This may be inaccurate when ticking over an integer from single to double digits, but that
|
||||
shouldn't be a huge issue.
|
||||
|
||||
Returns
|
||||
|
@ -563,7 +564,7 @@ def _process_value(value: T.Any) -> T.Any:
|
|||
return f'[type: "{type(value).__name__}" len: {len(value)}'
|
||||
|
||||
try:
|
||||
import numpy as np
|
||||
import numpy as np # pylint:disable=import-outside-toplevel
|
||||
except ImportError:
|
||||
return value
|
||||
|
||||
|
|
46
lib/utils.py
46
lib/utils.py
|
@ -21,14 +21,13 @@ import numpy as np
|
|||
from tqdm import tqdm
|
||||
|
||||
if T.TYPE_CHECKING:
|
||||
from argparse import Namespace
|
||||
from http.client import HTTPResponse
|
||||
|
||||
# Global variables
|
||||
IMAGE_EXTENSIONS = [ # pylint:disable=invalid-name
|
||||
".bmp", ".jpeg", ".jpg", ".png", ".tif", ".tiff"]
|
||||
VIDEO_EXTENSIONS = [ # pylint:disable=invalid-name
|
||||
".avi", ".flv", ".mkv", ".mov", ".mp4", ".mpeg", ".mpg", ".webm", ".wmv",
|
||||
".ts", ".vob"]
|
||||
IMAGE_EXTENSIONS = [".bmp", ".jpeg", ".jpg", ".png", ".tif", ".tiff"]
|
||||
VIDEO_EXTENSIONS = [".avi", ".flv", ".mkv", ".mov", ".mp4", ".mpeg", ".mpg", ".webm", ".wmv",
|
||||
".ts", ".vob"]
|
||||
_TF_VERS: tuple[int, int] | None = None
|
||||
ValidBackends = T.Literal["nvidia", "cpu", "apple_silicon", "directml", "rocm"]
|
||||
|
||||
|
@ -431,6 +430,43 @@ def deprecation_warning(function: str, additional_info: str | None = None) -> No
|
|||
logger.warning(msg)
|
||||
|
||||
|
||||
def handle_deprecated_cliopts(arguments: Namespace) -> Namespace:
|
||||
""" Handle deprecated command line arguments and update to correct argument.
|
||||
|
||||
Deprecated cli opts will be provided in the following format:
|
||||
`"depr_<option_key>_<deprecated_opt>_<new_opt>"`
|
||||
|
||||
Parameters
|
||||
----------
|
||||
arguments: :class:`argpares.Namespace`
|
||||
The passed in faceswap cli arguments
|
||||
|
||||
Returns
|
||||
-------
|
||||
:class:`argpares.Namespace`
|
||||
The cli arguments with deprecated values mapped to the correct entry
|
||||
"""
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
for key, selected in vars(arguments).items():
|
||||
if not key.startswith("depr_") or key.startswith("depr_") and selected is None:
|
||||
continue # Not a deprecated opt
|
||||
if isinstance(selected, bool) and not selected:
|
||||
continue # store-true opt with default value
|
||||
|
||||
opt, old, new = key.replace("depr_", "").rsplit("_", maxsplit=2)
|
||||
deprecation_warning(f"Command line option '-{old}'", f"Use '-{new}, --{opt}' instead")
|
||||
|
||||
exist = getattr(arguments, opt)
|
||||
if exist == selected:
|
||||
logger.debug("Keeping existing '%s' value of '%s'", opt, exist)
|
||||
else:
|
||||
logger.debug("Updating arg '%s' from '%s' to '%s' from deprecated opt",
|
||||
opt, exist, selected)
|
||||
|
||||
return arguments
|
||||
|
||||
|
||||
def camel_case_split(identifier: str) -> list[str]:
|
||||
""" Split a camelCase string into a list of its individual parts
|
||||
|
||||
|
|
BIN
locales/es/LC_MESSAGES/lib.cli.args.mo
Executable file → Normal file
BIN
locales/es/LC_MESSAGES/lib.cli.args.mo
Executable file → Normal file
Binary file not shown.
File diff suppressed because it is too large
Load diff
BIN
locales/es/LC_MESSAGES/lib.cli.args_extract_convert.mo
Normal file
BIN
locales/es/LC_MESSAGES/lib.cli.args_extract_convert.mo
Normal file
Binary file not shown.
713
locales/es/LC_MESSAGES/lib.cli.args_extract_convert.po
Executable file
713
locales/es/LC_MESSAGES/lib.cli.args_extract_convert.po
Executable file
|
@ -0,0 +1,713 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR ORGANIZATION
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: faceswap.spanish\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-03-28 18:11+0000\n"
|
||||
"PO-Revision-Date: 2024-03-28 18:13+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: tokafondo\n"
|
||||
"Language: es\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:46 lib/cli/args_extract_convert.py:56
|
||||
#: lib/cli/args_extract_convert.py:64 lib/cli/args_extract_convert.py:122
|
||||
#: lib/cli/args_extract_convert.py:479 lib/cli/args_extract_convert.py:488
|
||||
msgid "Data"
|
||||
msgstr "Datos"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:48
|
||||
msgid ""
|
||||
"Input directory or video. Either a directory containing the image files you "
|
||||
"wish to process or path to a video file. NB: This should be the source video/"
|
||||
"frames NOT the source faces."
|
||||
msgstr ""
|
||||
"Directorio o vídeo de entrada. Un directorio que contenga los archivos de "
|
||||
"imagen que desea procesar o la ruta a un archivo de vídeo. NB: Debe ser el "
|
||||
"vídeo/los fotogramas de origen, NO las caras de origen."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:57
|
||||
msgid "Output directory. This is where the converted files will be saved."
|
||||
msgstr ""
|
||||
"Directorio de salida. Aquí es donde se guardarán los archivos convertidos."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:66
|
||||
msgid ""
|
||||
"Optional path to an alignments file. Leave blank if the alignments file is "
|
||||
"at the default location."
|
||||
msgstr ""
|
||||
"Ruta opcional a un archivo de alineaciones. Dejar en blanco si el archivo de "
|
||||
"alineaciones está en la ubicación por defecto."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:97
|
||||
msgid ""
|
||||
"Extract faces from image or video sources.\n"
|
||||
"Extraction plugins can be configured in the 'Settings' Menu"
|
||||
msgstr ""
|
||||
"Extrae caras de fuentes de imagen o video.\n"
|
||||
"Los plugins de extracción pueden ser configuradas en el menú de 'Ajustes'"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:124
|
||||
msgid ""
|
||||
"R|If selected then the input_dir should be a parent folder containing "
|
||||
"multiple videos and/or folders of images you wish to extract from. The faces "
|
||||
"will be output to separate sub-folders in the output_dir."
|
||||
msgstr ""
|
||||
"Si se selecciona, input_dir debe ser una carpeta principal que contenga "
|
||||
"varios videos y/o carpetas de imágenes de las que desea extraer. Las caras "
|
||||
"se enviarán a subcarpetas separadas en output_dir."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:133 lib/cli/args_extract_convert.py:150
|
||||
#: lib/cli/args_extract_convert.py:163 lib/cli/args_extract_convert.py:202
|
||||
#: lib/cli/args_extract_convert.py:220 lib/cli/args_extract_convert.py:233
|
||||
#: lib/cli/args_extract_convert.py:243 lib/cli/args_extract_convert.py:253
|
||||
#: lib/cli/args_extract_convert.py:499 lib/cli/args_extract_convert.py:525
|
||||
#: lib/cli/args_extract_convert.py:564
|
||||
msgid "Plugins"
|
||||
msgstr "Extensiones"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:135
|
||||
msgid ""
|
||||
"R|Detector to use. Some of these have configurable settings in '/config/"
|
||||
"extract.ini' or 'Settings > Configure Extract 'Plugins':\n"
|
||||
"L|cv2-dnn: A CPU only extractor which is the least reliable and least "
|
||||
"resource intensive. Use this if not using a GPU and time is important.\n"
|
||||
"L|mtcnn: Good detector. Fast on CPU, faster on GPU. Uses fewer resources "
|
||||
"than other GPU detectors but can often return more false positives.\n"
|
||||
"L|s3fd: Best detector. Slow on CPU, faster on GPU. Can detect more faces and "
|
||||
"fewer false positives than other GPU detectors, but is a lot more resource "
|
||||
"intensive."
|
||||
msgstr ""
|
||||
"R|Detector de caras a usar. Algunos tienen ajustes configurables en '/config/"
|
||||
"extract.ini' o 'Ajustes > Configurar Extensiones de Extracción:\n"
|
||||
"L|cv2-dnn: Extractor que usa sólo la CPU. Es el menos fiable y el que menos "
|
||||
"recursos usa. Elegir este si necesita rapidez y no usar la GPU.\n"
|
||||
"L|mtcnn: Buen detector. Rápido en la CPU y más rápido en la GPU. Usa menos "
|
||||
"recursos que otros detectores basados en GPU, pero puede devolver más falsos "
|
||||
"positivos.\n"
|
||||
"L|s3fd: El mejor detector. Lento en la CPU, y más rápido en la GPU. Puede "
|
||||
"detectar más caras y tiene menos falsos positivos que otros detectores "
|
||||
"basados en GPU, pero uso muchos más recursos."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:152
|
||||
msgid ""
|
||||
"R|Aligner to use.\n"
|
||||
"L|cv2-dnn: A CPU only landmark detector. Faster, less resource intensive, "
|
||||
"but less accurate. Only use this if not using a GPU and time is important.\n"
|
||||
"L|fan: Best aligner. Fast on GPU, slow on CPU."
|
||||
msgstr ""
|
||||
"R|Alineador a usar.\n"
|
||||
"L|cv2-dnn: Detector que usa sólo la CPU. Más rápido, usa menos recursos, "
|
||||
"pero es menos preciso. Elegir este si necesita rapidez y no usar la GPU.\n"
|
||||
"L|fan: El mejor alineador. Rápido en la GPU, y lento en la CPU."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:165
|
||||
msgid ""
|
||||
"R|Additional Masker(s) to use. The masks generated here will all take up GPU "
|
||||
"RAM. You can select none, one or multiple masks, but the extraction may take "
|
||||
"longer the more you select. NB: The Extended and Components (landmark based) "
|
||||
"masks are automatically generated on extraction.\n"
|
||||
"L|bisenet-fp: Relatively lightweight NN based mask that provides more "
|
||||
"refined control over the area to be masked including full head masking "
|
||||
"(configurable in mask settings).\n"
|
||||
"L|custom: A dummy mask that fills the mask area with all 1s or 0s "
|
||||
"(configurable in settings). This is only required if you intend to manually "
|
||||
"edit the custom masks yourself in the manual tool. This mask does not use "
|
||||
"the GPU so will not use any additional VRAM.\n"
|
||||
"L|vgg-clear: Mask designed to provide smart segmentation of mostly frontal "
|
||||
"faces clear of obstructions. Profile faces and obstructions may result in "
|
||||
"sub-par performance.\n"
|
||||
"L|vgg-obstructed: Mask designed to provide smart segmentation of mostly "
|
||||
"frontal faces. The mask model has been specifically trained to recognize "
|
||||
"some facial obstructions (hands and eyeglasses). Profile faces may result in "
|
||||
"sub-par performance.\n"
|
||||
"L|unet-dfl: Mask designed to provide smart segmentation of mostly frontal "
|
||||
"faces. The mask model has been trained by community members and will need "
|
||||
"testing for further description. Profile faces may result in sub-par "
|
||||
"performance.\n"
|
||||
"The auto generated masks are as follows:\n"
|
||||
"L|components: Mask designed to provide facial segmentation based on the "
|
||||
"positioning of landmark locations. A convex hull is constructed around the "
|
||||
"exterior of the landmarks to create a mask.\n"
|
||||
"L|extended: Mask designed to provide facial segmentation based on the "
|
||||
"positioning of landmark locations. A convex hull is constructed around the "
|
||||
"exterior of the landmarks and the mask is extended upwards onto the "
|
||||
"forehead.\n"
|
||||
"(eg: `-M unet-dfl vgg-clear`, `--masker vgg-obstructed`)"
|
||||
msgstr ""
|
||||
"R|Enmascarador(es) adicional(es) a usar. Las máscaras generadas aquí usarán "
|
||||
"todas RAM de la GPU. Puede seleccionar una, varias o ninguna máscaras, pero "
|
||||
"la extracción tardará más cuanto más marque. Las máscaras Extended y "
|
||||
"Components son siempre generadas durante la extracción.\n"
|
||||
"L|bisenet-fp: Máscara relativamente ligera basada en NN que proporciona un "
|
||||
"control más refinado sobre el área a enmascarar, incluido el enmascaramiento "
|
||||
"completo de la cabeza (configurable en la configuración de la máscara).\n"
|
||||
"L|custom: Una máscara ficticia que llena el área de la máscara con 1 o 0 "
|
||||
"(configurable en la configuración). Esto solo es necesario si tiene la "
|
||||
"intención de editar manualmente las máscaras personalizadas usted mismo en "
|
||||
"la herramienta manual. Esta máscara no usa la GPU, por lo que no usará VRAM "
|
||||
"adicional.\n"
|
||||
"L|vgg-clear: Máscara diseñada para proporcionar una segmentación inteligente "
|
||||
"de rostros principalmente frontales y libres de obstrucciones. Los rostros "
|
||||
"de perfil y las obstrucciones pueden dar lugar a un rendimiento inferior.\n"
|
||||
"L|vgg-obstructed: Máscara diseñada para proporcionar una segmentación "
|
||||
"inteligente de rostros principalmente frontales. El modelo de la máscara ha "
|
||||
"sido entrenado específicamente para reconocer algunas obstrucciones faciales "
|
||||
"(manos y gafas). Los rostros de perfil pueden dar lugar a un rendimiento "
|
||||
"inferior.\n"
|
||||
"L|unet-dfl: Máscara diseñada para proporcionar una segmentación inteligente "
|
||||
"de rostros principalmente frontales. El modelo de máscara ha sido entrenado "
|
||||
"por los miembros de la comunidad y necesitará ser probado para una mayor "
|
||||
"descripción. Los rostros de perfil pueden dar lugar a un rendimiento "
|
||||
"inferior.\n"
|
||||
"Las máscaras que siempre se generan son:\n"
|
||||
"L|components: Máscara diseñada para proporcionar una segmentación facial "
|
||||
"basada en el posicionamiento de las ubicaciones de los puntos de referencia. "
|
||||
"Se construye un casco convexo alrededor del exterior de los puntos de "
|
||||
"referencia para crear una máscara.\n"
|
||||
"L|extended: Máscara diseñada para proporcionar una segmentación facial "
|
||||
"basada en el posicionamiento de las ubicaciones de los puntos de referencia. "
|
||||
"Se construye un casco convexo alrededor del exterior de los puntos de "
|
||||
"referencia y la máscara se extiende hacia arriba en la frente.\n"
|
||||
"(eg: `-M unet-dfl vgg-clear`, `--masker vgg-obstructed`)"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:204
|
||||
msgid ""
|
||||
"R|Performing normalization can help the aligner better align faces with "
|
||||
"difficult lighting conditions at an extraction speed cost. Different methods "
|
||||
"will yield different results on different sets. NB: This does not impact the "
|
||||
"output face, just the input to the aligner.\n"
|
||||
"L|none: Don't perform normalization on the face.\n"
|
||||
"L|clahe: Perform Contrast Limited Adaptive Histogram Equalization on the "
|
||||
"face.\n"
|
||||
"L|hist: Equalize the histograms on the RGB channels.\n"
|
||||
"L|mean: Normalize the face colors to the mean."
|
||||
msgstr ""
|
||||
"R|Realizar la normalización puede ayudar al alineador a alinear mejor las "
|
||||
"caras con condiciones de iluminación difíciles a un coste de velocidad de "
|
||||
"extracción. Diferentes métodos darán diferentes resultados en diferentes "
|
||||
"conjuntos. NB: Esto no afecta a la cara de salida, sólo a la entrada del "
|
||||
"alineador.\n"
|
||||
"L|none: No realice la normalización en la cara.\n"
|
||||
"L|clahe: Realice la ecualización adaptativa del histograma con contraste "
|
||||
"limitado en el rostro.\n"
|
||||
"L|hist: Iguala los histogramas de los canales RGB.\n"
|
||||
"L|mean: Normalizar los colores de la cara a la media."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:222
|
||||
msgid ""
|
||||
"The number of times to re-feed the detected face into the aligner. Each time "
|
||||
"the face is re-fed into the aligner the bounding box is adjusted by a small "
|
||||
"amount. The final landmarks are then averaged from each iteration. Helps to "
|
||||
"remove 'micro-jitter' but at the cost of slower extraction speed. The more "
|
||||
"times the face is re-fed into the aligner, the less micro-jitter should "
|
||||
"occur but the longer extraction will take."
|
||||
msgstr ""
|
||||
"El número de veces que hay que volver a introducir la cara detectada en el "
|
||||
"alineador. Cada vez que la cara se vuelve a introducir en el alineador, el "
|
||||
"cuadro delimitador se ajusta en una pequeña cantidad. Los puntos de "
|
||||
"referencia finales se promedian en cada iteración. Esto ayuda a eliminar el "
|
||||
"'micro-jitter', pero a costa de una menor velocidad de extracción. Cuantas "
|
||||
"más veces se vuelva a introducir la cara en el alineador, menos "
|
||||
"microfluctuaciones se producirán, pero la extracción será más larga."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:235
|
||||
msgid ""
|
||||
"Re-feed the initially found aligned face through the aligner. Can help "
|
||||
"produce better alignments for faces that are rotated beyond 45 degrees in "
|
||||
"the frame or are at extreme angles. Slows down extraction."
|
||||
msgstr ""
|
||||
"Vuelva a introducir la cara alineada encontrada inicialmente a través del "
|
||||
"alineador. Puede ayudar a producir mejores alineaciones para las caras que "
|
||||
"se giran más de 45 grados en el marco o se encuentran en ángulos extremos. "
|
||||
"Ralentiza la extracción."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:245
|
||||
msgid ""
|
||||
"If a face isn't found, rotate the images to try to find a face. Can find "
|
||||
"more faces at the cost of extraction speed. Pass in a single number to use "
|
||||
"increments of that size up to 360, or pass in a list of numbers to enumerate "
|
||||
"exactly what angles to check."
|
||||
msgstr ""
|
||||
"Si no se encuentra una cara, gira las imágenes para intentar encontrar una "
|
||||
"cara. Puede encontrar más caras a costa de la velocidad de extracción. Pase "
|
||||
"un solo número para usar incrementos de ese tamaño hasta 360, o pase una "
|
||||
"lista de números para enumerar exactamente qué ángulos comprobar."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:255
|
||||
msgid ""
|
||||
"Obtain and store face identity encodings from VGGFace2. Slows down extract a "
|
||||
"little, but will save time if using 'sort by face'"
|
||||
msgstr ""
|
||||
"Obtenga y almacene codificaciones de identidad facial de VGGFace2. Ralentiza "
|
||||
"un poco la extracción, pero ahorrará tiempo si usa 'sort by face'"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:265 lib/cli/args_extract_convert.py:276
|
||||
#: lib/cli/args_extract_convert.py:289 lib/cli/args_extract_convert.py:303
|
||||
#: lib/cli/args_extract_convert.py:610 lib/cli/args_extract_convert.py:619
|
||||
#: lib/cli/args_extract_convert.py:634 lib/cli/args_extract_convert.py:647
|
||||
#: lib/cli/args_extract_convert.py:661
|
||||
msgid "Face Processing"
|
||||
msgstr "Proceso de Caras"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:267
|
||||
msgid ""
|
||||
"Filters out faces detected below this size. Length, in pixels across the "
|
||||
"diagonal of the bounding box. Set to 0 for off"
|
||||
msgstr ""
|
||||
"Filtra las caras detectadas por debajo de este tamaño. Longitud, en píxeles "
|
||||
"a lo largo de la diagonal del cuadro delimitador. Establecer a 0 para "
|
||||
"desactivar"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:278
|
||||
msgid ""
|
||||
"Optionally filter out people who you do not wish to extract by passing in "
|
||||
"images of those people. Should be a small variety of images at different "
|
||||
"angles and in different conditions. A folder containing the required images "
|
||||
"or multiple image files, space separated, can be selected."
|
||||
msgstr ""
|
||||
"Opcionalmente, filtre a las personas que no desea extraer pasando imágenes "
|
||||
"de esas personas. Debe ser una pequeña variedad de imágenes en diferentes "
|
||||
"ángulos y en diferentes condiciones. Se puede seleccionar una carpeta que "
|
||||
"contenga las imágenes requeridas o múltiples archivos de imágenes, separados "
|
||||
"por espacios."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:291
|
||||
msgid ""
|
||||
"Optionally select people you wish to extract by passing in images of that "
|
||||
"person. Should be a small variety of images at different angles and in "
|
||||
"different conditions A folder containing the required images or multiple "
|
||||
"image files, space separated, can be selected."
|
||||
msgstr ""
|
||||
"Opcionalmente, seleccione las personas que desea extraer pasando imágenes de "
|
||||
"esa persona. Debe haber una pequeña variedad de imágenes en diferentes "
|
||||
"ángulos y en diferentes condiciones. Se puede seleccionar una carpeta que "
|
||||
"contenga las imágenes requeridas o múltiples archivos de imágenes, separados "
|
||||
"por espacios."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:305
|
||||
msgid ""
|
||||
"For use with the optional nfilter/filter files. Threshold for positive face "
|
||||
"recognition. Higher values are stricter."
|
||||
msgstr ""
|
||||
"Para usar con los archivos nfilter/filter opcionales. Umbral para el "
|
||||
"reconocimiento facial positivo. Los valores más altos son más estrictos."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:314 lib/cli/args_extract_convert.py:327
|
||||
#: lib/cli/args_extract_convert.py:340 lib/cli/args_extract_convert.py:352
|
||||
msgid "output"
|
||||
msgstr "salida"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:316
|
||||
msgid ""
|
||||
"The output size of extracted faces. Make sure that the model you intend to "
|
||||
"train supports your required size. This will only need to be changed for hi-"
|
||||
"res models."
|
||||
msgstr ""
|
||||
"El tamaño de salida de las caras extraídas. Asegúrese de que el modelo que "
|
||||
"pretende entrenar admite el tamaño deseado. Esto sólo tendrá que ser "
|
||||
"cambiado para los modelos de alta resolución."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:329
|
||||
msgid ""
|
||||
"Extract every 'nth' frame. This option will skip frames when extracting "
|
||||
"faces. For example a value of 1 will extract faces from every frame, a value "
|
||||
"of 10 will extract faces from every 10th frame."
|
||||
msgstr ""
|
||||
"Extraer cada 'enésimo' fotograma. Esta opción omitirá los fotogramas al "
|
||||
"extraer las caras. Por ejemplo, un valor de 1 extraerá las caras de cada "
|
||||
"fotograma, un valor de 10 extraerá las caras de cada 10 fotogramas."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:342
|
||||
msgid ""
|
||||
"Automatically save the alignments file after a set amount of frames. By "
|
||||
"default the alignments file is only saved at the end of the extraction "
|
||||
"process. NB: If extracting in 2 passes then the alignments file will only "
|
||||
"start to be saved out during the second pass. WARNING: Don't interrupt the "
|
||||
"script when writing the file because it might get corrupted. Set to 0 to "
|
||||
"turn off"
|
||||
msgstr ""
|
||||
"Guardar automáticamente el archivo de alineaciones después de una cantidad "
|
||||
"determinada de cuadros. Por defecto, el archivo de alineaciones sólo se "
|
||||
"guarda al final del proceso de extracción. Nota: Si se extrae en 2 pases, el "
|
||||
"archivo de alineaciones sólo se empezará a guardar durante el segundo pase. "
|
||||
"ADVERTENCIA: No interrumpa el script al escribir el archivo porque podría "
|
||||
"corromperse. Poner a 0 para desactivar"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:353
|
||||
msgid "Draw landmarks on the ouput faces for debugging purposes."
|
||||
msgstr ""
|
||||
"Dibujar puntos de referencia en las caras de salida para fines de depuración."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:359 lib/cli/args_extract_convert.py:369
|
||||
#: lib/cli/args_extract_convert.py:377 lib/cli/args_extract_convert.py:384
|
||||
#: lib/cli/args_extract_convert.py:674 lib/cli/args_extract_convert.py:686
|
||||
#: lib/cli/args_extract_convert.py:695 lib/cli/args_extract_convert.py:716
|
||||
#: lib/cli/args_extract_convert.py:722
|
||||
msgid "settings"
|
||||
msgstr "ajustes"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:361
|
||||
msgid ""
|
||||
"Don't run extraction in parallel. Will run each part of the extraction "
|
||||
"process separately (one after the other) rather than all at the same time. "
|
||||
"Useful if VRAM is at a premium."
|
||||
msgstr ""
|
||||
"No ejecute la extracción en paralelo. Ejecutará cada parte del proceso de "
|
||||
"extracción por separado (una tras otra) en lugar de hacerlo todo al mismo "
|
||||
"tiempo. Útil si la VRAM es escasa."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:371
|
||||
msgid ""
|
||||
"Skips frames that have already been extracted and exist in the alignments "
|
||||
"file"
|
||||
msgstr ""
|
||||
"Omite los fotogramas que ya han sido extraídos y que existen en el archivo "
|
||||
"de alineaciones"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:378
|
||||
msgid "Skip frames that already have detected faces in the alignments file"
|
||||
msgstr ""
|
||||
"Omitir los fotogramas que ya tienen caras detectadas en el archivo de "
|
||||
"alineaciones"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:385
|
||||
msgid "Skip saving the detected faces to disk. Just create an alignments file"
|
||||
msgstr ""
|
||||
"No guardar las caras detectadas en el disco. Crear sólo un archivo de "
|
||||
"alineaciones"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:459
|
||||
msgid ""
|
||||
"Swap the original faces in a source video/images to your final faces.\n"
|
||||
"Conversion plugins can be configured in the 'Settings' Menu"
|
||||
msgstr ""
|
||||
"Cambia las caras originales de un vídeo/imágenes de origen por las caras "
|
||||
"finales.\n"
|
||||
"Los plugins de conversión pueden ser configurados en el menú "
|
||||
"\"Configuración\""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:481
|
||||
msgid ""
|
||||
"Only required if converting from images to video. Provide The original video "
|
||||
"that the source frames were extracted from (for extracting the fps and "
|
||||
"audio)."
|
||||
msgstr ""
|
||||
"Sólo es necesario si se convierte de imágenes a vídeo. Proporcione el vídeo "
|
||||
"original del que se extrajeron los fotogramas de origen (para extraer los "
|
||||
"fps y el audio)."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:490
|
||||
msgid ""
|
||||
"Model directory. The directory containing the trained model you wish to use "
|
||||
"for conversion."
|
||||
msgstr ""
|
||||
"Directorio del modelo. El directorio que contiene el modelo entrenado que "
|
||||
"desea utilizar para la conversión."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:501
|
||||
msgid ""
|
||||
"R|Performs color adjustment to the swapped face. Some of these options have "
|
||||
"configurable settings in '/config/convert.ini' or 'Settings > Configure "
|
||||
"Convert Plugins':\n"
|
||||
"L|avg-color: Adjust the mean of each color channel in the swapped "
|
||||
"reconstruction to equal the mean of the masked area in the original image.\n"
|
||||
"L|color-transfer: Transfers the color distribution from the source to the "
|
||||
"target image using the mean and standard deviations of the L*a*b* color "
|
||||
"space.\n"
|
||||
"L|manual-balance: Manually adjust the balance of the image in a variety of "
|
||||
"color spaces. Best used with the Preview tool to set correct values.\n"
|
||||
"L|match-hist: Adjust the histogram of each color channel in the swapped "
|
||||
"reconstruction to equal the histogram of the masked area in the original "
|
||||
"image.\n"
|
||||
"L|seamless-clone: Use cv2's seamless clone function to remove extreme "
|
||||
"gradients at the mask seam by smoothing colors. Generally does not give very "
|
||||
"satisfactory results.\n"
|
||||
"L|none: Don't perform color adjustment."
|
||||
msgstr ""
|
||||
"R|Realiza un ajuste de color a la cara intercambiada. Algunas de estas "
|
||||
"opciones tienen ajustes configurables en '/config/convert.ini' o 'Ajustes > "
|
||||
"Configurar Extensiones de Conversión':\n"
|
||||
"L|avg-color: Ajuste la media de cada canal de color en la reconstrucción "
|
||||
"intercambiada para igualar la media del área enmascarada en la imagen "
|
||||
"original.\n"
|
||||
"L|color-transfer: Transfiere la distribución del color de la imagen de "
|
||||
"origen a la de destino utilizando la media y las desviaciones estándar del "
|
||||
"espacio de color L*a*b*.\n"
|
||||
"L|manual-balance: Ajuste manualmente el equilibrio de la imagen en una "
|
||||
"variedad de espacios de color. Se utiliza mejor con la herramienta de vista "
|
||||
"previa para establecer los valores correctos.\n"
|
||||
"L|match-hist: Ajuste el histograma de cada canal de color en la "
|
||||
"reconstrucción intercambiada para igualar el histograma del área enmascarada "
|
||||
"en la imagen original.\n"
|
||||
"L|seamless-clone: Utilice la función de clonación sin costuras de cv2 para "
|
||||
"eliminar los gradientes extremos en la costura de la máscara, suavizando los "
|
||||
"colores. Generalmente no da resultados muy satisfactorios.\n"
|
||||
"L|none: No realice el ajuste de color."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:527
|
||||
msgid ""
|
||||
"R|Masker to use. NB: The mask you require must exist within the alignments "
|
||||
"file. You can add additional masks with the Mask Tool.\n"
|
||||
"L|none: Don't use a mask.\n"
|
||||
"L|bisenet-fp_face: Relatively lightweight NN based mask that provides more "
|
||||
"refined control over the area to be masked (configurable in mask settings). "
|
||||
"Use this version of bisenet-fp if your model is trained with 'face' or "
|
||||
"'legacy' centering.\n"
|
||||
"L|bisenet-fp_head: Relatively lightweight NN based mask that provides more "
|
||||
"refined control over the area to be masked (configurable in mask settings). "
|
||||
"Use this version of bisenet-fp if your model is trained with 'head' "
|
||||
"centering.\n"
|
||||
"L|custom_face: Custom user created, face centered mask.\n"
|
||||
"L|custom_head: Custom user created, head centered mask.\n"
|
||||
"L|components: Mask designed to provide facial segmentation based on the "
|
||||
"positioning of landmark locations. A convex hull is constructed around the "
|
||||
"exterior of the landmarks to create a mask.\n"
|
||||
"L|extended: Mask designed to provide facial segmentation based on the "
|
||||
"positioning of landmark locations. A convex hull is constructed around the "
|
||||
"exterior of the landmarks and the mask is extended upwards onto the "
|
||||
"forehead.\n"
|
||||
"L|vgg-clear: Mask designed to provide smart segmentation of mostly frontal "
|
||||
"faces clear of obstructions. Profile faces and obstructions may result in "
|
||||
"sub-par performance.\n"
|
||||
"L|vgg-obstructed: Mask designed to provide smart segmentation of mostly "
|
||||
"frontal faces. The mask model has been specifically trained to recognize "
|
||||
"some facial obstructions (hands and eyeglasses). Profile faces may result in "
|
||||
"sub-par performance.\n"
|
||||
"L|unet-dfl: Mask designed to provide smart segmentation of mostly frontal "
|
||||
"faces. The mask model has been trained by community members and will need "
|
||||
"testing for further description. Profile faces may result in sub-par "
|
||||
"performance.\n"
|
||||
"L|predicted: If the 'Learn Mask' option was enabled during training, this "
|
||||
"will use the mask that was created by the trained model."
|
||||
msgstr ""
|
||||
"R|Máscara a utilizar. NB: La máscara que necesita debe existir en el archivo "
|
||||
"de alineaciones. Puede añadir máscaras adicionales con la herramienta de "
|
||||
"máscaras.\n"
|
||||
"L|none: No utilizar una máscara.\n"
|
||||
"L|bisenet-fp-face: Máscara relativamente ligera basada en NN que proporciona "
|
||||
"un control más refinado sobre el área a enmascarar (configurable en la "
|
||||
"configuración de la máscara). Utilice esta versión de bisenet-fp si su "
|
||||
"modelo está entrenado con centrado 'face' o 'legacy'.\n"
|
||||
"L|bisenet-fp-head: Máscara relativamente ligera basada en NN que proporciona "
|
||||
"un control más refinado sobre el área a enmascarar (configurable en la "
|
||||
"configuración de la máscara). Utilice esta versión de bisenet-fp si su "
|
||||
"modelo está entrenado con centrado de 'cabeza'.\n"
|
||||
"L|custom_face: Máscara personalizada creada por el usuario y centrada en el "
|
||||
"rostro..\n"
|
||||
"L|custom_head: Máscara personalizada centrada en la cabeza creada por el "
|
||||
"usuario.\n"
|
||||
"L|components: Máscara diseñada para proporcionar una segmentación facial "
|
||||
"basada en el posicionamiento de las ubicaciones de los puntos de referencia. "
|
||||
"Se construye un casco convexo alrededor del exterior de los puntos de "
|
||||
"referencia para crear una máscara.\n"
|
||||
"L|extended: Máscara diseñada para proporcionar una segmentación facial "
|
||||
"basada en el posicionamiento de las ubicaciones de los puntos de referencia. "
|
||||
"Se construye un casco convexo alrededor del exterior de los puntos de "
|
||||
"referencia y la máscara se extiende hacia arriba en la frente.\n"
|
||||
"L|vgg-clear: Máscara diseñada para proporcionar una segmentación inteligente "
|
||||
"de rostros principalmente frontales y libres de obstrucciones. Los rostros "
|
||||
"de perfil y las obstrucciones pueden dar lugar a un rendimiento inferior.\n"
|
||||
"L|vgg-obstructed: Máscara diseñada para proporcionar una segmentación "
|
||||
"inteligente de rostros principalmente frontales. El modelo de la máscara ha "
|
||||
"sido entrenado específicamente para reconocer algunas obstrucciones faciales "
|
||||
"(manos y gafas). Los rostros de perfil pueden dar lugar a un rendimiento "
|
||||
"inferior.\n"
|
||||
"L|unet-dfl: Máscara diseñada para proporcionar una segmentación inteligente "
|
||||
"de rostros principalmente frontales. El modelo de máscara ha sido entrenado "
|
||||
"por los miembros de la comunidad y necesitará ser probado para una mayor "
|
||||
"descripción. Los rostros de perfil pueden dar lugar a un rendimiento "
|
||||
"inferior.\n"
|
||||
"L|predicted: Si la opción 'Learn Mask' se habilitó durante el entrenamiento, "
|
||||
"esto usará la máscara que fue creada por el modelo entrenado."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:566
|
||||
msgid ""
|
||||
"R|The plugin to use to output the converted images. The writers are "
|
||||
"configurable in '/config/convert.ini' or 'Settings > Configure Convert "
|
||||
"Plugins:'\n"
|
||||
"L|ffmpeg: [video] Writes out the convert straight to video. When the input "
|
||||
"is a series of images then the '-ref' (--reference-video) parameter must be "
|
||||
"set.\n"
|
||||
"L|gif: [animated image] Create an animated gif.\n"
|
||||
"L|opencv: [images] The fastest image writer, but less options and formats "
|
||||
"than other plugins.\n"
|
||||
"L|patch: [images] Outputs the raw swapped face patch, along with the "
|
||||
"transformation matrix required to re-insert the face back into the original "
|
||||
"frame. Use this option if you wish to post-process and composite the final "
|
||||
"face within external tools.\n"
|
||||
"L|pillow: [images] Slower than opencv, but has more options and supports "
|
||||
"more formats."
|
||||
msgstr ""
|
||||
"R|El plugin a utilizar para dar salida a las imágenes convertidas. Los "
|
||||
"escritores son configurables en '/config/convert.ini' o 'Ajustes > "
|
||||
"Configurar Extensiones de Conversión:'\n"
|
||||
"L|ffmpeg: [video] Escribe la conversión directamente en vídeo. Cuando la "
|
||||
"entrada es una serie de imágenes, el parámetro '-ref' (--reference-video) "
|
||||
"debe ser establecido.\n"
|
||||
"L|gif: [imagen animada] Crea un gif animado.\n"
|
||||
"L|opencv: [images] El escritor de imágenes más rápido, pero con menos "
|
||||
"opciones y formatos que otros plugins.\n"
|
||||
"L|patch: [images] Genera el parche de cara intercambiado sin formato, junto "
|
||||
"con la matriz de transformación necesaria para volver a insertar la cara en "
|
||||
"el marco original.\n"
|
||||
"L|pillow: [images] Más lento que opencv, pero tiene más opciones y soporta "
|
||||
"más formatos."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:587 lib/cli/args_extract_convert.py:596
|
||||
#: lib/cli/args_extract_convert.py:707
|
||||
msgid "Frame Processing"
|
||||
msgstr "Proceso de fotogramas"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:589
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Scale the final output frames by this amount. 100%% will output the frames "
|
||||
"at source dimensions. 50%% at half size 200%% at double size"
|
||||
msgstr ""
|
||||
"Escala los fotogramas finales de salida en esta cantidad. 100%% dará salida "
|
||||
"a los fotogramas a las dimensiones de origen. 50%% a la mitad de tamaño. "
|
||||
"200%% al doble de tamaño"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:598
|
||||
msgid ""
|
||||
"Frame ranges to apply transfer to e.g. For frames 10 to 50 and 90 to 100 use "
|
||||
"--frame-ranges 10-50 90-100. Frames falling outside of the selected range "
|
||||
"will be discarded unless '-k' (--keep-unchanged) is selected. NB: If you are "
|
||||
"converting from images, then the filenames must end with the frame-number!"
|
||||
msgstr ""
|
||||
"Rangos de fotogramas a los que aplicar la transferencia, por ejemplo, para "
|
||||
"los fotogramas de 10 a 50 y de 90 a 100 utilice --frame-ranges 10-50 90-100. "
|
||||
"Los fotogramas que queden fuera del rango seleccionado se descartarán a "
|
||||
"menos que se seleccione '-k' (--keep-unchanged). Nota: Si está convirtiendo "
|
||||
"imágenes, ¡los nombres de los archivos deben terminar con el número de "
|
||||
"fotograma!"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:612
|
||||
msgid ""
|
||||
"Scale the swapped face by this percentage. Positive values will enlarge the "
|
||||
"face, Negative values will shrink the face."
|
||||
msgstr ""
|
||||
"Escale la cara intercambiada según este porcentaje. Los valores positivos "
|
||||
"agrandarán la cara, los valores negativos la reducirán."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:621
|
||||
msgid ""
|
||||
"If you have not cleansed your alignments file, then you can filter out faces "
|
||||
"by defining a folder here that contains the faces extracted from your input "
|
||||
"files/video. If this folder is defined, then only faces that exist within "
|
||||
"your alignments file and also exist within the specified folder will be "
|
||||
"converted. Leaving this blank will convert all faces that exist within the "
|
||||
"alignments file."
|
||||
msgstr ""
|
||||
"Si no ha limpiado su archivo de alineaciones, puede filtrar las caras "
|
||||
"definiendo aquí una carpeta que contenga las caras extraídas de sus archivos/"
|
||||
"vídeos de entrada. Si se define esta carpeta, sólo se convertirán las caras "
|
||||
"que existan en el archivo de alineaciones y también en la carpeta "
|
||||
"especificada. Si se deja en blanco, se convertirán todas las caras que "
|
||||
"existan en el archivo de alineaciones."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:636
|
||||
msgid ""
|
||||
"Optionally filter out people who you do not wish to process by passing in an "
|
||||
"image of that person. Should be a front portrait with a single person in the "
|
||||
"image. Multiple images can be added space separated. NB: Using face filter "
|
||||
"will significantly decrease extraction speed and its accuracy cannot be "
|
||||
"guaranteed."
|
||||
msgstr ""
|
||||
"Opcionalmente, puede filtrar las personas que no desea procesar pasando una "
|
||||
"imagen de esa persona. Debe ser un retrato frontal con una sola persona en "
|
||||
"la imagen. Se pueden añadir varias imágenes separadas por espacios. NB: El "
|
||||
"uso del filtro de caras disminuirá significativamente la velocidad de "
|
||||
"extracción y no se puede garantizar su precisión."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:649
|
||||
msgid ""
|
||||
"Optionally select people you wish to process by passing in an image of that "
|
||||
"person. Should be a front portrait with a single person in the image. "
|
||||
"Multiple images can be added space separated. NB: Using face filter will "
|
||||
"significantly decrease extraction speed and its accuracy cannot be "
|
||||
"guaranteed."
|
||||
msgstr ""
|
||||
"Opcionalmente, seleccione las personas que desea procesar pasando una imagen "
|
||||
"de esa persona. Debe ser un retrato frontal con una sola persona en la "
|
||||
"imagen. Se pueden añadir varias imágenes separadas por espacios. NB: El uso "
|
||||
"del filtro facial disminuirá significativamente la velocidad de extracción y "
|
||||
"no se puede garantizar su precisión."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:663
|
||||
msgid ""
|
||||
"For use with the optional nfilter/filter files. Threshold for positive face "
|
||||
"recognition. Lower values are stricter. NB: Using face filter will "
|
||||
"significantly decrease extraction speed and its accuracy cannot be "
|
||||
"guaranteed."
|
||||
msgstr ""
|
||||
"Para usar con los archivos opcionales nfilter/filter. Umbral para el "
|
||||
"reconocimiento positivo de caras. Los valores más bajos son más estrictos. "
|
||||
"NB: El uso del filtro facial disminuirá significativamente la velocidad de "
|
||||
"extracción y no se puede garantizar su precisión."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:676
|
||||
msgid ""
|
||||
"The maximum number of parallel processes for performing conversion. "
|
||||
"Converting images is system RAM heavy so it is possible to run out of memory "
|
||||
"if you have a lot of processes and not enough RAM to accommodate them all. "
|
||||
"Setting this to 0 will use the maximum available. No matter what you set "
|
||||
"this to, it will never attempt to use more processes than are available on "
|
||||
"your system. If singleprocess is enabled this setting will be ignored."
|
||||
msgstr ""
|
||||
"El número máximo de procesos paralelos para realizar la conversión. La "
|
||||
"conversión de imágenes requiere mucha RAM del sistema, por lo que es posible "
|
||||
"que se agote la memoria si tiene muchos procesos y no hay suficiente RAM "
|
||||
"para acomodarlos a todos. Si se ajusta a 0, se utilizará el máximo "
|
||||
"disponible. No importa lo que establezca, nunca intentará utilizar más "
|
||||
"procesos que los disponibles en su sistema. Si 'singleprocess' está "
|
||||
"habilitado, este ajuste será ignorado."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:688
|
||||
msgid ""
|
||||
"[LEGACY] This only needs to be selected if a legacy model is being loaded or "
|
||||
"if there are multiple models in the model folder"
|
||||
msgstr ""
|
||||
"[LEGACY] Sólo es necesario seleccionar esta opción si se está cargando un "
|
||||
"modelo heredado si hay varios modelos en la carpeta de modelos"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:697
|
||||
msgid ""
|
||||
"Enable On-The-Fly Conversion. NOT recommended. You should generate a clean "
|
||||
"alignments file for your destination video. However, if you wish you can "
|
||||
"generate the alignments on-the-fly by enabling this option. This will use an "
|
||||
"inferior extraction pipeline and will lead to substandard results. If an "
|
||||
"alignments file is found, this option will be ignored."
|
||||
msgstr ""
|
||||
"Activar la conversión sobre la marcha. NO se recomienda. Debe generar un "
|
||||
"archivo de alineación limpio para su vídeo de destino. Sin embargo, si lo "
|
||||
"desea, puede generar las alineaciones sobre la marcha activando esta opción. "
|
||||
"Esto utilizará una tubería de extracción inferior y conducirá a resultados "
|
||||
"de baja calidad. Si se encuentra un archivo de alineaciones, esta opción "
|
||||
"será ignorada."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:709
|
||||
msgid ""
|
||||
"When used with --frame-ranges outputs the unchanged frames that are not "
|
||||
"processed instead of discarding them."
|
||||
msgstr ""
|
||||
"Cuando se usa con --frame-ranges, la salida incluye los fotogramas no "
|
||||
"procesados en vez de descartarlos."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:717
|
||||
msgid "Swap the model. Instead converting from of A -> B, converts B -> A"
|
||||
msgstr ""
|
||||
"Intercambiar el modelo. En vez de convertir de A a B, convierte de B a A"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:723
|
||||
msgid "Disable multiprocessing. Slower but less resource intensive."
|
||||
msgstr "Desactiva el multiproceso. Es más lento, pero usa menos recursos."
|
BIN
locales/es/LC_MESSAGES/lib.cli.args_train.mo
Normal file
BIN
locales/es/LC_MESSAGES/lib.cli.args_train.mo
Normal file
Binary file not shown.
380
locales/es/LC_MESSAGES/lib.cli.args_train.po
Executable file
380
locales/es/LC_MESSAGES/lib.cli.args_train.po
Executable file
|
@ -0,0 +1,380 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR ORGANIZATION
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: faceswap.spanish\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-03-28 18:04+0000\n"
|
||||
"PO-Revision-Date: 2024-03-28 18:09+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: tokafondo\n"
|
||||
"Language: es\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#: lib/cli/args_train.py:30
|
||||
msgid ""
|
||||
"Train a model on extracted original (A) and swap (B) faces.\n"
|
||||
"Training models can take a long time. Anything from 24hrs to over a week\n"
|
||||
"Model plugins can be configured in the 'Settings' Menu"
|
||||
msgstr ""
|
||||
"Entrene un modelo con las caras originales (A) e intercambiadas (B) "
|
||||
"extraídas.\n"
|
||||
"El entrenamiento de los modelos puede llevar mucho tiempo. Desde 24 horas "
|
||||
"hasta más de una semana.\n"
|
||||
"Los plugins de los modelos pueden configurarse en el menú \"Ajustes\""
|
||||
|
||||
#: lib/cli/args_train.py:49 lib/cli/args_train.py:58
|
||||
msgid "faces"
|
||||
msgstr "caras"
|
||||
|
||||
#: lib/cli/args_train.py:51
|
||||
msgid ""
|
||||
"Input directory. A directory containing training images for face A. This is "
|
||||
"the original face, i.e. the face that you want to remove and replace with "
|
||||
"face B."
|
||||
msgstr ""
|
||||
"Directorio de entrada. Un directorio que contiene imágenes de entrenamiento "
|
||||
"para la cara A. Esta es la cara original, es decir, la cara que se quiere "
|
||||
"eliminar y sustituir por la cara B."
|
||||
|
||||
#: lib/cli/args_train.py:60
|
||||
msgid ""
|
||||
"Input directory. A directory containing training images for face B. This is "
|
||||
"the swap face, i.e. the face that you want to place onto the head of person "
|
||||
"A."
|
||||
msgstr ""
|
||||
"Directorio de entrada. Un directorio que contiene imágenes de entrenamiento "
|
||||
"para la cara B. Esta es la cara de intercambio, es decir, la cara que se "
|
||||
"quiere colocar en la cabeza de la persona A."
|
||||
|
||||
#: lib/cli/args_train.py:67 lib/cli/args_train.py:80 lib/cli/args_train.py:97
|
||||
#: lib/cli/args_train.py:123 lib/cli/args_train.py:133
|
||||
msgid "model"
|
||||
msgstr "modelo"
|
||||
|
||||
#: lib/cli/args_train.py:69
|
||||
msgid ""
|
||||
"Model directory. This is where the training data will be stored. You should "
|
||||
"always specify a new folder for new models. If starting a new model, select "
|
||||
"either an empty folder, or a folder which does not exist (which will be "
|
||||
"created). If continuing to train an existing model, specify the location of "
|
||||
"the existing model."
|
||||
msgstr ""
|
||||
"Directorio del modelo. Aquí es donde se almacenarán los datos de "
|
||||
"entrenamiento. Siempre debe especificar una nueva carpeta para los nuevos "
|
||||
"modelos. Si se inicia un nuevo modelo, seleccione una carpeta vacía o una "
|
||||
"carpeta que no exista (que se creará). Si continúa entrenando un modelo "
|
||||
"existente, especifique la ubicación del modelo existente."
|
||||
|
||||
#: lib/cli/args_train.py:82
|
||||
msgid ""
|
||||
"R|Load the weights from a pre-existing model into a newly created model. For "
|
||||
"most models this will load weights from the Encoder of the given model into "
|
||||
"the encoder of the newly created model. Some plugins may have specific "
|
||||
"configuration options allowing you to load weights from other layers. "
|
||||
"Weights will only be loaded when creating a new model. This option will be "
|
||||
"ignored if you are resuming an existing model. Generally you will also want "
|
||||
"to 'freeze-weights' whilst the rest of your model catches up with your "
|
||||
"Encoder.\n"
|
||||
"NB: Weights can only be loaded from models of the same plugin as you intend "
|
||||
"to train."
|
||||
msgstr ""
|
||||
"R|Cargue los pesos de un modelo preexistente en un modelo recién creado. "
|
||||
"Para la mayoría de los modelos, esto cargará pesos del codificador del "
|
||||
"modelo dado en el codificador del modelo recién creado. Algunos complementos "
|
||||
"pueden tener opciones de configuración específicas que le permiten cargar "
|
||||
"pesos de otras capas. Los pesos solo se cargarán al crear un nuevo modelo. "
|
||||
"Esta opción se ignorará si está reanudando un modelo existente. En general, "
|
||||
"también querrá 'congelar pesos' mientras el resto de su modelo se pone al "
|
||||
"día con su codificador.\n"
|
||||
"NB: Los pesos solo se pueden cargar desde modelos del mismo complemento que "
|
||||
"desea entrenar."
|
||||
|
||||
#: lib/cli/args_train.py:99
|
||||
msgid ""
|
||||
"R|Select which trainer to use. Trainers can be configured from the Settings "
|
||||
"menu or the config folder.\n"
|
||||
"L|original: The original model created by /u/deepfakes.\n"
|
||||
"L|dfaker: 64px in/128px out model from dfaker. Enable 'warp-to-landmarks' "
|
||||
"for full dfaker method.\n"
|
||||
"L|dfl-h128: 128px in/out model from deepfacelab\n"
|
||||
"L|dfl-sae: Adaptable model from deepfacelab\n"
|
||||
"L|dlight: A lightweight, high resolution DFaker variant.\n"
|
||||
"L|iae: A model that uses intermediate layers to try to get better details\n"
|
||||
"L|lightweight: A lightweight model for low-end cards. Don't expect great "
|
||||
"results. Can train as low as 1.6GB with batch size 8.\n"
|
||||
"L|realface: A high detail, dual density model based on DFaker, with "
|
||||
"customizable in/out resolution. The autoencoders are unbalanced so B>A swaps "
|
||||
"won't work so well. By andenixa et al. Very configurable.\n"
|
||||
"L|unbalanced: 128px in/out model from andenixa. The autoencoders are "
|
||||
"unbalanced so B>A swaps won't work so well. Very configurable.\n"
|
||||
"L|villain: 128px in/out model from villainguy. Very resource hungry (You "
|
||||
"will require a GPU with a fair amount of VRAM). Good for details, but more "
|
||||
"susceptible to color differences."
|
||||
msgstr ""
|
||||
"R|Seleccione el entrenador que desea utilizar. Los entrenadores se pueden "
|
||||
"configurar desde el menú de configuración o la carpeta de configuración.\n"
|
||||
"L|original: El modelo original creado por /u/deepfakes.\n"
|
||||
"L|dfaker: Modelo de 64px in/128px out de dfaker. Habilitar 'warp-to-"
|
||||
"landmarks' para el método completo de dfaker.\n"
|
||||
"L|dfl-h128: modelo de 128px in/out de deepfacelab\n"
|
||||
"L|dfl-sae: Modelo adaptable de deepfacelab\n"
|
||||
"L|dlight: Una variante de DFaker ligera y de alta resolución.\n"
|
||||
"L|iae: Un modelo que utiliza capas intermedias para tratar de obtener "
|
||||
"mejores detalles.\n"
|
||||
"L|lightweight: Un modelo ligero para tarjetas de gama baja. No esperes "
|
||||
"grandes resultados. Puede entrenar hasta 1,6GB con tamaño de lote 8.\n"
|
||||
"L|realface: Un modelo de alto detalle y doble densidad basado en DFaker, con "
|
||||
"resolución de entrada y salida personalizable. Los autocodificadores están "
|
||||
"desequilibrados, por lo que los intercambios B>A no funcionan tan bien. Por "
|
||||
"andenixa et al. Muy configurable\n"
|
||||
"L|Unbalanced: modelo de 128px de entrada/salida de andenixa. Los "
|
||||
"autocodificadores están desequilibrados por lo que los intercambios B>A no "
|
||||
"funcionarán tan bien. Muy configurable\n"
|
||||
"L|villain: Modelo de 128px de entrada/salida de villainguy. Requiere muchos "
|
||||
"recursos (se necesita una GPU con una buena cantidad de VRAM). Bueno para "
|
||||
"los detalles, pero más susceptible a las diferencias de color."
|
||||
|
||||
#: lib/cli/args_train.py:125
|
||||
msgid ""
|
||||
"Output a summary of the model and exit. If a model folder is provided then a "
|
||||
"summary of the saved model is displayed. Otherwise a summary of the model "
|
||||
"that would be created by the chosen plugin and configuration settings is "
|
||||
"displayed."
|
||||
msgstr ""
|
||||
"Genere un resumen del modelo y salga. Si se proporciona una carpeta de "
|
||||
"modelo, se muestra un resumen del modelo guardado. De lo contrario, se "
|
||||
"muestra un resumen del modelo que crearía el complemento elegido y los "
|
||||
"ajustes de configuración."
|
||||
|
||||
#: lib/cli/args_train.py:135
|
||||
msgid ""
|
||||
"Freeze the weights of the model. Freezing weights means that some of the "
|
||||
"parameters in the model will no longer continue to learn, but those that are "
|
||||
"not frozen will continue to learn. For most models, this will freeze the "
|
||||
"encoder, but some models may have configuration options for freezing other "
|
||||
"layers."
|
||||
msgstr ""
|
||||
"Congele los pesos del modelo. Congelar pesos significa que algunos de los "
|
||||
"parámetros del modelo ya no seguirán aprendiendo, pero los que no están "
|
||||
"congelados seguirán aprendiendo. Para la mayoría de los modelos, esto "
|
||||
"congelará el codificador, pero algunos modelos pueden tener opciones de "
|
||||
"configuración para congelar otras capas."
|
||||
|
||||
#: lib/cli/args_train.py:147 lib/cli/args_train.py:160
|
||||
#: lib/cli/args_train.py:175 lib/cli/args_train.py:191
|
||||
#: lib/cli/args_train.py:200
|
||||
msgid "training"
|
||||
msgstr "entrenamiento"
|
||||
|
||||
#: lib/cli/args_train.py:149
|
||||
msgid ""
|
||||
"Batch size. This is the number of images processed through the model for "
|
||||
"each side per iteration. NB: As the model is fed 2 sides at a time, the "
|
||||
"actual number of images within the model at any one time is double the "
|
||||
"number that you set here. Larger batches require more GPU RAM."
|
||||
msgstr ""
|
||||
"Tamaño del lote. Este es el número de imágenes procesadas a través del "
|
||||
"modelo para cada lado por iteración. Nota: Como el modelo se alimenta de 2 "
|
||||
"lados a la vez, el número real de imágenes dentro del modelo en cualquier "
|
||||
"momento es el doble del número que se establece aquí. Los lotes más grandes "
|
||||
"requieren más RAM de la GPU."
|
||||
|
||||
#: lib/cli/args_train.py:162
|
||||
msgid ""
|
||||
"Length of training in iterations. This is only really used for automation. "
|
||||
"There is no 'correct' number of iterations a model should be trained for. "
|
||||
"You should stop training when you are happy with the previews. However, if "
|
||||
"you want the model to stop automatically at a set number of iterations, you "
|
||||
"can set that value here."
|
||||
msgstr ""
|
||||
"Duración del entrenamiento en iteraciones. Esto sólo se utiliza realmente "
|
||||
"para la automatización. No hay un número 'correcto' de iteraciones para las "
|
||||
"que deba entrenarse un modelo. Debe dejar de entrenar cuando esté satisfecho "
|
||||
"con las previsiones. Sin embargo, si desea que el modelo se detenga "
|
||||
"automáticamente en un número determinado de iteraciones, puede establecer "
|
||||
"ese valor aquí."
|
||||
|
||||
#: lib/cli/args_train.py:177
|
||||
msgid ""
|
||||
"R|Select the distribution stategy to use.\n"
|
||||
"L|default: Use Tensorflow's default distribution strategy.\n"
|
||||
"L|central-storage: Centralizes variables on the CPU whilst operations are "
|
||||
"performed on 1 or more local GPUs. This can help save some VRAM at the cost "
|
||||
"of some speed by not storing variables on the GPU. Note: Mixed-Precision is "
|
||||
"not supported on multi-GPU setups.\n"
|
||||
"L|mirrored: Supports synchronous distributed training across multiple local "
|
||||
"GPUs. A copy of the model and all variables are loaded onto each GPU with "
|
||||
"batches distributed to each GPU at each iteration."
|
||||
msgstr ""
|
||||
"562 / 5,000\n"
|
||||
"Translation results\n"
|
||||
"R|Seleccione la estrategia de distribución a utilizar.\n"
|
||||
"L|default: utiliza la estrategia de distribución predeterminada de "
|
||||
"Tensorflow.\n"
|
||||
"L|central-storage: centraliza las variables en la CPU mientras que las "
|
||||
"operaciones se realizan en 1 o más GPU locales. Esto puede ayudar a ahorrar "
|
||||
"algo de VRAM a costa de cierta velocidad al no almacenar variables en la "
|
||||
"GPU. Nota: Mixed-Precision no es compatible con configuraciones de múltiples "
|
||||
"GPU.\n"
|
||||
"L|mirrored: Admite el entrenamiento distribuido síncrono en varias GPU "
|
||||
"locales. Se carga una copia del modelo y todas las variables en cada GPU con "
|
||||
"lotes distribuidos a cada GPU en cada iteración."
|
||||
|
||||
#: lib/cli/args_train.py:193
|
||||
msgid ""
|
||||
"Disables TensorBoard logging. NB: Disabling logs means that you will not be "
|
||||
"able to use the graph or analysis for this session in the GUI."
|
||||
msgstr ""
|
||||
"Desactiva el registro de TensorBoard. NB: Desactivar los registros significa "
|
||||
"que no podrá utilizar el gráfico o el análisis de esta sesión en la GUI."
|
||||
|
||||
#: lib/cli/args_train.py:202
|
||||
msgid ""
|
||||
"Use the Learning Rate Finder to discover the optimal learning rate for "
|
||||
"training. For new models, this will calculate the optimal learning rate for "
|
||||
"the model. For existing models this will use the optimal learning rate that "
|
||||
"was discovered when initializing the model. Setting this option will ignore "
|
||||
"the manually configured learning rate (configurable in train settings)."
|
||||
msgstr ""
|
||||
"Utilice el Buscador de tasa de aprendizaje para descubrir la tasa de "
|
||||
"aprendizaje óptima para la capacitación. Para modelos nuevos, esto calculará "
|
||||
"la tasa de aprendizaje óptima para el modelo. Para los modelos existentes, "
|
||||
"esto utilizará la tasa de aprendizaje óptima que se descubrió al inicializar "
|
||||
"el modelo. Configurar esta opción ignorará la tasa de aprendizaje "
|
||||
"configurada manualmente (configurable en la configuración del tren)."
|
||||
|
||||
#: lib/cli/args_train.py:215 lib/cli/args_train.py:225
|
||||
msgid "Saving"
|
||||
msgstr "Guardar"
|
||||
|
||||
#: lib/cli/args_train.py:216
|
||||
msgid "Sets the number of iterations between each model save."
|
||||
msgstr "Establece el número de iteraciones entre cada guardado del modelo."
|
||||
|
||||
#: lib/cli/args_train.py:227
|
||||
msgid ""
|
||||
"Sets the number of iterations before saving a backup snapshot of the model "
|
||||
"in it's current state. Set to 0 for off."
|
||||
msgstr ""
|
||||
"Establece el número de iteraciones antes de guardar una copia de seguridad "
|
||||
"del modelo en su estado actual. Establece 0 para que esté desactivado."
|
||||
|
||||
#: lib/cli/args_train.py:234 lib/cli/args_train.py:246
|
||||
#: lib/cli/args_train.py:258
|
||||
msgid "timelapse"
|
||||
msgstr "intervalo"
|
||||
|
||||
#: lib/cli/args_train.py:236
|
||||
msgid ""
|
||||
"Optional for creating a timelapse. Timelapse will save an image of your "
|
||||
"selected faces into the timelapse-output folder at every save iteration. "
|
||||
"This should be the input folder of 'A' faces that you would like to use for "
|
||||
"creating the timelapse. You must also supply a --timelapse-output and a --"
|
||||
"timelapse-input-B parameter."
|
||||
msgstr ""
|
||||
"Opcional para crear un timelapse. Timelapse guardará una imagen de las caras "
|
||||
"seleccionadas en la carpeta timelapse-output en cada iteración de guardado. "
|
||||
"Esta debe ser la carpeta de entrada de las caras \"A\" que desea utilizar "
|
||||
"para crear el timelapse. También debe suministrar un parámetro --timelapse-"
|
||||
"output y un parámetro --timelapse-input-B."
|
||||
|
||||
#: lib/cli/args_train.py:248
|
||||
msgid ""
|
||||
"Optional for creating a timelapse. Timelapse will save an image of your "
|
||||
"selected faces into the timelapse-output folder at every save iteration. "
|
||||
"This should be the input folder of 'B' faces that you would like to use for "
|
||||
"creating the timelapse. You must also supply a --timelapse-output and a --"
|
||||
"timelapse-input-A parameter."
|
||||
msgstr ""
|
||||
"Opcional para crear un timelapse. Timelapse guardará una imagen de las caras "
|
||||
"seleccionadas en la carpeta timelapse-output en cada iteración de guardado. "
|
||||
"Esta debe ser la carpeta de entrada de las caras \"B\" que desea utilizar "
|
||||
"para crear el timelapse. También debe suministrar un parámetro --timelapse-"
|
||||
"output y un parámetro --timelapse-input-A."
|
||||
|
||||
#: lib/cli/args_train.py:260
|
||||
msgid ""
|
||||
"Optional for creating a timelapse. Timelapse will save an image of your "
|
||||
"selected faces into the timelapse-output folder at every save iteration. If "
|
||||
"the input folders are supplied but no output folder, it will default to your "
|
||||
"model folder/timelapse/"
|
||||
msgstr ""
|
||||
"Opcional para crear un timelapse. Timelapse guardará una imagen de las caras "
|
||||
"seleccionadas en la carpeta timelapse-output en cada iteración de guardado. "
|
||||
"Si se suministran las carpetas de entrada pero no la carpeta de salida, se "
|
||||
"guardará por defecto en la carpeta del modelo/timelapse/"
|
||||
|
||||
#: lib/cli/args_train.py:269 lib/cli/args_train.py:276
|
||||
msgid "preview"
|
||||
msgstr "previsualización"
|
||||
|
||||
#: lib/cli/args_train.py:270
|
||||
msgid "Show training preview output. in a separate window."
|
||||
msgstr ""
|
||||
"Mostrar la salida de la vista previa del entrenamiento. en una ventana "
|
||||
"separada."
|
||||
|
||||
#: lib/cli/args_train.py:278
|
||||
msgid ""
|
||||
"Writes the training result to a file. The image will be stored in the root "
|
||||
"of your FaceSwap folder."
|
||||
msgstr ""
|
||||
"Escribe el resultado del entrenamiento en un archivo. La imagen se "
|
||||
"almacenará en la raíz de su carpeta FaceSwap."
|
||||
|
||||
#: lib/cli/args_train.py:285 lib/cli/args_train.py:295
|
||||
#: lib/cli/args_train.py:305 lib/cli/args_train.py:315
|
||||
msgid "augmentation"
|
||||
msgstr "aumento"
|
||||
|
||||
#: lib/cli/args_train.py:287
|
||||
msgid ""
|
||||
"Warps training faces to closely matched Landmarks from the opposite face-set "
|
||||
"rather than randomly warping the face. This is the 'dfaker' way of doing "
|
||||
"warping."
|
||||
msgstr ""
|
||||
"Deforma las caras de entrenamiento a puntos de referencia muy parecidos del "
|
||||
"conjunto de caras opuestas en lugar de deformar la cara al azar. Esta es la "
|
||||
"forma 'dfaker' de hacer la deformación."
|
||||
|
||||
#: lib/cli/args_train.py:297
|
||||
msgid ""
|
||||
"To effectively learn, a random set of images are flipped horizontally. "
|
||||
"Sometimes it is desirable for this not to occur. Generally this should be "
|
||||
"left off except for during 'fit training'."
|
||||
msgstr ""
|
||||
"Para aprender de forma efectiva, se voltea horizontalmente un conjunto "
|
||||
"aleatorio de imágenes. A veces es deseable que esto no ocurra. Por lo "
|
||||
"general, esto debería dejarse sin efecto, excepto durante el 'entrenamiento "
|
||||
"de ajuste'."
|
||||
|
||||
#: lib/cli/args_train.py:307
|
||||
msgid ""
|
||||
"Color augmentation helps make the model less susceptible to color "
|
||||
"differences between the A and B sets, at an increased training time cost. "
|
||||
"Enable this option to disable color augmentation."
|
||||
msgstr ""
|
||||
"El aumento del color ayuda a que el modelo sea menos susceptible a las "
|
||||
"diferencias de color entre los conjuntos A y B, con un mayor coste de tiempo "
|
||||
"de entrenamiento. Activa esta opción para desactivar el aumento de color."
|
||||
|
||||
#: lib/cli/args_train.py:317
|
||||
msgid ""
|
||||
"Warping is integral to training the Neural Network. This option should only "
|
||||
"be enabled towards the very end of training to try to bring out more detail. "
|
||||
"Think of it as 'fine-tuning'. Enabling this option from the beginning is "
|
||||
"likely to kill a model and lead to terrible results."
|
||||
msgstr ""
|
||||
"La deformación es fundamental para el entrenamiento de la red neuronal. Esta "
|
||||
"opción sólo debería activarse hacia el final del entrenamiento para tratar "
|
||||
"de obtener más detalles. Piense en ello como un 'ajuste fino'. Si se activa "
|
||||
"esta opción desde el principio, es probable que arruine el modelo y se "
|
||||
"obtengan resultados terribles."
|
Binary file not shown.
|
@ -6,8 +6,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: faceswap.spanish\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-02-24 00:27+0000\n"
|
||||
"PO-Revision-Date: 2023-02-24 00:36+0000\n"
|
||||
"POT-Creation-Date: 2024-03-28 23:49+0000\n"
|
||||
"PO-Revision-Date: 2024-03-29 00:02+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: tokafondo\n"
|
||||
"Language: es_ES\n"
|
||||
|
@ -16,16 +16,16 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
"X-Generator: Poedit 3.0.1\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#: tools/alignments/cli.py:17
|
||||
#: tools/alignments/cli.py:16
|
||||
msgid ""
|
||||
"This command lets you perform various tasks pertaining to an alignments file."
|
||||
msgstr ""
|
||||
"Este comando le permite realizar varias tareas relacionadas con un archivo "
|
||||
"de alineación."
|
||||
|
||||
#: tools/alignments/cli.py:32
|
||||
#: tools/alignments/cli.py:31
|
||||
msgid ""
|
||||
"Alignments tool\n"
|
||||
"This tool allows you to perform numerous actions on or using an alignments "
|
||||
|
@ -36,16 +36,16 @@ msgstr ""
|
|||
"caras o una fuente de fotogramas, usando opcionalmente su correspondiente "
|
||||
"archivo de alineación."
|
||||
|
||||
#: tools/alignments/cli.py:44
|
||||
#: tools/alignments/cli.py:43
|
||||
msgid " Must Pass in a frames folder/source video file (-fr)."
|
||||
msgstr ""
|
||||
" Debe indicar una carpeta de fotogramas o archivo de vídeo de origen (-fr)."
|
||||
|
||||
#: tools/alignments/cli.py:45
|
||||
#: tools/alignments/cli.py:44
|
||||
msgid " Must Pass in a faces folder (-fc)."
|
||||
msgstr " Debe indicar una carpeta de caras (-fc)."
|
||||
|
||||
#: tools/alignments/cli.py:46
|
||||
#: tools/alignments/cli.py:45
|
||||
msgid ""
|
||||
" Must Pass in either a frames folder/source video file OR a faces folder (-"
|
||||
"fr or -fc)."
|
||||
|
@ -53,7 +53,7 @@ msgstr ""
|
|||
" Debe indicar una carpeta de fotogramas o archivo de vídeo de origen, o una "
|
||||
"carpeta de caras (-fr o -fc)."
|
||||
|
||||
#: tools/alignments/cli.py:48
|
||||
#: tools/alignments/cli.py:47
|
||||
msgid ""
|
||||
" Must Pass in a frames folder/source video file AND a faces folder (-fr and -"
|
||||
"fc)."
|
||||
|
@ -61,11 +61,11 @@ msgstr ""
|
|||
" Debe indicar una carpeta de fotogramas o archivo de vídeo de origen, y una "
|
||||
"carpeta de caras (-fr y -fc)."
|
||||
|
||||
#: tools/alignments/cli.py:50
|
||||
#: tools/alignments/cli.py:49
|
||||
msgid " Use the output option (-o) to process results."
|
||||
msgstr " Usar la opción de salida (-o) para procesar los resultados."
|
||||
|
||||
#: tools/alignments/cli.py:58 tools/alignments/cli.py:97
|
||||
#: tools/alignments/cli.py:57 tools/alignments/cli.py:97
|
||||
msgid "processing"
|
||||
msgstr "proceso"
|
||||
|
||||
|
@ -142,7 +142,7 @@ msgstr ""
|
|||
"L|'spatial': Realiza un filtrado espacial y temporal para suavizar las "
|
||||
"alineaciones (¡EXPERIMENTAL!)"
|
||||
|
||||
#: tools/alignments/cli.py:99
|
||||
#: tools/alignments/cli.py:100
|
||||
msgid ""
|
||||
"R|How to output discovered items ('faces' and 'frames' only):\n"
|
||||
"L|'console': Print the list of frames to the screen. (DEFAULT)\n"
|
||||
|
@ -158,12 +158,12 @@ msgstr ""
|
|||
"L|'move': Mueve los elementos descubiertos a una subcarpeta dentro del "
|
||||
"directorio de origen."
|
||||
|
||||
#: tools/alignments/cli.py:110 tools/alignments/cli.py:123
|
||||
#: tools/alignments/cli.py:130 tools/alignments/cli.py:137
|
||||
#: tools/alignments/cli.py:111 tools/alignments/cli.py:134
|
||||
#: tools/alignments/cli.py:141
|
||||
msgid "data"
|
||||
msgstr "datos"
|
||||
|
||||
#: tools/alignments/cli.py:114
|
||||
#: tools/alignments/cli.py:118
|
||||
msgid ""
|
||||
"Full path to the alignments file to be processed. If you have input a "
|
||||
"'frames_dir' and don't provide this option, the process will try to find the "
|
||||
|
@ -177,17 +177,13 @@ msgstr ""
|
|||
"requieren un archivo de alineaciones con la excepción de 'from-faces' cuando "
|
||||
"el archivo de alineaciones se generará en la carpeta de caras especificada."
|
||||
|
||||
#: tools/alignments/cli.py:124
|
||||
msgid "Directory containing extracted faces."
|
||||
msgstr "Directorio que contiene las caras extraídas."
|
||||
|
||||
#: tools/alignments/cli.py:131
|
||||
#: tools/alignments/cli.py:135
|
||||
msgid "Directory containing source frames that faces were extracted from."
|
||||
msgstr ""
|
||||
"Directorio que contiene los fotogramas de origen de los que se extrajeron "
|
||||
"las caras."
|
||||
|
||||
#: tools/alignments/cli.py:138
|
||||
#: tools/alignments/cli.py:143
|
||||
msgid ""
|
||||
"R|Run the aligmnents tool on multiple sources. The following jobs support "
|
||||
"batch mode:\n"
|
||||
|
@ -230,12 +226,12 @@ msgstr ""
|
|||
"El archivo de alineaciones debe existir en la ubicación predeterminada. Para "
|
||||
"todos los demás trabajos, esta opción se ignora."
|
||||
|
||||
#: tools/alignments/cli.py:164 tools/alignments/cli.py:175
|
||||
#: tools/alignments/cli.py:185
|
||||
#: tools/alignments/cli.py:169 tools/alignments/cli.py:181
|
||||
#: tools/alignments/cli.py:191
|
||||
msgid "extract"
|
||||
msgstr "extracción"
|
||||
|
||||
#: tools/alignments/cli.py:165
|
||||
#: tools/alignments/cli.py:171
|
||||
msgid ""
|
||||
"[Extract only] Extract every 'nth' frame. This option will skip frames when "
|
||||
"extracting faces. For example a value of 1 will extract faces from every "
|
||||
|
@ -246,11 +242,11 @@ msgstr ""
|
|||
"caras de cada fotograma, un valor de 10 extraerá las caras de cada 10 "
|
||||
"fotogramas."
|
||||
|
||||
#: tools/alignments/cli.py:176
|
||||
#: tools/alignments/cli.py:182
|
||||
msgid "[Extract only] The output size of extracted faces."
|
||||
msgstr "[Sólo extracción] El tamaño de salida de las caras extraídas."
|
||||
|
||||
#: tools/alignments/cli.py:186
|
||||
#: tools/alignments/cli.py:193
|
||||
msgid ""
|
||||
"[Extract only] Only extract faces that have been resized by this percent or "
|
||||
"more to meet the specified extract size (`-sz`, `--size`). Useful for "
|
||||
|
@ -270,6 +266,9 @@ msgstr ""
|
|||
"desde 512 px o más. Una configuración de 200 solo extraerá las caras que se "
|
||||
"han reducido de 1024 px o más."
|
||||
|
||||
#~ msgid "Directory containing extracted faces."
|
||||
#~ msgstr "Directorio que contiene las caras extraídas."
|
||||
|
||||
#~ msgid "Full path to the alignments file to be processed."
|
||||
#~ msgstr "Ruta completa del archivo de alineaciones a procesar."
|
||||
|
||||
|
|
Binary file not shown.
|
@ -5,27 +5,28 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: faceswap.spanish\n"
|
||||
"POT-Creation-Date: 2021-02-19 16:39+0000\n"
|
||||
"PO-Revision-Date: 2021-02-21 16:49+0000\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-03-28 23:50+0000\n"
|
||||
"PO-Revision-Date: 2024-03-29 00:02+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: tokafondo\n"
|
||||
"Language: es_ES\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
"X-Generator: Poedit 2.4.2\n"
|
||||
"Last-Translator: \n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Language: es_ES\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#: tools/effmpeg/cli.py:15
|
||||
msgid "This command allows you to easily execute common ffmpeg tasks."
|
||||
msgstr "Este comando le permite ejecutar fácilmente tareas comunes de ffmpeg."
|
||||
|
||||
#: tools/effmpeg/cli.py:24
|
||||
#: tools/effmpeg/cli.py:52
|
||||
msgid "A wrapper for ffmpeg for performing image <> video converting."
|
||||
msgstr "Un interfaz de ffmpeg para realizar la conversión de imagen <> vídeo."
|
||||
|
||||
#: tools/effmpeg/cli.py:51
|
||||
#: tools/effmpeg/cli.py:64
|
||||
msgid ""
|
||||
"R|Choose which action you want ffmpeg ffmpeg to do.\n"
|
||||
"L|'extract': turns videos into images \n"
|
||||
|
@ -45,17 +46,17 @@ msgstr ""
|
|||
"L|'mux-audio' añade audio de un vídeo a otro.\n"
|
||||
"L|'rescale' cambia el tamaño del vídeo.\n"
|
||||
"L|'rotate' rotar video\n"
|
||||
"L|'slice' corta una parte del video en un archivo de video separado. "
|
||||
"L|'slice' corta una parte del video en un archivo de video separado."
|
||||
|
||||
#: tools/effmpeg/cli.py:65
|
||||
#: tools/effmpeg/cli.py:78
|
||||
msgid "Input file."
|
||||
msgstr "Archivo de entrada."
|
||||
|
||||
#: tools/effmpeg/cli.py:66 tools/effmpeg/cli.py:73 tools/effmpeg/cli.py:87
|
||||
#: tools/effmpeg/cli.py:79 tools/effmpeg/cli.py:86 tools/effmpeg/cli.py:100
|
||||
msgid "data"
|
||||
msgstr "datos"
|
||||
|
||||
#: tools/effmpeg/cli.py:76
|
||||
#: tools/effmpeg/cli.py:89
|
||||
msgid ""
|
||||
"Output file. If no output is specified then: if the output is meant to be a "
|
||||
"video then a video called 'out.mkv' will be created in the input directory; "
|
||||
|
@ -71,18 +72,18 @@ msgstr ""
|
|||
"Nota: la extensión del archivo de salida elegida determinará la codificación "
|
||||
"del archivo."
|
||||
|
||||
#: tools/effmpeg/cli.py:89
|
||||
#: tools/effmpeg/cli.py:102
|
||||
msgid "Path to reference video if 'input' was not a video."
|
||||
msgstr ""
|
||||
"Ruta de acceso al vídeo de referencia si se dio una carpeta con fotogramas "
|
||||
"en vez de un vídeo."
|
||||
|
||||
#: tools/effmpeg/cli.py:95 tools/effmpeg/cli.py:105 tools/effmpeg/cli.py:142
|
||||
#: tools/effmpeg/cli.py:171
|
||||
#: tools/effmpeg/cli.py:108 tools/effmpeg/cli.py:118 tools/effmpeg/cli.py:156
|
||||
#: tools/effmpeg/cli.py:185
|
||||
msgid "output"
|
||||
msgstr "salida"
|
||||
|
||||
#: tools/effmpeg/cli.py:97
|
||||
#: tools/effmpeg/cli.py:110
|
||||
msgid ""
|
||||
"Provide video fps. Can be an integer, float or fraction. Negative values "
|
||||
"will will make the program try to get the fps from the input or reference "
|
||||
|
@ -92,7 +93,7 @@ msgstr ""
|
|||
"fracción. Los valores negativos harán que el programa intente obtener los "
|
||||
"fps de los vídeos de entrada o de referencia."
|
||||
|
||||
#: tools/effmpeg/cli.py:107
|
||||
#: tools/effmpeg/cli.py:120
|
||||
msgid ""
|
||||
"Image format that extracted images should be saved as. '.bmp' will offer the "
|
||||
"fastest extraction speed, but will take the most storage space. '.png' will "
|
||||
|
@ -103,11 +104,11 @@ msgstr ""
|
|||
"almacenamiento. '.png' será más lento pero ocupará menos espacio de "
|
||||
"almacenamiento."
|
||||
|
||||
#: tools/effmpeg/cli.py:114 tools/effmpeg/cli.py:123 tools/effmpeg/cli.py:132
|
||||
#: tools/effmpeg/cli.py:127 tools/effmpeg/cli.py:136 tools/effmpeg/cli.py:145
|
||||
msgid "clip"
|
||||
msgstr "recorte"
|
||||
|
||||
#: tools/effmpeg/cli.py:116
|
||||
#: tools/effmpeg/cli.py:129
|
||||
msgid ""
|
||||
"Enter the start time from which an action is to be applied. Default: "
|
||||
"00:00:00, in HH:MM:SS format. You can also enter the time with or without "
|
||||
|
@ -117,7 +118,7 @@ msgstr ""
|
|||
"defecto: 00:00:00, en formato HH:MM:SS. También puede introducir la hora con "
|
||||
"o sin los dos puntos, por ejemplo, 00:0000 o 026010."
|
||||
|
||||
#: tools/effmpeg/cli.py:125
|
||||
#: tools/effmpeg/cli.py:138
|
||||
msgid ""
|
||||
"Enter the end time to which an action is to be applied. If both an end time "
|
||||
"and duration are set, then the end time will be used and the duration will "
|
||||
|
@ -127,7 +128,7 @@ msgstr ""
|
|||
"00:00:00, en formato HH:MM:SS. También puede introducir la hora con o sin "
|
||||
"los dos puntos, por ejemplo, 00:0000 o 026010."
|
||||
|
||||
#: tools/effmpeg/cli.py:134
|
||||
#: tools/effmpeg/cli.py:147
|
||||
msgid ""
|
||||
"Enter the duration of the chosen action, for example if you enter 00:00:10 "
|
||||
"for slice, then the first 10 seconds after and including the start time will "
|
||||
|
@ -138,7 +139,7 @@ msgstr ""
|
|||
"formato HH:MM:SS. También puede introducir la hora con o sin los dos puntos, "
|
||||
"por ejemplo, 00:0000 o 026010."
|
||||
|
||||
#: tools/effmpeg/cli.py:144
|
||||
#: tools/effmpeg/cli.py:158
|
||||
msgid ""
|
||||
"Mux the audio from the reference video into the input video. This option is "
|
||||
"only used for the 'gen-vid' action. 'mux-audio' action has this turned on "
|
||||
|
@ -148,11 +149,11 @@ msgstr ""
|
|||
"se utiliza para la acción 'gen-vid'. La acción 'mux-audio' la tiene activada "
|
||||
"implícitamente."
|
||||
|
||||
#: tools/effmpeg/cli.py:155 tools/effmpeg/cli.py:165
|
||||
#: tools/effmpeg/cli.py:169 tools/effmpeg/cli.py:179
|
||||
msgid "rotate"
|
||||
msgstr "rotación"
|
||||
|
||||
#: tools/effmpeg/cli.py:157
|
||||
#: tools/effmpeg/cli.py:171
|
||||
msgid ""
|
||||
"Transpose the video. If transpose is set, then degrees will be ignored. For "
|
||||
"cli you can enter either the number or the long command name, e.g. to use "
|
||||
|
@ -163,23 +164,23 @@ msgstr ""
|
|||
"comando, por ejemplo, para usar (1, 90Clockwise) son válidas las opciones -"
|
||||
"tr 1 y -tr 90Clockwise"
|
||||
|
||||
#: tools/effmpeg/cli.py:166
|
||||
#: tools/effmpeg/cli.py:180
|
||||
msgid "Rotate the video clockwise by the given number of degrees."
|
||||
msgstr ""
|
||||
"Gira el vídeo en el sentido de las agujas del reloj el número de grados "
|
||||
"indicado."
|
||||
|
||||
#: tools/effmpeg/cli.py:173
|
||||
#: tools/effmpeg/cli.py:187
|
||||
msgid "Set the new resolution scale if the chosen action is 'rescale'."
|
||||
msgstr ""
|
||||
"Establece la nueva escala de resolución si la acción elegida es \"reescalar"
|
||||
"\"."
|
||||
"Establece la nueva escala de resolución si la acción elegida es "
|
||||
"\"reescalar\"."
|
||||
|
||||
#: tools/effmpeg/cli.py:178 tools/effmpeg/cli.py:186
|
||||
#: tools/effmpeg/cli.py:192 tools/effmpeg/cli.py:200
|
||||
msgid "settings"
|
||||
msgstr "ajustes"
|
||||
|
||||
#: tools/effmpeg/cli.py:180
|
||||
#: tools/effmpeg/cli.py:194
|
||||
msgid ""
|
||||
"Reduces output verbosity so that only serious errors are printed. If both "
|
||||
"quiet and verbose are set, verbose will override quiet."
|
||||
|
@ -188,7 +189,7 @@ msgstr ""
|
|||
"errores graves. Si se establecen tanto 'quiet' como 'verbose', 'verbose' "
|
||||
"tendrá preferencia y anulará a 'quiet'."
|
||||
|
||||
#: tools/effmpeg/cli.py:188
|
||||
#: tools/effmpeg/cli.py:202
|
||||
msgid ""
|
||||
"Increases output verbosity. If both quiet and verbose are set, verbose will "
|
||||
"override quiet."
|
||||
|
|
Binary file not shown.
|
@ -5,7 +5,8 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: faceswap.spanish\n"
|
||||
"POT-Creation-Date: 2021-06-08 19:24+0100\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-03-28 23:55+0000\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
|
@ -13,9 +14,9 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.4.3\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#: tools/manual\cli.py:13
|
||||
#: tools/manual/cli.py:13
|
||||
msgid ""
|
||||
"This command lets you perform various actions on frames, faces and "
|
||||
"alignments files using visual tools."
|
||||
|
@ -23,7 +24,7 @@ msgstr ""
|
|||
"Este comando le permite realizar varias acciones en los archivos de "
|
||||
"fotogramas, caras y alineaciones utilizando herramientas visuales."
|
||||
|
||||
#: tools/manual\cli.py:23
|
||||
#: tools/manual/cli.py:23
|
||||
msgid ""
|
||||
"A tool to perform various actions on frames, faces and alignments files "
|
||||
"using visual tools"
|
||||
|
@ -31,18 +32,18 @@ msgstr ""
|
|||
"Una herramienta que permite realizar diversas acciones en archivos de "
|
||||
"fotogramas, caras y alineaciones mediante herramientas visuales"
|
||||
|
||||
#: tools/manual\cli.py:35 tools/manual\cli.py:43
|
||||
#: tools/manual/cli.py:35 tools/manual/cli.py:44
|
||||
msgid "data"
|
||||
msgstr "datos"
|
||||
|
||||
#: tools/manual\cli.py:37
|
||||
#: tools/manual/cli.py:38
|
||||
msgid ""
|
||||
"Path to the alignments file for the input, if not at the default location"
|
||||
msgstr ""
|
||||
"Ruta del archivo de alineaciones para la entrada, si no está en la ubicación "
|
||||
"por defecto"
|
||||
|
||||
#: tools/manual\cli.py:44
|
||||
#: tools/manual/cli.py:46
|
||||
msgid ""
|
||||
"Video file or directory containing source frames that faces were extracted "
|
||||
"from."
|
||||
|
@ -50,11 +51,11 @@ msgstr ""
|
|||
"Archivo o directorio de vídeo que contiene los fotogramas de origen de los "
|
||||
"que se extrajeron las caras."
|
||||
|
||||
#: tools/manual\cli.py:51 tools/manual\cli.py:59
|
||||
#: tools/manual/cli.py:53 tools/manual/cli.py:62
|
||||
msgid "options"
|
||||
msgstr "opciones"
|
||||
|
||||
#: tools/manual\cli.py:52
|
||||
#: tools/manual/cli.py:55
|
||||
msgid ""
|
||||
"Force regeneration of the low resolution jpg thumbnails in the alignments "
|
||||
"file."
|
||||
|
@ -62,7 +63,7 @@ msgstr ""
|
|||
"Forzar la regeneración de las miniaturas jpg de baja resolución en el "
|
||||
"archivo de alineaciones."
|
||||
|
||||
#: tools/manual\cli.py:60
|
||||
#: tools/manual/cli.py:64
|
||||
msgid ""
|
||||
"The process attempts to speed up generation of thumbnails by extracting from "
|
||||
"the video in parallel threads. For some videos, this causes the caching "
|
||||
|
|
Binary file not shown.
|
@ -6,8 +6,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: faceswap.spanish\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-03-11 23:45+0000\n"
|
||||
"PO-Revision-Date: 2024-03-11 23:50+0000\n"
|
||||
"POT-Creation-Date: 2024-03-28 23:51+0000\n"
|
||||
"PO-Revision-Date: 2024-03-29 00:01+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: tokafondo\n"
|
||||
"Language: es_ES\n"
|
||||
|
|
Binary file not shown.
|
@ -7,16 +7,16 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-06-28 14:05+0100\n"
|
||||
"PO-Revision-Date: 2022-06-28 14:11+0100\n"
|
||||
"POT-Creation-Date: 2024-03-28 23:51+0000\n"
|
||||
"PO-Revision-Date: 2024-03-29 00:00+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: es\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 3.0\n"
|
||||
"Last-Translator: \n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Language: es\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#: tools/model/cli.py:13
|
||||
msgid "This tool lets you perform actions on saved Faceswap models."
|
||||
|
@ -29,7 +29,7 @@ msgstr ""
|
|||
"Una herramienta para realizar acciones en archivos de modelos entrenados "
|
||||
"Faceswap"
|
||||
|
||||
#: tools/model/cli.py:33
|
||||
#: tools/model/cli.py:34
|
||||
msgid ""
|
||||
"Model directory. A directory containing the model you wish to perform an "
|
||||
"action on."
|
||||
|
@ -37,7 +37,7 @@ msgstr ""
|
|||
"Directorio de modelo. Un directorio que contiene el modelo en el que desea "
|
||||
"realizar una acción."
|
||||
|
||||
#: tools/model/cli.py:41
|
||||
#: tools/model/cli.py:43
|
||||
msgid ""
|
||||
"R|Choose which action you want to perform.\n"
|
||||
"L|'inference' - Create an inference only copy of the model. Strips any "
|
||||
|
@ -58,11 +58,11 @@ msgstr ""
|
|||
"válidos).\n"
|
||||
"L|'restore': restaura un modelo desde una copia de seguridad."
|
||||
|
||||
#: tools/model/cli.py:55 tools/model/cli.py:66
|
||||
#: tools/model/cli.py:57 tools/model/cli.py:69
|
||||
msgid "inference"
|
||||
msgstr "inferencia"
|
||||
|
||||
#: tools/model/cli.py:56
|
||||
#: tools/model/cli.py:59
|
||||
msgid ""
|
||||
"R|The format to save the model as. Note: Only used for 'inference' job.\n"
|
||||
"L|'h5' - Standard Keras H5 format. Does not store any custom layer "
|
||||
|
@ -77,9 +77,13 @@ msgstr ""
|
|||
"L|'saved-model': formato de modelo guardado de Tensorflow. Contiene toda la "
|
||||
"información necesaria para cargar el modelo fuera de Faceswap."
|
||||
|
||||
#: tools/model/cli.py:67
|
||||
#: tools/model/cli.py:71
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Only used for 'inference' job. Generate the inference model for B -> A "
|
||||
#| "instead of A -> B."
|
||||
msgid ""
|
||||
"Only used for 'inference' job. Generate the inference model for B -> A "
|
||||
"Only used for 'inference' job. Generate the inference model for B -> A "
|
||||
"instead of A -> B."
|
||||
msgstr ""
|
||||
"Solo se usa para el trabajo de 'inference'. Genere el modelo de inferencia "
|
||||
|
|
Binary file not shown.
|
@ -5,25 +5,26 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: faceswap.spanish\n"
|
||||
"POT-Creation-Date: 2021-02-18 23:09-0000\n"
|
||||
"PO-Revision-Date: 2021-03-19 14:28+0000\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-03-28 23:53+0000\n"
|
||||
"PO-Revision-Date: 2024-03-29 00:00+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: tokafondo\n"
|
||||
"Language: es_ES\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
"X-Generator: Poedit 2.3\n"
|
||||
"Last-Translator: \n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Language: es_ES\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#: tools/preview/cli.py:14
|
||||
#: tools/preview/cli.py:15
|
||||
msgid "This command allows you to preview swaps to tweak convert settings."
|
||||
msgstr ""
|
||||
"Este comando permite previsualizar los intercambios para ajustar la "
|
||||
"configuración de la conversión."
|
||||
|
||||
#: tools/preview/cli.py:23
|
||||
#: tools/preview/cli.py:30
|
||||
msgid ""
|
||||
"Preview tool\n"
|
||||
"Allows you to configure your convert settings with a live preview"
|
||||
|
@ -31,11 +32,11 @@ msgstr ""
|
|||
"Herramienta de vista previa\n"
|
||||
"Permite configurar los ajustes de conversión con una vista previa en directo"
|
||||
|
||||
#: tools/preview/cli.py:33 tools/preview/cli.py:42 tools/preview/cli.py:49
|
||||
#: tools/preview/cli.py:47 tools/preview/cli.py:57 tools/preview/cli.py:65
|
||||
msgid "data"
|
||||
msgstr "datos"
|
||||
|
||||
#: tools/preview/cli.py:35
|
||||
#: tools/preview/cli.py:50
|
||||
msgid ""
|
||||
"Input directory or video. Either a directory containing the image files you "
|
||||
"wish to process or path to a video file."
|
||||
|
@ -43,14 +44,14 @@ msgstr ""
|
|||
"Directorio o vídeo de entrada. Un directorio que contenga los archivos de "
|
||||
"imagen que desea procesar o la ruta a un archivo de vídeo."
|
||||
|
||||
#: tools/preview/cli.py:44
|
||||
#: tools/preview/cli.py:60
|
||||
msgid ""
|
||||
"Path to the alignments file for the input, if not at the default location"
|
||||
msgstr ""
|
||||
"Ruta del archivo de alineaciones para la entrada, si no está en la "
|
||||
"ubicación por defecto"
|
||||
"Ruta del archivo de alineaciones para la entrada, si no está en la ubicación "
|
||||
"por defecto"
|
||||
|
||||
#: tools/preview/cli.py:51
|
||||
#: tools/preview/cli.py:68
|
||||
msgid ""
|
||||
"Model directory. A directory containing the trained model you wish to "
|
||||
"process."
|
||||
|
@ -58,31 +59,35 @@ msgstr ""
|
|||
"Directorio del modelo. Un directorio que contiene el modelo entrenado que "
|
||||
"desea procesar."
|
||||
|
||||
#: tools/preview/cli.py:58
|
||||
#: tools/preview/cli.py:74
|
||||
msgid "Swap the model. Instead of A -> B, swap B -> A"
|
||||
msgstr ""
|
||||
"Intercambiar el modelo. En lugar de convertir A en B, convierte B en A"
|
||||
msgstr "Intercambiar el modelo. En lugar de convertir A en B, convierte B en A"
|
||||
|
||||
#: tools/preview\preview.py:1303
|
||||
#: tools/preview/control_panels.py:510
|
||||
msgid "Save full config"
|
||||
msgstr "Guardar la configuración completa"
|
||||
|
||||
#: tools/preview\preview.py:1306
|
||||
#: tools/preview/control_panels.py:513
|
||||
msgid "Reset full config to default values"
|
||||
msgstr "Restablecer la configuración completa a los valores por defecto"
|
||||
|
||||
#: tools/preview\preview.py:1309
|
||||
#: tools/preview/control_panels.py:516
|
||||
msgid "Reset full config to saved values"
|
||||
msgstr "Restablecer la configuración completa a los valores guardados"
|
||||
|
||||
#: tools/preview\preview.py:1453
|
||||
msgid "Save {} config"
|
||||
msgstr "Guardar la configuración de {}"
|
||||
#: tools/preview/control_panels.py:667
|
||||
#, python-brace-format
|
||||
msgid "Save {title} config"
|
||||
msgstr "Guardar la configuración de {title}"
|
||||
|
||||
#: tools/preview\preview.py:1456
|
||||
msgid "Reset {} config to default values"
|
||||
msgstr "Restablecer la configuración completa de {} a los valores por defecto"
|
||||
#: tools/preview/control_panels.py:670
|
||||
#, python-brace-format
|
||||
msgid "Reset {title} config to default values"
|
||||
msgstr ""
|
||||
"Restablecer la configuración completa de {title} a los valores por defecto"
|
||||
|
||||
#: tools/preview\preview.py:1459
|
||||
msgid "Reset {} config to saved values"
|
||||
msgstr "Restablecer la configuración completa de {} a los valores guardados"
|
||||
#: tools/preview/control_panels.py:673
|
||||
#, python-brace-format
|
||||
msgid "Reset {title} config to saved values"
|
||||
msgstr ""
|
||||
"Restablecer la configuración completa de {title} a los valores guardados"
|
||||
|
|
Binary file not shown.
|
@ -6,8 +6,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: faceswap.spanish\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-09-23 14:16+0100\n"
|
||||
"PO-Revision-Date: 2022-09-23 14:16+0100\n"
|
||||
"POT-Creation-Date: 2024-03-28 23:53+0000\n"
|
||||
"PO-Revision-Date: 2024-03-29 00:03+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: tokafondo\n"
|
||||
"Language: es_ES\n"
|
||||
|
@ -16,14 +16,14 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
"X-Generator: Poedit 3.0.1\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#: tools/sort/cli.py:14
|
||||
#: tools/sort/cli.py:15
|
||||
msgid "This command lets you sort images using various methods."
|
||||
msgstr ""
|
||||
"Este comando le permite ordenar las imágenes utilizando varios métodos."
|
||||
|
||||
#: tools/sort/cli.py:20
|
||||
#: tools/sort/cli.py:21
|
||||
msgid ""
|
||||
" Adjust the '-t' ('--threshold') parameter to control the strength of "
|
||||
"grouping."
|
||||
|
@ -31,7 +31,7 @@ msgstr ""
|
|||
" Ajuste el parámetro '-t' ('--threshold') para controlar la fuerza de la "
|
||||
"agrupación."
|
||||
|
||||
#: tools/sort/cli.py:21
|
||||
#: tools/sort/cli.py:22
|
||||
msgid ""
|
||||
" Adjust the '-b' ('--bins') parameter to control the number of bins for "
|
||||
"grouping. Each image is allocated to a bin by the percentage of color pixels "
|
||||
|
@ -41,7 +41,7 @@ msgstr ""
|
|||
"contenedores para agrupar. Cada imagen se asigna a un contenedor por el "
|
||||
"porcentaje de píxeles de color que aparecen en la imagen."
|
||||
|
||||
#: tools/sort/cli.py:24
|
||||
#: tools/sort/cli.py:25
|
||||
msgid ""
|
||||
" Adjust the '-b' ('--bins') parameter to control the number of bins for "
|
||||
"grouping. Each image is allocated to a bin by the number of degrees the face "
|
||||
|
@ -51,7 +51,7 @@ msgstr ""
|
|||
"contenedores para agrupar. Cada imagen se asigna a un contenedor por el "
|
||||
"número de grados que la cara está orientada desde el centro."
|
||||
|
||||
#: tools/sort/cli.py:27
|
||||
#: tools/sort/cli.py:28
|
||||
msgid ""
|
||||
" Adjust the '-b' ('--bins') parameter to control the number of bins for "
|
||||
"grouping. The minimum and maximum values are taken for the chosen sort "
|
||||
|
@ -62,15 +62,15 @@ msgstr ""
|
|||
"métrica de clasificación elegida. Luego, los contenedores se llenan con los "
|
||||
"resultados de la clasificación de grupos."
|
||||
|
||||
#: tools/sort/cli.py:31
|
||||
#: tools/sort/cli.py:32
|
||||
msgid "faces by blurriness."
|
||||
msgstr "rostros por desenfoque."
|
||||
|
||||
#: tools/sort/cli.py:32
|
||||
#: tools/sort/cli.py:33
|
||||
msgid "faces by fft filtered blurriness."
|
||||
msgstr "caras por borrosidad filtrada fft."
|
||||
|
||||
#: tools/sort/cli.py:33
|
||||
#: tools/sort/cli.py:34
|
||||
msgid ""
|
||||
"faces by the estimated distance of the alignments from an 'average' face. "
|
||||
"This can be useful for eliminating misaligned faces. Sorts from most like an "
|
||||
|
@ -80,7 +80,7 @@ msgstr ""
|
|||
"'promedio'. Esto puede ser útil para eliminar caras desalineadas. Ordena de "
|
||||
"más parecido a un rostro promedio a menos parecido a un rostro promedio."
|
||||
|
||||
#: tools/sort/cli.py:36
|
||||
#: tools/sort/cli.py:37
|
||||
msgid ""
|
||||
"faces using VGG Face2 by face similarity. This uses a pairwise clustering "
|
||||
"algorithm to check the distances between 512 features on every face in your "
|
||||
|
@ -90,23 +90,23 @@ msgstr ""
|
|||
"agrupamiento por pares para verificar las distancias entre 512 "
|
||||
"características en cada cara de su conjunto y ordenarlas apropiadamente."
|
||||
|
||||
#: tools/sort/cli.py:39
|
||||
#: tools/sort/cli.py:40
|
||||
msgid "faces by their landmarks."
|
||||
msgstr "caras por sus puntos de referencia."
|
||||
|
||||
#: tools/sort/cli.py:40
|
||||
#: tools/sort/cli.py:41
|
||||
msgid "Like 'face-cnn' but sorts by dissimilarity."
|
||||
msgstr "Como 'face-cnn' pero ordenada por la similitud."
|
||||
|
||||
#: tools/sort/cli.py:41
|
||||
#: tools/sort/cli.py:42
|
||||
msgid "faces by Yaw (rotation left to right)."
|
||||
msgstr "caras por guiñada (rotación de izquierda a derecha)."
|
||||
|
||||
#: tools/sort/cli.py:42
|
||||
#: tools/sort/cli.py:43
|
||||
msgid "faces by Pitch (rotation up and down)."
|
||||
msgstr "caras por Pitch (rotación arriba y abajo)."
|
||||
|
||||
#: tools/sort/cli.py:43
|
||||
#: tools/sort/cli.py:44
|
||||
msgid ""
|
||||
"faces by Roll (rotation). Aligned faces should have a roll value close to "
|
||||
"zero. The further the Roll value from zero the higher liklihood the face is "
|
||||
|
@ -116,22 +116,22 @@ msgstr ""
|
|||
"balanceo cercano a cero. Cuanto más lejos esté el valor de Roll de cero, "
|
||||
"mayor será la probabilidad de que la cara esté desalineada."
|
||||
|
||||
#: tools/sort/cli.py:45
|
||||
#: tools/sort/cli.py:46
|
||||
msgid "faces by their color histogram."
|
||||
msgstr "caras por su histograma de color."
|
||||
|
||||
#: tools/sort/cli.py:46
|
||||
#: tools/sort/cli.py:47
|
||||
msgid "Like 'hist' but sorts by dissimilarity."
|
||||
msgstr "Como 'hist' pero ordenada por la disimilitud."
|
||||
|
||||
#: tools/sort/cli.py:47
|
||||
#: tools/sort/cli.py:48
|
||||
msgid ""
|
||||
"images by the average intensity of the converted grayscale color channel."
|
||||
msgstr ""
|
||||
"imágenes por la intensidad media del canal de color en escala de grises "
|
||||
"convertido."
|
||||
|
||||
#: tools/sort/cli.py:48
|
||||
#: tools/sort/cli.py:49
|
||||
msgid ""
|
||||
"images by their number of black pixels. Useful when faces are near borders "
|
||||
"and a large part of the image is black."
|
||||
|
@ -139,7 +139,7 @@ msgstr ""
|
|||
"imágenes por su número de píxeles negros. Útil cuando las caras están cerca "
|
||||
"de los bordes y una gran parte de la imagen es negra."
|
||||
|
||||
#: tools/sort/cli.py:50
|
||||
#: tools/sort/cli.py:51
|
||||
msgid ""
|
||||
"images by the average intensity of the converted Y color channel. Bright "
|
||||
"lighting and oversaturated images will be ranked first."
|
||||
|
@ -148,7 +148,7 @@ msgstr ""
|
|||
"iluminación brillante y las imágenes sobresaturadas se clasificarán en "
|
||||
"primer lugar."
|
||||
|
||||
#: tools/sort/cli.py:52
|
||||
#: tools/sort/cli.py:53
|
||||
msgid ""
|
||||
"images by the average intensity of the converted Cg color channel. Green "
|
||||
"images will be ranked first and red images will be last."
|
||||
|
@ -157,7 +157,7 @@ msgstr ""
|
|||
"imágenes verdes se clasificarán primero y las imágenes rojas serán las "
|
||||
"últimas."
|
||||
|
||||
#: tools/sort/cli.py:54
|
||||
#: tools/sort/cli.py:55
|
||||
msgid ""
|
||||
"images by the average intensity of the converted Co color channel. Orange "
|
||||
"images will be ranked first and blue images will be last."
|
||||
|
@ -166,7 +166,7 @@ msgstr ""
|
|||
"imágenes naranjas se clasificarán en primer lugar y las imágenes azules en "
|
||||
"último lugar."
|
||||
|
||||
#: tools/sort/cli.py:56
|
||||
#: tools/sort/cli.py:57
|
||||
msgid ""
|
||||
"images by their size in the original frame. Faces further from the camera "
|
||||
"and from lower resolution sources will be sorted first, whilst faces closer "
|
||||
|
@ -177,24 +177,16 @@ msgstr ""
|
|||
"las caras más cercanas a la cámara y de fuentes de mayor resolución se "
|
||||
"ordenarán en último lugar."
|
||||
|
||||
#: tools/sort/cli.py:59
|
||||
msgid " option is deprecated. Use 'yaw'"
|
||||
msgstr " la opción está en desuso. Usa 'yaw'"
|
||||
|
||||
#: tools/sort/cli.py:60
|
||||
msgid " option is deprecated. Use 'color-black'"
|
||||
msgstr " la opción está en desuso. Usa 'color-black'"
|
||||
|
||||
#: tools/sort/cli.py:82
|
||||
#: tools/sort/cli.py:81
|
||||
msgid "Sort faces using a number of different techniques"
|
||||
msgstr "Clasificar los rostros mediante diferentes técnicas"
|
||||
|
||||
#: tools/sort/cli.py:92 tools/sort/cli.py:99 tools/sort/cli.py:110
|
||||
#: tools/sort/cli.py:148
|
||||
#: tools/sort/cli.py:91 tools/sort/cli.py:98 tools/sort/cli.py:110
|
||||
#: tools/sort/cli.py:150
|
||||
msgid "data"
|
||||
msgstr "datos"
|
||||
|
||||
#: tools/sort/cli.py:93
|
||||
#: tools/sort/cli.py:92
|
||||
msgid "Input directory of aligned faces."
|
||||
msgstr "Directorio de entrada de caras alineadas."
|
||||
|
||||
|
@ -212,7 +204,7 @@ msgstr ""
|
|||
"selecciona 'keep', las imágenes se ordenarán en el lugar, sobrescribiendo el "
|
||||
"contenido original de 'input_dir'"
|
||||
|
||||
#: tools/sort/cli.py:111
|
||||
#: tools/sort/cli.py:112
|
||||
msgid ""
|
||||
"R|If selected then the input_dir should be a parent folder containing "
|
||||
"multiple folders of faces you wish to sort. The faces will be output to "
|
||||
|
@ -222,11 +214,11 @@ msgstr ""
|
|||
"varias carpetas de caras que desea ordenar. Las caras se enviarán a "
|
||||
"subcarpetas separadas en output_dir"
|
||||
|
||||
#: tools/sort/cli.py:120
|
||||
#: tools/sort/cli.py:121
|
||||
msgid "sort settings"
|
||||
msgstr "ajustes de ordenación"
|
||||
|
||||
#: tools/sort/cli.py:122
|
||||
#: tools/sort/cli.py:124
|
||||
msgid ""
|
||||
"R|Choose how images are sorted. Selecting a sort method gives the images a "
|
||||
"new filename based on the order the image appears within the given method.\n"
|
||||
|
@ -244,17 +236,25 @@ msgstr ""
|
|||
"nombres de archivo originales. Seleccionar 'none' para 'sort-by' y 'group-"
|
||||
"by' no hará nada"
|
||||
|
||||
#: tools/sort/cli.py:135 tools/sort/cli.py:162 tools/sort/cli.py:191
|
||||
#: tools/sort/cli.py:136 tools/sort/cli.py:164 tools/sort/cli.py:184
|
||||
msgid "group settings"
|
||||
msgstr "ajustes de grupo"
|
||||
|
||||
#: tools/sort/cli.py:137
|
||||
#: tools/sort/cli.py:139
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "R|Selecting a group by method will move/copy files into numbered bins "
|
||||
#| "based on the selected method.\n"
|
||||
#| "L|'none': Don't bin the images. Folders will be sorted by the selected "
|
||||
#| "'sort-by' but will not be binned, instead they will be sorted into a "
|
||||
#| "single folder. Selecting 'none' for both 'sort-by' and 'group-by' will "
|
||||
#| "do nothing"
|
||||
msgid ""
|
||||
"R|Selecting a group by method will move/copy files into numbered bins based "
|
||||
"on the selected method.\n"
|
||||
"L|'none': Don't bin the images. Folders will be sorted by the selected 'sort-"
|
||||
"by' but will not be binned, instead they will be sorted into a single "
|
||||
"folder. Selecting 'none' for both 'sort-by' and 'group-by' will do nothing"
|
||||
"folder. Selecting 'none' for both 'sort-by' and 'group-by' will do nothing"
|
||||
msgstr ""
|
||||
"R|Al seleccionar un grupo por método, los archivos se moverán/copiarán en "
|
||||
"contenedores numerados según el método seleccionado.\n"
|
||||
|
@ -262,7 +262,7 @@ msgstr ""
|
|||
"by' seleccionado, pero no se agruparán, sino que se ordenarán en una sola "
|
||||
"carpeta. Seleccionar 'none' para 'sort-by' y 'group-by' no hará nada"
|
||||
|
||||
#: tools/sort/cli.py:149
|
||||
#: tools/sort/cli.py:152
|
||||
msgid ""
|
||||
"Whether to keep the original files in their original location. Choosing a "
|
||||
"'sort-by' method means that the files have to be renamed. Selecting 'keep' "
|
||||
|
@ -279,7 +279,7 @@ msgstr ""
|
|||
"moverán y cambiarán de nombre en función de los criterios de clasificación/"
|
||||
"grupo seleccionados."
|
||||
|
||||
#: tools/sort/cli.py:164
|
||||
#: tools/sort/cli.py:167
|
||||
msgid ""
|
||||
"R|Float value. Minimum threshold to use for grouping comparison with 'face-"
|
||||
"cnn' 'hist' and 'face' methods.\n"
|
||||
|
@ -306,20 +306,29 @@ msgstr ""
|
|||
"de muchas carpetas. Valores predeterminados: face-cnn 7.2, hist 0.3, face "
|
||||
"0.25"
|
||||
|
||||
#: tools/sort/cli.py:181
|
||||
msgid "output"
|
||||
msgstr "salida"
|
||||
|
||||
#: tools/sort/cli.py:182
|
||||
msgid ""
|
||||
"Deprecated and no longer used. The final processing will be dictated by the "
|
||||
"sort/group by methods and whether 'keep_original' is selected."
|
||||
msgstr ""
|
||||
"En desuso y ya no se usa. El procesamiento final será dictado por los "
|
||||
"métodos de ordenación/agrupación y si se selecciona 'keepl'."
|
||||
|
||||
#: tools/sort/cli.py:193
|
||||
#, python-format
|
||||
#: tools/sort/cli.py:187
|
||||
#, fuzzy, python-format
|
||||
#| msgid ""
|
||||
#| "R|Integer value. Used to control the number of bins created for grouping "
|
||||
#| "by: any 'blur' methods, 'color' methods or 'face metric' methods "
|
||||
#| "('distance', 'size') and 'orientation; methods ('yaw', 'pitch'). For any "
|
||||
#| "other grouping methods see the '-t' ('--threshold') option.\n"
|
||||
#| "L|For 'face metric' methods the bins are filled, according the the "
|
||||
#| "distribution of faces between the minimum and maximum chosen metric.\n"
|
||||
#| "L|For 'color' methods the number of bins represents the divider of the "
|
||||
#| "percentage of colored pixels. Eg. For a bin number of '5': The first "
|
||||
#| "folder will have the faces with 0%% to 20%% colored pixels, second 21%% "
|
||||
#| "to 40%%, etc. Any empty bins will be deleted, so you may end up with "
|
||||
#| "fewer bins than selected.\n"
|
||||
#| "L|For 'blur' methods folder 0 will be the least blurry, while the last "
|
||||
#| "folder will be the blurriest.\n"
|
||||
#| "L|For 'orientation' methods the number of bins is dictated by how much "
|
||||
#| "180 degrees is divided. Eg. If 18 is selected, then each folder will be a "
|
||||
#| "10 degree increment. Folder 0 will contain faces looking the most to the "
|
||||
#| "left/down whereas the last folder will contain the faces looking the most "
|
||||
#| "to the right/up. NB: Some bins may be empty if faces do not fit the "
|
||||
#| "criteria.\n"
|
||||
#| "Default value: 5"
|
||||
msgid ""
|
||||
"R|Integer value. Used to control the number of bins created for grouping by: "
|
||||
"any 'blur' methods, 'color' methods or 'face metric' methods ('distance', "
|
||||
|
@ -338,7 +347,7 @@ msgid ""
|
|||
"degrees is divided. Eg. If 18 is selected, then each folder will be a 10 "
|
||||
"degree increment. Folder 0 will contain faces looking the most to the left/"
|
||||
"down whereas the last folder will contain the faces looking the most to the "
|
||||
"right/up. NB: Some bins may be empty if faces do not fit the criteria.\n"
|
||||
"right/up. NB: Some bins may be empty if faces do not fit the criteria. \n"
|
||||
"Default value: 5"
|
||||
msgstr ""
|
||||
"R|Valor entero. Se utiliza para controlar el número de contenedores creados "
|
||||
|
@ -364,11 +373,11 @@ msgstr ""
|
|||
"pueden estar vacíos si las caras no se ajustan a los criterios.\n"
|
||||
"Valor predeterminado: 5"
|
||||
|
||||
#: tools/sort/cli.py:215 tools/sort/cli.py:225
|
||||
#: tools/sort/cli.py:207 tools/sort/cli.py:217
|
||||
msgid "settings"
|
||||
msgstr "ajustes"
|
||||
|
||||
#: tools/sort/cli.py:217
|
||||
#: tools/sort/cli.py:210
|
||||
msgid ""
|
||||
"Logs file renaming changes if grouping by renaming, or it logs the file "
|
||||
"copying/movement if grouping by folders. If no log file is specified with "
|
||||
|
@ -380,7 +389,7 @@ msgstr ""
|
|||
"se especifica ningún archivo de registro con '--log-file', se creará un "
|
||||
"archivo 'sort_log.json' en el directorio de entrada."
|
||||
|
||||
#: tools/sort/cli.py:228
|
||||
#: tools/sort/cli.py:221
|
||||
msgid ""
|
||||
"Specify a log file to use for saving the renaming or grouping information. "
|
||||
"If specified extension isn't 'json' or 'yaml', then json will be used as the "
|
||||
|
@ -391,6 +400,22 @@ msgstr ""
|
|||
"'json' o 'yaml', se utilizará json como serializador, con el nombre de "
|
||||
"archivo suministrado. Por defecto: sort_log.json"
|
||||
|
||||
#~ msgid " option is deprecated. Use 'yaw'"
|
||||
#~ msgstr " la opción está en desuso. Usa 'yaw'"
|
||||
|
||||
#~ msgid " option is deprecated. Use 'color-black'"
|
||||
#~ msgstr " la opción está en desuso. Usa 'color-black'"
|
||||
|
||||
#~ msgid "output"
|
||||
#~ msgstr "salida"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Deprecated and no longer used. The final processing will be dictated by "
|
||||
#~ "the sort/group by methods and whether 'keep_original' is selected."
|
||||
#~ msgstr ""
|
||||
#~ "En desuso y ya no se usa. El procesamiento final será dictado por los "
|
||||
#~ "métodos de ordenación/agrupación y si se selecciona 'keepl'."
|
||||
|
||||
#~ msgid "Output directory for sorted aligned faces."
|
||||
#~ msgstr "Directorio de salida para las caras alineadas ordenadas."
|
||||
|
||||
|
|
Binary file not shown.
File diff suppressed because it is too large
Load diff
BIN
locales/kr/LC_MESSAGES/lib.cli.args_extract_convert.mo
Normal file
BIN
locales/kr/LC_MESSAGES/lib.cli.args_extract_convert.mo
Normal file
Binary file not shown.
650
locales/kr/LC_MESSAGES/lib.cli.args_extract_convert.po
Normal file
650
locales/kr/LC_MESSAGES/lib.cli.args_extract_convert.po
Normal file
|
@ -0,0 +1,650 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-03-28 18:11+0000\n"
|
||||
"PO-Revision-Date: 2024-03-28 18:16+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: ko_KR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:46 lib/cli/args_extract_convert.py:56
|
||||
#: lib/cli/args_extract_convert.py:64 lib/cli/args_extract_convert.py:122
|
||||
#: lib/cli/args_extract_convert.py:479 lib/cli/args_extract_convert.py:488
|
||||
msgid "Data"
|
||||
msgstr "데이터"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:48
|
||||
msgid ""
|
||||
"Input directory or video. Either a directory containing the image files you "
|
||||
"wish to process or path to a video file. NB: This should be the source video/"
|
||||
"frames NOT the source faces."
|
||||
msgstr ""
|
||||
"폴더나 비디오를 입력하세요. 당신이 사용하고 싶은 이미지 파일들을 가진 폴더 또"
|
||||
"는 비디오 파일의 경로여야 합니다. NB: 이 폴더는 원본 비디오여야 합니다."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:57
|
||||
msgid "Output directory. This is where the converted files will be saved."
|
||||
msgstr "출력 폴더. 변환된 파일들이 저장될 곳입니다."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:66
|
||||
msgid ""
|
||||
"Optional path to an alignments file. Leave blank if the alignments file is "
|
||||
"at the default location."
|
||||
msgstr ""
|
||||
"(선택적) alignments 파일의 경로. 비워두면 alignments 파일이 기본 위치에 저장"
|
||||
"됩니다."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:97
|
||||
msgid ""
|
||||
"Extract faces from image or video sources.\n"
|
||||
"Extraction plugins can be configured in the 'Settings' Menu"
|
||||
msgstr ""
|
||||
"얼굴들을 이미지 또는 비디오에서 추출합니다.\n"
|
||||
"추출 플러그인은 '설정' 메뉴에서 설정할 수 있습니다"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:124
|
||||
msgid ""
|
||||
"R|If selected then the input_dir should be a parent folder containing "
|
||||
"multiple videos and/or folders of images you wish to extract from. The faces "
|
||||
"will be output to separate sub-folders in the output_dir."
|
||||
msgstr ""
|
||||
"R|만약 선택된다면 input_dir은 당신이 추출하고자 하는 여러개의 비디오 그리고/"
|
||||
"또는 이미지들을 가진 부모 폴더가 되야 합니다. 얼굴들은 output_dir에 분리된 하"
|
||||
"위 폴더에 저장됩니다."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:133 lib/cli/args_extract_convert.py:150
|
||||
#: lib/cli/args_extract_convert.py:163 lib/cli/args_extract_convert.py:202
|
||||
#: lib/cli/args_extract_convert.py:220 lib/cli/args_extract_convert.py:233
|
||||
#: lib/cli/args_extract_convert.py:243 lib/cli/args_extract_convert.py:253
|
||||
#: lib/cli/args_extract_convert.py:499 lib/cli/args_extract_convert.py:525
|
||||
#: lib/cli/args_extract_convert.py:564
|
||||
msgid "Plugins"
|
||||
msgstr "플러그인들"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:135
|
||||
msgid ""
|
||||
"R|Detector to use. Some of these have configurable settings in '/config/"
|
||||
"extract.ini' or 'Settings > Configure Extract 'Plugins':\n"
|
||||
"L|cv2-dnn: A CPU only extractor which is the least reliable and least "
|
||||
"resource intensive. Use this if not using a GPU and time is important.\n"
|
||||
"L|mtcnn: Good detector. Fast on CPU, faster on GPU. Uses fewer resources "
|
||||
"than other GPU detectors but can often return more false positives.\n"
|
||||
"L|s3fd: Best detector. Slow on CPU, faster on GPU. Can detect more faces and "
|
||||
"fewer false positives than other GPU detectors, but is a lot more resource "
|
||||
"intensive."
|
||||
msgstr ""
|
||||
"R|사용할 감지기. 몇몇 감지기들은 '/config/extract.ini' 또는 '설정 > 추출 플러"
|
||||
"그인 설정'에서 설정이 가능합니다:\n"
|
||||
"L|cv2-dnn: 가장 믿을 수 없고 가장 자원을 덜 사용하며 CPU만을 사용하는 추출기"
|
||||
"입니다. 만약 GPU를 사용하지 않고 시간이 중요하다면 사용하세요.\n"
|
||||
"L|mtcnn: 좋은 감지기. CPU에서도 빠르고 GPU에서도 빠릅니다. 다른 GPU 감지기들"
|
||||
"보다 더 적은 자원을 사용하지만 가끔 더 많은 false positives를 돌려줄 수 있습"
|
||||
"니다.\n"
|
||||
"L|s3fd: 가장 좋은 감지기. CPU에선 느리고 GPU에선 빠릅니다. 다른 GPU 감지기들"
|
||||
"보다 더 많은 얼굴들을 감지할 수 있고 과 더 적은 false positives를 돌려주지만 "
|
||||
"자원을 굉장히 많이 사용합니다."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:152
|
||||
msgid ""
|
||||
"R|Aligner to use.\n"
|
||||
"L|cv2-dnn: A CPU only landmark detector. Faster, less resource intensive, "
|
||||
"but less accurate. Only use this if not using a GPU and time is important.\n"
|
||||
"L|fan: Best aligner. Fast on GPU, slow on CPU."
|
||||
msgstr ""
|
||||
"R|사용할 Aligner.\n"
|
||||
"L|cv2-dnn: CPU만을 사용하는 특징점 감지기. 빠르고 자원을 덜 사용하지만 부정확"
|
||||
"합니다. GPU를 사용하지 않고 시간이 중요할 때에만 사용하세요.\n"
|
||||
"L|fan: 가장 좋은 aligner. GPU에선 빠르고 CPU에선 느립니다."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:165
|
||||
msgid ""
|
||||
"R|Additional Masker(s) to use. The masks generated here will all take up GPU "
|
||||
"RAM. You can select none, one or multiple masks, but the extraction may take "
|
||||
"longer the more you select. NB: The Extended and Components (landmark based) "
|
||||
"masks are automatically generated on extraction.\n"
|
||||
"L|bisenet-fp: Relatively lightweight NN based mask that provides more "
|
||||
"refined control over the area to be masked including full head masking "
|
||||
"(configurable in mask settings).\n"
|
||||
"L|custom: A dummy mask that fills the mask area with all 1s or 0s "
|
||||
"(configurable in settings). This is only required if you intend to manually "
|
||||
"edit the custom masks yourself in the manual tool. This mask does not use "
|
||||
"the GPU so will not use any additional VRAM.\n"
|
||||
"L|vgg-clear: Mask designed to provide smart segmentation of mostly frontal "
|
||||
"faces clear of obstructions. Profile faces and obstructions may result in "
|
||||
"sub-par performance.\n"
|
||||
"L|vgg-obstructed: Mask designed to provide smart segmentation of mostly "
|
||||
"frontal faces. The mask model has been specifically trained to recognize "
|
||||
"some facial obstructions (hands and eyeglasses). Profile faces may result in "
|
||||
"sub-par performance.\n"
|
||||
"L|unet-dfl: Mask designed to provide smart segmentation of mostly frontal "
|
||||
"faces. The mask model has been trained by community members and will need "
|
||||
"testing for further description. Profile faces may result in sub-par "
|
||||
"performance.\n"
|
||||
"The auto generated masks are as follows:\n"
|
||||
"L|components: Mask designed to provide facial segmentation based on the "
|
||||
"positioning of landmark locations. A convex hull is constructed around the "
|
||||
"exterior of the landmarks to create a mask.\n"
|
||||
"L|extended: Mask designed to provide facial segmentation based on the "
|
||||
"positioning of landmark locations. A convex hull is constructed around the "
|
||||
"exterior of the landmarks and the mask is extended upwards onto the "
|
||||
"forehead.\n"
|
||||
"(eg: `-M unet-dfl vgg-clear`, `--masker vgg-obstructed`)"
|
||||
msgstr ""
|
||||
"R|사용할 추가 Mask입니다. 여기서 생성된 마스크는 모두 GPU RAM을 차지합니다. "
|
||||
"마스크를 0개, 1개 또는 여러 개 선택할 수 있지만 더 많이 선택할수록 추출에 시"
|
||||
"간이 더 걸릴 수 있습니다. NB: 확장 및 구성 요소(특징점 기반) 마스크는 추출 "
|
||||
"시 자동으로 생성됩니다.\n"
|
||||
"L|bisnet-fp: 전체 헤드 마스킹(마스크 설정에서 구성 가능)을 포함하여 마스킹할 "
|
||||
"영역에 대한 보다 정교한 제어를 제공하는 비교적 가벼운 NN 기반 마스크입니다.\n"
|
||||
"L|custom: 마스크 영역을 모든 1 또는 0으로 채우는 dummy 마스크입니다(설정에서 "
|
||||
"구성 가능). 수동 도구에서 사용자 정의 마스크를 직접 수동으로 편집하려는 경우"
|
||||
"에만 필요합니다. 이 마스크는 GPU를 사용하지 않으므로 추가 VRAM을 사용하지 않"
|
||||
"습니다.\n"
|
||||
"L|vgg-clear: 대부분의 정면에 장애물이 없는 스마트한 분할을 제공하도록 설계된 "
|
||||
"마스크입니다. 프로필 얼굴들 및 장애물들로 인해 성능이 저하될 수 있습니다.\n"
|
||||
"L|vgg-obstructed: 대부분의 정면 얼굴을 스마트하게 분할할 수 있도록 설계된 마"
|
||||
"스크입니다. 마스크 모델은 일부 안면 장애물(손과 안경)을 인식하도록 특별히 훈"
|
||||
"련되었습니다. 프로필 얼굴들은 평균 이하의 성능을 초래할 수 있습니다.\n"
|
||||
"L|unet-dfl: 대부분 정면 얼굴을 스마트하게 분할하도록 설계된 마스크. 마스크 모"
|
||||
"델은 커뮤니티 구성원들에 의해 훈련되었으며 추가 설명을 위해 테스트가 필요하"
|
||||
"다. 프로필 얼굴들은 평균 이하의 성능을 초래할 수 있습니다.\n"
|
||||
"자동 생성 마스크는 다음과 같습니다.\n"
|
||||
"L|components: 특징점 위치의 위치를 기반으로 얼굴 분할을 제공하도록 설계된 마"
|
||||
"스크입니다. 특징점의 외부에는 마스크를 만들기 위해 convex hull가 형성되어 있"
|
||||
"습니다.\n"
|
||||
"L|extended: 특징점 위치의 위치를 기반으로 얼굴 분할을 제공하도록 설계된 마스"
|
||||
"크입니다. 특징점의 외부에는 convex hull가 형성되어 있으며, 마스크는 이마 위"
|
||||
"로 뻗어 있습ㄴ다.\n"
|
||||
"(예: '-M unet-dfl vgg-clear', '--masker vgg-obstructed')"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:204
|
||||
msgid ""
|
||||
"R|Performing normalization can help the aligner better align faces with "
|
||||
"difficult lighting conditions at an extraction speed cost. Different methods "
|
||||
"will yield different results on different sets. NB: This does not impact the "
|
||||
"output face, just the input to the aligner.\n"
|
||||
"L|none: Don't perform normalization on the face.\n"
|
||||
"L|clahe: Perform Contrast Limited Adaptive Histogram Equalization on the "
|
||||
"face.\n"
|
||||
"L|hist: Equalize the histograms on the RGB channels.\n"
|
||||
"L|mean: Normalize the face colors to the mean."
|
||||
msgstr ""
|
||||
"R|정규화를 수행하면 aligner가 추출 속도 비용으로 어려운 조명 조건의 얼굴을 "
|
||||
"더 잘 정렬할 수 있습니다. 방법이 다르면 세트마다 결과가 다릅니다. NB: 출력 얼"
|
||||
"굴에는 영향을 주지 않으며 aligner에 대한 입력에만 영향을 줍니다.\n"
|
||||
"L|none: 얼굴에 정규화를 수행하지 마십시오.\n"
|
||||
"L|clahe: 얼굴에 Contrast Limited Adaptive Histogram Equalization를 수행합니"
|
||||
"다.\n"
|
||||
"L|hist: RGB 채널의 히스토그램을 동일하게 합니다.\n"
|
||||
"L|mean: 얼굴 색상을 평균으로 정규화합니다."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:222
|
||||
msgid ""
|
||||
"The number of times to re-feed the detected face into the aligner. Each time "
|
||||
"the face is re-fed into the aligner the bounding box is adjusted by a small "
|
||||
"amount. The final landmarks are then averaged from each iteration. Helps to "
|
||||
"remove 'micro-jitter' but at the cost of slower extraction speed. The more "
|
||||
"times the face is re-fed into the aligner, the less micro-jitter should "
|
||||
"occur but the longer extraction will take."
|
||||
msgstr ""
|
||||
"검출된 얼굴을 aligner에 다시 공급하는 횟수입니다. 얼굴이 aligner에 다시 공급"
|
||||
"될 때마다 경계 상자가 소량 조정됩니다. 그런 다음 각 반복에서 최종 특징점의 평"
|
||||
"균을 구한다. 'micro-jitter'를 제거하는 데 도움이 되지만 추출 속도가 느려집니"
|
||||
"다. 얼굴이 aligner에 다시 공급되는 횟수가 많을수록 micro-jitter 적게 발생하지"
|
||||
"만 추출에 더 오랜 시간이 걸립니다."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:235
|
||||
msgid ""
|
||||
"Re-feed the initially found aligned face through the aligner. Can help "
|
||||
"produce better alignments for faces that are rotated beyond 45 degrees in "
|
||||
"the frame or are at extreme angles. Slows down extraction."
|
||||
msgstr ""
|
||||
"_aligner를 통해 처음 발견된 정렬된 얼굴을 재공급합니다. 프레임에서 45도 이상 "
|
||||
"회전하거나 극단적인 각도에 있는 얼굴을 더 잘 정렬할 수 있습니다. 추출 속도가 "
|
||||
"느려집니다."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:245
|
||||
msgid ""
|
||||
"If a face isn't found, rotate the images to try to find a face. Can find "
|
||||
"more faces at the cost of extraction speed. Pass in a single number to use "
|
||||
"increments of that size up to 360, or pass in a list of numbers to enumerate "
|
||||
"exactly what angles to check."
|
||||
msgstr ""
|
||||
"얼굴이 발견되지 않으면 이미지를 회전하여 얼굴을 찾습니다. 추출 속도를 희생하"
|
||||
"면서 더 많은 얼굴을 찾을 수 있습니다. 단일 숫자를 입력하여 해당 크기의 증분"
|
||||
"을 360까지 사용하거나 숫자 목록을 입력하여 확인할 각도를 정확하게 열거합니다."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:255
|
||||
msgid ""
|
||||
"Obtain and store face identity encodings from VGGFace2. Slows down extract a "
|
||||
"little, but will save time if using 'sort by face'"
|
||||
msgstr ""
|
||||
"VGGFace2에서 얼굴 식별 인코딩을 가져와 저장합니다. 추출 속도를 약간 늦추지만 "
|
||||
"'얼굴별로 정렬'을 사용하면 시간을 절약할 수 있습니다."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:265 lib/cli/args_extract_convert.py:276
|
||||
#: lib/cli/args_extract_convert.py:289 lib/cli/args_extract_convert.py:303
|
||||
#: lib/cli/args_extract_convert.py:610 lib/cli/args_extract_convert.py:619
|
||||
#: lib/cli/args_extract_convert.py:634 lib/cli/args_extract_convert.py:647
|
||||
#: lib/cli/args_extract_convert.py:661
|
||||
msgid "Face Processing"
|
||||
msgstr "얼굴 처리"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:267
|
||||
msgid ""
|
||||
"Filters out faces detected below this size. Length, in pixels across the "
|
||||
"diagonal of the bounding box. Set to 0 for off"
|
||||
msgstr ""
|
||||
"이 크기 미만으로 탐지된 얼굴을 필터링합니다. 길이, 경계 상자의 대각선에 걸친 "
|
||||
"픽셀 단위입니다. 0으로 설정하면 꺼집니다"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:278
|
||||
msgid ""
|
||||
"Optionally filter out people who you do not wish to extract by passing in "
|
||||
"images of those people. Should be a small variety of images at different "
|
||||
"angles and in different conditions. A folder containing the required images "
|
||||
"or multiple image files, space separated, can be selected."
|
||||
msgstr ""
|
||||
"선택적으로 추출하지 않을 사람의 이미지들을 전달하여 그 사람들을 제외합니다. "
|
||||
"각도와 조건이 다른 작은 다양한 이미지여야 합니다. 추출되지 않는데 필요한 이미"
|
||||
"지들 또는 공백으로 구분된 여러 이미지 파일이 들어 있는 폴더를 선택할 수 있습"
|
||||
"니다."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:291
|
||||
msgid ""
|
||||
"Optionally select people you wish to extract by passing in images of that "
|
||||
"person. Should be a small variety of images at different angles and in "
|
||||
"different conditions A folder containing the required images or multiple "
|
||||
"image files, space separated, can be selected."
|
||||
msgstr ""
|
||||
"선택적으로 추출하고 싶은 사람의 이미지를 전달하여 그 사람을 선택합니다. 각도"
|
||||
"와 조건이 다른 작은 다양한 이미지여야 합니다. 추출할 때 필요한 이미지들 또는 "
|
||||
"공백으로 구분된 여러 이미지 파일이 들어 있는 폴더를 선택할 수 있습니다."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:305
|
||||
msgid ""
|
||||
"For use with the optional nfilter/filter files. Threshold for positive face "
|
||||
"recognition. Higher values are stricter."
|
||||
msgstr ""
|
||||
"옵션인 nfilter/filter 파일과 함께 사용합니다. 긍정적인 얼굴 인식을 위한 임계"
|
||||
"값. 값이 높을수록 엄격합니다."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:314 lib/cli/args_extract_convert.py:327
|
||||
#: lib/cli/args_extract_convert.py:340 lib/cli/args_extract_convert.py:352
|
||||
msgid "output"
|
||||
msgstr "출력"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:316
|
||||
msgid ""
|
||||
"The output size of extracted faces. Make sure that the model you intend to "
|
||||
"train supports your required size. This will only need to be changed for hi-"
|
||||
"res models."
|
||||
msgstr ""
|
||||
"추출된 얼굴의 출력 크기입니다. 훈련하려는 모델이 필요한 크기를 지원하는지 꼭 "
|
||||
"확인하세요. 이것은 고해상도 모델에 대해서만 변경하면 됩니다."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:329
|
||||
msgid ""
|
||||
"Extract every 'nth' frame. This option will skip frames when extracting "
|
||||
"faces. For example a value of 1 will extract faces from every frame, a value "
|
||||
"of 10 will extract faces from every 10th frame."
|
||||
msgstr ""
|
||||
"모든 'n번째' 프레임을 추출합니다. 이 옵션은 얼굴을 추출할 때 건너뛸 프레임을 "
|
||||
"설정합니다. 예를 들어, 값이 1이면 모든 프레임에서 얼굴이 추출되고, 값이 10이"
|
||||
"면 모든 10번째 프레임에서 얼굴이 추출됩니다."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:342
|
||||
msgid ""
|
||||
"Automatically save the alignments file after a set amount of frames. By "
|
||||
"default the alignments file is only saved at the end of the extraction "
|
||||
"process. NB: If extracting in 2 passes then the alignments file will only "
|
||||
"start to be saved out during the second pass. WARNING: Don't interrupt the "
|
||||
"script when writing the file because it might get corrupted. Set to 0 to "
|
||||
"turn off"
|
||||
msgstr ""
|
||||
"프레임 수가 설정된 후 alignments 파일을 자동으로 저장합니다. 기본적으로 "
|
||||
"alignments 파일은 추출 프로세스가 끝날 때만 저장됩니다. NB: 2번째 추출에서 성"
|
||||
"공하면 두 번째 추출 중에만 alignments 파일이 저장되기 시작합니다. 경고: 파일"
|
||||
"을 쓸 때 스크립트가 손상될 수 있으므로 스크립트를 중단하지 마십시오. 해제하려"
|
||||
"면 0으로 설정"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:353
|
||||
msgid "Draw landmarks on the ouput faces for debugging purposes."
|
||||
msgstr "디버깅을 위해 출력 얼굴에 특징점을 그립니다."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:359 lib/cli/args_extract_convert.py:369
|
||||
#: lib/cli/args_extract_convert.py:377 lib/cli/args_extract_convert.py:384
|
||||
#: lib/cli/args_extract_convert.py:674 lib/cli/args_extract_convert.py:686
|
||||
#: lib/cli/args_extract_convert.py:695 lib/cli/args_extract_convert.py:716
|
||||
#: lib/cli/args_extract_convert.py:722
|
||||
msgid "settings"
|
||||
msgstr "설정"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:361
|
||||
msgid ""
|
||||
"Don't run extraction in parallel. Will run each part of the extraction "
|
||||
"process separately (one after the other) rather than all at the same time. "
|
||||
"Useful if VRAM is at a premium."
|
||||
msgstr ""
|
||||
"추출을 병렬로 실행하지 마십시오. 추출 프로세스의 각 부분을 동시에 모두 실행하"
|
||||
"는 것이 아니라 개별적으로(하나씩) 실행합니다. VRAM이 프리미엄인 경우 유용합니"
|
||||
"다."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:371
|
||||
msgid ""
|
||||
"Skips frames that have already been extracted and exist in the alignments "
|
||||
"file"
|
||||
msgstr "이미 추출되었거나 alignments 파일에 존재하는 프레임들을 스킵합니다"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:378
|
||||
msgid "Skip frames that already have detected faces in the alignments file"
|
||||
msgstr "이미 얼굴을 탐지하여 alignments 파일에 존재하는 프레임들을 스킵합니다"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:385
|
||||
msgid "Skip saving the detected faces to disk. Just create an alignments file"
|
||||
msgstr ""
|
||||
"탐지된 얼굴을 디스크에 저장하지 않습니다. 그저 alignments 파일을 만듭니다"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:459
|
||||
msgid ""
|
||||
"Swap the original faces in a source video/images to your final faces.\n"
|
||||
"Conversion plugins can be configured in the 'Settings' Menu"
|
||||
msgstr ""
|
||||
"원본 비디오/이미지의 원래 얼굴을 최종 얼굴으로 바꿉니다.\n"
|
||||
"변환 플러그인은 '설정' 메뉴에서 구성할 수 있습니다"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:481
|
||||
msgid ""
|
||||
"Only required if converting from images to video. Provide The original video "
|
||||
"that the source frames were extracted from (for extracting the fps and "
|
||||
"audio)."
|
||||
msgstr ""
|
||||
"이미지에서 비디오로 변환하는 경우에만 필요합니다. 소스 프레임이 추출된 원본 "
|
||||
"비디오(fps 및 오디오 추출용)를 입력하세요."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:490
|
||||
msgid ""
|
||||
"Model directory. The directory containing the trained model you wish to use "
|
||||
"for conversion."
|
||||
msgstr ""
|
||||
"모델 폴더. 당신이 변환에 사용하고자 하는 훈련된 모델을 가진 폴더입니다."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:501
|
||||
msgid ""
|
||||
"R|Performs color adjustment to the swapped face. Some of these options have "
|
||||
"configurable settings in '/config/convert.ini' or 'Settings > Configure "
|
||||
"Convert Plugins':\n"
|
||||
"L|avg-color: Adjust the mean of each color channel in the swapped "
|
||||
"reconstruction to equal the mean of the masked area in the original image.\n"
|
||||
"L|color-transfer: Transfers the color distribution from the source to the "
|
||||
"target image using the mean and standard deviations of the L*a*b* color "
|
||||
"space.\n"
|
||||
"L|manual-balance: Manually adjust the balance of the image in a variety of "
|
||||
"color spaces. Best used with the Preview tool to set correct values.\n"
|
||||
"L|match-hist: Adjust the histogram of each color channel in the swapped "
|
||||
"reconstruction to equal the histogram of the masked area in the original "
|
||||
"image.\n"
|
||||
"L|seamless-clone: Use cv2's seamless clone function to remove extreme "
|
||||
"gradients at the mask seam by smoothing colors. Generally does not give very "
|
||||
"satisfactory results.\n"
|
||||
"L|none: Don't perform color adjustment."
|
||||
msgstr ""
|
||||
"R|스왑된 얼굴의 색상 조정을 수행합니다. 이러한 옵션 중 일부에는 '/config/"
|
||||
"convert.ini' 또는 '설정 > 변환 플러그인 구성'에서 구성 가능한 설정이 있습니"
|
||||
"다.\n"
|
||||
"L|avg-color: 스왑된 재구성에서 각 색상 채널의 평균이 원본 영상에서 마스킹된 "
|
||||
"영역의 평균과 동일하도록 조정합니다.\n"
|
||||
"L|color-transfer: L*a*b* 색 공간의 평균 및 표준 편차를 사용하여 소스에서 대"
|
||||
"상 이미지로 색 분포를 전송합니다.\n"
|
||||
"L|manual-balance: 다양한 색 공간에서 이미지의 밸런스를 수동으로 조정합니다. "
|
||||
"올바른 값을 설정하려면 미리 보기 도구와 함께 사용하는 것이 좋습니다.\n"
|
||||
"L|match-hist: 스왑된 재구성에서 각 색상 채널의 히스토그램을 조정하여 원래 영"
|
||||
"상에서 마스킹된 영역의 히스토그램과 동일하게 만듭니다.\n"
|
||||
"L|seamless-clone: cv2의 원활한 복제 기능을 사용하여 색상을 평활화하여 마스크 "
|
||||
"심에서 극단적인 gradients을 제거합니다. 일반적으로 매우 만족스러운 결과를 제"
|
||||
"공하지 않습니다.\n"
|
||||
"L|none: 색상 조정을 수행하지 않습니다."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:527
|
||||
msgid ""
|
||||
"R|Masker to use. NB: The mask you require must exist within the alignments "
|
||||
"file. You can add additional masks with the Mask Tool.\n"
|
||||
"L|none: Don't use a mask.\n"
|
||||
"L|bisenet-fp_face: Relatively lightweight NN based mask that provides more "
|
||||
"refined control over the area to be masked (configurable in mask settings). "
|
||||
"Use this version of bisenet-fp if your model is trained with 'face' or "
|
||||
"'legacy' centering.\n"
|
||||
"L|bisenet-fp_head: Relatively lightweight NN based mask that provides more "
|
||||
"refined control over the area to be masked (configurable in mask settings). "
|
||||
"Use this version of bisenet-fp if your model is trained with 'head' "
|
||||
"centering.\n"
|
||||
"L|custom_face: Custom user created, face centered mask.\n"
|
||||
"L|custom_head: Custom user created, head centered mask.\n"
|
||||
"L|components: Mask designed to provide facial segmentation based on the "
|
||||
"positioning of landmark locations. A convex hull is constructed around the "
|
||||
"exterior of the landmarks to create a mask.\n"
|
||||
"L|extended: Mask designed to provide facial segmentation based on the "
|
||||
"positioning of landmark locations. A convex hull is constructed around the "
|
||||
"exterior of the landmarks and the mask is extended upwards onto the "
|
||||
"forehead.\n"
|
||||
"L|vgg-clear: Mask designed to provide smart segmentation of mostly frontal "
|
||||
"faces clear of obstructions. Profile faces and obstructions may result in "
|
||||
"sub-par performance.\n"
|
||||
"L|vgg-obstructed: Mask designed to provide smart segmentation of mostly "
|
||||
"frontal faces. The mask model has been specifically trained to recognize "
|
||||
"some facial obstructions (hands and eyeglasses). Profile faces may result in "
|
||||
"sub-par performance.\n"
|
||||
"L|unet-dfl: Mask designed to provide smart segmentation of mostly frontal "
|
||||
"faces. The mask model has been trained by community members and will need "
|
||||
"testing for further description. Profile faces may result in sub-par "
|
||||
"performance.\n"
|
||||
"L|predicted: If the 'Learn Mask' option was enabled during training, this "
|
||||
"will use the mask that was created by the trained model."
|
||||
msgstr ""
|
||||
"R|사용할 마스크. NB: 필요한 마스크는 alignments 파일 내에 있어야 합니다. 마스"
|
||||
"크 도구를 사용하여 마스크를 추가할 수 있습니다.\n"
|
||||
"L|none: 마스크 쓰지 마세요.\n"
|
||||
"L|bisnet-fp_face: 마스크할 영역을 보다 정교하게 제어할 수 있는 비교적 가벼운 "
|
||||
"NN 기반 마스크입니다(마스크 설정에서 구성 가능). 모델이 '얼굴' 또는 '레거시' "
|
||||
"중심으로 훈련된 경우 이 버전의 bisnet-fp를 사용하십시오.\n"
|
||||
"L|bisnet-fp_head: 마스크할 영역을 보다 정교하게 제어할 수 있는 비교적 가벼운 "
|
||||
"NN 기반 마스크입니다(마스크 설정에서 구성 가능). 모델이 '헤드' 중심으로 훈련"
|
||||
"된 경우 이 버전의 bisnet-fp를 사용하십시오.\n"
|
||||
"L|custom_face: 사용자 지정 사용자가 생성한 얼굴 중심 마스크입니다.\n"
|
||||
"L|custom_head: 사용자 지정 사용자가 생성한 머리 중심 마스크입니다.\n"
|
||||
"L|components: 특징점 위치의 배치를 기반으로 얼굴 분할을 제공하도록 설계된 마"
|
||||
"스크입니다. 특징점의 외부에는 마스크를 만들기 위해 convex hull가 형성되어 있"
|
||||
"습니다.\n"
|
||||
"L|extended: 특징점 위치의 배치를 기반으로 얼굴 분할을 제공하도록 설계된 마스"
|
||||
"크입니다. 지형지물의 외부에는 convex hull가 형성되어 있으며, 마스크는 이마 위"
|
||||
"로 뻗어 있습니다.\n"
|
||||
"L|vgg-clear: 대부분의 정면에 장애물이 없는 스마트한 분할을 제공하도록 설계된 "
|
||||
"마스크입니다. 옆 얼굴 및 장애물로 인해 성능이 저하될 수 있습니다.\n"
|
||||
"L|vgg-obstructed: 대부분의 정면 얼굴을 스마트하게 분할할 수 있도록 설계된 마"
|
||||
"스크입니다. 마스크 모델은 일부 안면 장애물(손과 안경)을 인식하도록 특별히 훈"
|
||||
"련되었습니다. 옆 얼굴은 평균 이하의 성능을 초래할 수 있습니다.\n"
|
||||
"L|unet-dfl: 대부분 정면 얼굴을 스마트하게 분할하도록 설계된 마스크. 마스크 모"
|
||||
"델은 커뮤니티 구성원들에 의해 훈련되었으며 추가 설명을 위해 테스트가 필요하"
|
||||
"다. 옆 얼굴은 평균 이하의 성능을 초래할 수 있습니다.\n"
|
||||
"L|predicted: 교육 중에 'Learn Mask(마스크 학습)' 옵션이 활성화된 경우에는 교"
|
||||
"육을 받은 모델이 만든 마스크가 사용됩니다."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:566
|
||||
msgid ""
|
||||
"R|The plugin to use to output the converted images. The writers are "
|
||||
"configurable in '/config/convert.ini' or 'Settings > Configure Convert "
|
||||
"Plugins:'\n"
|
||||
"L|ffmpeg: [video] Writes out the convert straight to video. When the input "
|
||||
"is a series of images then the '-ref' (--reference-video) parameter must be "
|
||||
"set.\n"
|
||||
"L|gif: [animated image] Create an animated gif.\n"
|
||||
"L|opencv: [images] The fastest image writer, but less options and formats "
|
||||
"than other plugins.\n"
|
||||
"L|patch: [images] Outputs the raw swapped face patch, along with the "
|
||||
"transformation matrix required to re-insert the face back into the original "
|
||||
"frame. Use this option if you wish to post-process and composite the final "
|
||||
"face within external tools.\n"
|
||||
"L|pillow: [images] Slower than opencv, but has more options and supports "
|
||||
"more formats."
|
||||
msgstr ""
|
||||
"R|변환된 이미지를 출력하는 데 사용할 플러그인입니다. 기록 장치는 '/config/"
|
||||
"convert.ini' 또는 '설정 > 변환 플러그인 구성:'에서 구성할 수 있습니다.\n"
|
||||
"L|ffmpeg: [video] 변환된 결과를 바로 video로 씁니다. 입력이 영상 시리즈인 경"
|
||||
"우 '-ref'(--reference-video) 파라미터를 설정해야 합니다.\n"
|
||||
"L|gif : [애니메이션 이미지] 애니메이션 gif를 만듭니다.\n"
|
||||
"L|opencv: [이미지] 가장 빠른 이미지 작성기이지만 다른 플러그인에 비해 옵션과 "
|
||||
"형식이 적습니다.\n"
|
||||
"L|patch: [이미지] 원래 프레임에 얼굴을 다시 삽입하는 데 필요한 변환 행렬과 함"
|
||||
"께 원시 교체된 얼굴 패치를 출력합니다.\n"
|
||||
"L|pillow: [images] opencv보다 느리지만 더 많은 옵션이 있고 더 많은 형식을 지"
|
||||
"원합니다."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:587 lib/cli/args_extract_convert.py:596
|
||||
#: lib/cli/args_extract_convert.py:707
|
||||
msgid "Frame Processing"
|
||||
msgstr "프레임 처리"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:589
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Scale the final output frames by this amount. 100%% will output the frames "
|
||||
"at source dimensions. 50%% at half size 200%% at double size"
|
||||
msgstr ""
|
||||
"최종 출력 프레임의 크기를 이 양만큼 조정합니다. 100%%는 원본의 차원에서 프레"
|
||||
"임을 출력합니다. 50%%는 절반 크기에서, 200%%는 두 배 크기에서"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:598
|
||||
msgid ""
|
||||
"Frame ranges to apply transfer to e.g. For frames 10 to 50 and 90 to 100 use "
|
||||
"--frame-ranges 10-50 90-100. Frames falling outside of the selected range "
|
||||
"will be discarded unless '-k' (--keep-unchanged) is selected. NB: If you are "
|
||||
"converting from images, then the filenames must end with the frame-number!"
|
||||
msgstr ""
|
||||
"예를 들어 전송을 적용할 프레임 범위 프레임 10 - 50 및 90 - 100의 경우 --"
|
||||
"frame-ranges 10-50 90-100을 사용합니다. '-k'(--keep-unchanged)를 선택하지 않"
|
||||
"으면 선택한 범위를 벗어나는 프레임이 삭제됩니다. NB: 이미지에서 변환하는 경"
|
||||
"우 파일 이름은 프레임 번호로 끝나야 합니다!"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:612
|
||||
msgid ""
|
||||
"Scale the swapped face by this percentage. Positive values will enlarge the "
|
||||
"face, Negative values will shrink the face."
|
||||
msgstr ""
|
||||
"이 백분율로 교체된 면의 크기를 조정합니다. 양수 값은 얼굴을 확대하고, 음수 값"
|
||||
"은 얼굴을 축소합니다."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:621
|
||||
msgid ""
|
||||
"If you have not cleansed your alignments file, then you can filter out faces "
|
||||
"by defining a folder here that contains the faces extracted from your input "
|
||||
"files/video. If this folder is defined, then only faces that exist within "
|
||||
"your alignments file and also exist within the specified folder will be "
|
||||
"converted. Leaving this blank will convert all faces that exist within the "
|
||||
"alignments file."
|
||||
msgstr ""
|
||||
"만약 alignments 파일을 지우지 않은 경우 입력 파일/비디오에서 추출된 얼굴이 포"
|
||||
"함된 폴더를 정의하여 얼굴을 걸러낼 수 있습니다. 이 폴더가 정의된 경우 "
|
||||
"alignments 파일 내에 존재하거나 지정된 폴더 내에 존재하는 얼굴만 변환됩니다. "
|
||||
"이 항목을 공백으로 두면 alignments 파일 내에 있는 모든 얼굴이 변환됩니다."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:636
|
||||
msgid ""
|
||||
"Optionally filter out people who you do not wish to process by passing in an "
|
||||
"image of that person. Should be a front portrait with a single person in the "
|
||||
"image. Multiple images can be added space separated. NB: Using face filter "
|
||||
"will significantly decrease extraction speed and its accuracy cannot be "
|
||||
"guaranteed."
|
||||
msgstr ""
|
||||
"선택적으로 처리하고 싶지 않은 사람의 이미지를 전달하여 그 사람을 걸러낼 수 있"
|
||||
"습니다. 이미지는 한 사람의 정면 모습이여야 합니다. 여러 이미지를 공백으로 구"
|
||||
"분하여 추가할 수 있습니다. 주의: 얼굴 필터를 사용하면 추출 속도가 현저히 감소"
|
||||
"하므로 정확성을 보장할 수 없습니다."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:649
|
||||
msgid ""
|
||||
"Optionally select people you wish to process by passing in an image of that "
|
||||
"person. Should be a front portrait with a single person in the image. "
|
||||
"Multiple images can be added space separated. NB: Using face filter will "
|
||||
"significantly decrease extraction speed and its accuracy cannot be "
|
||||
"guaranteed."
|
||||
msgstr ""
|
||||
"선택적으로 해당 사용자의 이미지를 전달하여 처리할 사용자를 선택합니다. 이미지"
|
||||
"에 한 사람이 있는 정면 초상화여야 합니다. 여러 이미지를 공백으로 구분하여 추"
|
||||
"가할 수 있습니다. 주의: 얼굴 필터를 사용하면 추출 속도가 현저히 감소하므로 정"
|
||||
"확성을 보장할 수 없습니다."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:663
|
||||
msgid ""
|
||||
"For use with the optional nfilter/filter files. Threshold for positive face "
|
||||
"recognition. Lower values are stricter. NB: Using face filter will "
|
||||
"significantly decrease extraction speed and its accuracy cannot be "
|
||||
"guaranteed."
|
||||
msgstr ""
|
||||
"옵션인 nfilter/filter 파일을 함께 사용합니다. 긍정적인 얼굴 인식을 위한 임계"
|
||||
"값. 낮은 값이 더 엄격합니다. 주의: 얼굴 필터를 사용하면 추출 속도가 현저히 감"
|
||||
"소하므로 정확성을 보장할 수 없습니다."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:676
|
||||
msgid ""
|
||||
"The maximum number of parallel processes for performing conversion. "
|
||||
"Converting images is system RAM heavy so it is possible to run out of memory "
|
||||
"if you have a lot of processes and not enough RAM to accommodate them all. "
|
||||
"Setting this to 0 will use the maximum available. No matter what you set "
|
||||
"this to, it will never attempt to use more processes than are available on "
|
||||
"your system. If singleprocess is enabled this setting will be ignored."
|
||||
msgstr ""
|
||||
"변환을 수행하기 위한 최대 병렬 프로세스 수입니다. 이미지 변환은 시스템 RAM에 "
|
||||
"부담이 크기 때문에 프로세스가 많고 모든 프로세스를 수용할 RAM이 충분하지 않"
|
||||
"은 경우 메모리가 부족할 수 있습니다. 이것을 0으로 설정하면 사용 가능한 최대값"
|
||||
"을 사용합니다. 얼마를 설정하든 시스템에서 사용 가능한 것보다 더 많은 프로세스"
|
||||
"를 사용하려고 시도하지 않습니다. 단일 프로세스가 활성화된 경우 이 설정은 무시"
|
||||
"됩니다."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:688
|
||||
msgid ""
|
||||
"[LEGACY] This only needs to be selected if a legacy model is being loaded or "
|
||||
"if there are multiple models in the model folder"
|
||||
msgstr ""
|
||||
"[LEGACY] 이것은 레거시 모델을 로드 중이거나 모델 폴더에 여러 모델이 있는 경우"
|
||||
"에만 선택되어야 합니다"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:697
|
||||
msgid ""
|
||||
"Enable On-The-Fly Conversion. NOT recommended. You should generate a clean "
|
||||
"alignments file for your destination video. However, if you wish you can "
|
||||
"generate the alignments on-the-fly by enabling this option. This will use an "
|
||||
"inferior extraction pipeline and will lead to substandard results. If an "
|
||||
"alignments file is found, this option will be ignored."
|
||||
msgstr ""
|
||||
"실시간 변환을 활성화합니다. 권장하지 않습니다. 당신은 변환 비디오에 대한 깨끗"
|
||||
"한 alignments 파일을 생성해야 합니다. 그러나 원하는 경우 이 옵션을 활성화하"
|
||||
"여 즉시 alignments 파일을 생성할 수 있습니다. 이것은 안좋은 추출 과정을 사용"
|
||||
"하고 표준 이하의 결과로 이어질 것입니다. alignments 파일이 발견되면 이 옵션"
|
||||
"은 무시됩니다."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:709
|
||||
msgid ""
|
||||
"When used with --frame-ranges outputs the unchanged frames that are not "
|
||||
"processed instead of discarding them."
|
||||
msgstr ""
|
||||
"사용시 --frame-ranges 인자를 사용하면 변경되지 않은 프레임을 버리지 않은 결과"
|
||||
"가 출력됩니다."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:717
|
||||
msgid "Swap the model. Instead converting from of A -> B, converts B -> A"
|
||||
msgstr "모델을 바꿉니다. A -> B에서 변환하는 대신 B -> A로 변환"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:723
|
||||
msgid "Disable multiprocessing. Slower but less resource intensive."
|
||||
msgstr "멀티프로세싱을 쓰지 않습니다. 느리지만 자원을 덜 소모합니다."
|
BIN
locales/kr/LC_MESSAGES/lib.cli.args_train.mo
Normal file
BIN
locales/kr/LC_MESSAGES/lib.cli.args_train.mo
Normal file
Binary file not shown.
350
locales/kr/LC_MESSAGES/lib.cli.args_train.po
Normal file
350
locales/kr/LC_MESSAGES/lib.cli.args_train.po
Normal file
|
@ -0,0 +1,350 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-03-28 18:04+0000\n"
|
||||
"PO-Revision-Date: 2024-03-28 18:16+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: ko_KR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#: lib/cli/args_train.py:30
|
||||
msgid ""
|
||||
"Train a model on extracted original (A) and swap (B) faces.\n"
|
||||
"Training models can take a long time. Anything from 24hrs to over a week\n"
|
||||
"Model plugins can be configured in the 'Settings' Menu"
|
||||
msgstr ""
|
||||
"추출된 원래(A) 얼굴과 스왑(B) 얼굴에 대한 모델을 훈련합니다.\n"
|
||||
"모델을 훈련하는 데 시간이 오래 걸릴 수 있습니다. 24시간에서 일주일 이상의 시"
|
||||
"간이 필요합니다.\n"
|
||||
"모델 플러그인은 '설정' 메뉴에서 구성할 수 있습니다"
|
||||
|
||||
#: lib/cli/args_train.py:49 lib/cli/args_train.py:58
|
||||
msgid "faces"
|
||||
msgstr "얼굴들"
|
||||
|
||||
#: lib/cli/args_train.py:51
|
||||
msgid ""
|
||||
"Input directory. A directory containing training images for face A. This is "
|
||||
"the original face, i.e. the face that you want to remove and replace with "
|
||||
"face B."
|
||||
msgstr ""
|
||||
"입력 디렉토리. 얼굴 A에 대한 훈련 이미지가 포함된 디렉토리입니다. 이것은 원"
|
||||
"래 얼굴, 즉 제거하고 B 얼굴로 대체하려는 얼굴입니다."
|
||||
|
||||
#: lib/cli/args_train.py:60
|
||||
msgid ""
|
||||
"Input directory. A directory containing training images for face B. This is "
|
||||
"the swap face, i.e. the face that you want to place onto the head of person "
|
||||
"A."
|
||||
msgstr ""
|
||||
"입력 디렉터리. 얼굴 B에 대한 훈련 이미지를 포함하는 디렉토리. 이것은 대체 얼"
|
||||
"굴, 즉 사람 A의 얼굴 앞에 배치하려는 얼굴이다."
|
||||
|
||||
#: lib/cli/args_train.py:67 lib/cli/args_train.py:80 lib/cli/args_train.py:97
|
||||
#: lib/cli/args_train.py:123 lib/cli/args_train.py:133
|
||||
msgid "model"
|
||||
msgstr "모델"
|
||||
|
||||
#: lib/cli/args_train.py:69
|
||||
msgid ""
|
||||
"Model directory. This is where the training data will be stored. You should "
|
||||
"always specify a new folder for new models. If starting a new model, select "
|
||||
"either an empty folder, or a folder which does not exist (which will be "
|
||||
"created). If continuing to train an existing model, specify the location of "
|
||||
"the existing model."
|
||||
msgstr ""
|
||||
"모델 디렉토리. 여기에 훈련 데이터가 저장됩니다. 새 모델의 경우 항상 새 폴더"
|
||||
"를 지정해야 합니다. 새 모델을 시작할 경우 빈 폴더 또는 존재하지 않는 폴더(생"
|
||||
"성될 폴더)를 선택합니다. 기존 모델을 계속 학습하는 경우 기존 모델의 위치를 지"
|
||||
"정합니다."
|
||||
|
||||
#: lib/cli/args_train.py:82
|
||||
msgid ""
|
||||
"R|Load the weights from a pre-existing model into a newly created model. For "
|
||||
"most models this will load weights from the Encoder of the given model into "
|
||||
"the encoder of the newly created model. Some plugins may have specific "
|
||||
"configuration options allowing you to load weights from other layers. "
|
||||
"Weights will only be loaded when creating a new model. This option will be "
|
||||
"ignored if you are resuming an existing model. Generally you will also want "
|
||||
"to 'freeze-weights' whilst the rest of your model catches up with your "
|
||||
"Encoder.\n"
|
||||
"NB: Weights can only be loaded from models of the same plugin as you intend "
|
||||
"to train."
|
||||
msgstr ""
|
||||
"R|기존 모델의 가중치를 새로 생성된 모델로 로드합니다. 대부분의 모델에서는 주"
|
||||
"어진 모델의 인코더에서 새로 생성된 모델의 인코더로 가중치를 로드합니다. 일부 "
|
||||
"플러그인에는 다른 층에서 가중치를 로드할 수 있는 특정 구성 옵션이 있을 수 있"
|
||||
"습니다. 가중치는 새 모델을 생성할 때만 로드됩니다. 기존 모델을 재개하는 경우 "
|
||||
"이 옵션은 무시됩니다. 일반적으로 나머지 모델이 인코더를 따라잡는 동안에도 '가"
|
||||
"중치 동결'이 필요합니다.\n"
|
||||
"주의: 가중치는 훈련하려는 플러그인 모델에서만 로드할 수 있습니다."
|
||||
|
||||
#: lib/cli/args_train.py:99
|
||||
msgid ""
|
||||
"R|Select which trainer to use. Trainers can be configured from the Settings "
|
||||
"menu or the config folder.\n"
|
||||
"L|original: The original model created by /u/deepfakes.\n"
|
||||
"L|dfaker: 64px in/128px out model from dfaker. Enable 'warp-to-landmarks' "
|
||||
"for full dfaker method.\n"
|
||||
"L|dfl-h128: 128px in/out model from deepfacelab\n"
|
||||
"L|dfl-sae: Adaptable model from deepfacelab\n"
|
||||
"L|dlight: A lightweight, high resolution DFaker variant.\n"
|
||||
"L|iae: A model that uses intermediate layers to try to get better details\n"
|
||||
"L|lightweight: A lightweight model for low-end cards. Don't expect great "
|
||||
"results. Can train as low as 1.6GB with batch size 8.\n"
|
||||
"L|realface: A high detail, dual density model based on DFaker, with "
|
||||
"customizable in/out resolution. The autoencoders are unbalanced so B>A swaps "
|
||||
"won't work so well. By andenixa et al. Very configurable.\n"
|
||||
"L|unbalanced: 128px in/out model from andenixa. The autoencoders are "
|
||||
"unbalanced so B>A swaps won't work so well. Very configurable.\n"
|
||||
"L|villain: 128px in/out model from villainguy. Very resource hungry (You "
|
||||
"will require a GPU with a fair amount of VRAM). Good for details, but more "
|
||||
"susceptible to color differences."
|
||||
msgstr ""
|
||||
"R|사용할 훈련 모델을 선택합니다. 훈련 모델은 설정 메뉴 또는 구성 폴더에서 구"
|
||||
"성할 수 있습니다.\n"
|
||||
"L|original: /u/deepfakes로 만든 원래 모델입니다.\n"
|
||||
"L|dfaker: 64px in/128px out 모델 from dfaker. Full dfaker 메서드에 대해 '특징"
|
||||
"점으로 변환'를 활성화합니다.\n"
|
||||
"L|dfl-h128: Deepfake lab의 128px in/out 모델\n"
|
||||
"L|dfl-sae: Deepface Lab의 적응형 모델\n"
|
||||
"L|dlight: 경량, 고해상도 DFaker 변형입니다.\n"
|
||||
"L|iae: 중간 층들을 사용하여 더 나은 세부 정보를 얻기 위해 노력하는 모델.\n"
|
||||
"L|lightweight: 저가형 카드용 경량 모델. 좋은 결과를 기대하지 마세요. 최대한 "
|
||||
"낮게 잡아서 배치 사이즈 8에 1.6GB까지 훈련이 가능합니다.\n"
|
||||
"L|realface: DFaker를 기반으로 한 높은 디테일의 이중 밀도 모델로, 사용자 정의 "
|
||||
"가능한 입/출력 해상도를 제공합니다. 오토인코더가 불균형하여 B>A 스왑이 잘 작"
|
||||
"동하지 않습니다. Andenixa 등에 의해. 매우 구성 가능합니다.\n"
|
||||
"L|unbalanced: andenixa의 128px in/out 모델. 오토인코더가 불균형하여 B>A 스왑"
|
||||
"이 잘 작동하지 않습니다. 매우 구성 가능합니다.\n"
|
||||
"L|villain : villainguy의 128px in/out 모델. 리소스가 매우 부족합니다( 상당한 "
|
||||
"양의 VRAM이 있는 GPU가 필요합니다). 세부 사항에는 좋지만 색상 차이에 더 취약"
|
||||
"합니다."
|
||||
|
||||
#: lib/cli/args_train.py:125
|
||||
msgid ""
|
||||
"Output a summary of the model and exit. If a model folder is provided then a "
|
||||
"summary of the saved model is displayed. Otherwise a summary of the model "
|
||||
"that would be created by the chosen plugin and configuration settings is "
|
||||
"displayed."
|
||||
msgstr ""
|
||||
"모델 요약을 출력하고 종료합니다. 모델 폴더가 제공되면 저장된 모델의 요약이 표"
|
||||
"시됩니다. 그렇지 않으면 선택한 플러그인 및 구성 설정에 의해 생성되는 모델 요"
|
||||
"약이 표시됩니다."
|
||||
|
||||
#: lib/cli/args_train.py:135
|
||||
msgid ""
|
||||
"Freeze the weights of the model. Freezing weights means that some of the "
|
||||
"parameters in the model will no longer continue to learn, but those that are "
|
||||
"not frozen will continue to learn. For most models, this will freeze the "
|
||||
"encoder, but some models may have configuration options for freezing other "
|
||||
"layers."
|
||||
msgstr ""
|
||||
"모델의 가중치를 동결합니다. 가중치를 고정하면 모델의 일부 매개변수가 더 이상 "
|
||||
"학습되지 않지만 고정되지 않은 매개변수는 계속 학습됩니다. 대부분의 모델에서 "
|
||||
"이렇게 하면 인코더가 고정되지만 일부 모델에는 다른 레이어를 고정하기 위한 구"
|
||||
"성 옵션이 있을 수 있습니다."
|
||||
|
||||
#: lib/cli/args_train.py:147 lib/cli/args_train.py:160
|
||||
#: lib/cli/args_train.py:175 lib/cli/args_train.py:191
|
||||
#: lib/cli/args_train.py:200
|
||||
msgid "training"
|
||||
msgstr "훈련"
|
||||
|
||||
#: lib/cli/args_train.py:149
|
||||
msgid ""
|
||||
"Batch size. This is the number of images processed through the model for "
|
||||
"each side per iteration. NB: As the model is fed 2 sides at a time, the "
|
||||
"actual number of images within the model at any one time is double the "
|
||||
"number that you set here. Larger batches require more GPU RAM."
|
||||
msgstr ""
|
||||
"배치 크기. 반복당 각 측면에 대해 모델을 통해 처리되는 이미지 수입니다. NB: "
|
||||
"한 번에 모델에게 2개의 측면이 공급되므로 한 번에 모델 내의 실제 이미지 수는 "
|
||||
"여기에서 설정한 수의 두 배입니다. 더 큰 배치에는 더 많은 GPU RAM이 필요합니"
|
||||
"다."
|
||||
|
||||
#: lib/cli/args_train.py:162
|
||||
msgid ""
|
||||
"Length of training in iterations. This is only really used for automation. "
|
||||
"There is no 'correct' number of iterations a model should be trained for. "
|
||||
"You should stop training when you are happy with the previews. However, if "
|
||||
"you want the model to stop automatically at a set number of iterations, you "
|
||||
"can set that value here."
|
||||
msgstr ""
|
||||
"반복에서 훈련 길이. 이것은 실제로 자동화에만 사용됩니다. 모델을 훈련해야 하"
|
||||
"는 '올바른' 반복 횟수는 없습니다. 미리 보기에 만족하면 훈련을 중단해야 합니"
|
||||
"다. 그러나 설정된 반복 횟수에서 모델이 자동으로 중지되도록 하려면 여기에서 해"
|
||||
"당 값을 설정할 수 있습니다."
|
||||
|
||||
#: lib/cli/args_train.py:177
|
||||
msgid ""
|
||||
"R|Select the distribution stategy to use.\n"
|
||||
"L|default: Use Tensorflow's default distribution strategy.\n"
|
||||
"L|central-storage: Centralizes variables on the CPU whilst operations are "
|
||||
"performed on 1 or more local GPUs. This can help save some VRAM at the cost "
|
||||
"of some speed by not storing variables on the GPU. Note: Mixed-Precision is "
|
||||
"not supported on multi-GPU setups.\n"
|
||||
"L|mirrored: Supports synchronous distributed training across multiple local "
|
||||
"GPUs. A copy of the model and all variables are loaded onto each GPU with "
|
||||
"batches distributed to each GPU at each iteration."
|
||||
msgstr ""
|
||||
"R|사용할 배포 상태를 선택합니다.\n"
|
||||
"L|default: Tensorflow의 기본 배포 전략을 사용합니다.\n"
|
||||
"L|central-storage: 작업이 1개 이상의 로컬 GPU에서 수행되는 동안 CPU의 변수를 "
|
||||
"중앙 집중화합니다. 이렇게 하면 GPU에 변수를 저장하지 않음으로써 약간의 속도"
|
||||
"를 희생하여 일부 VRAM을 절약할 수 있습니다. 참고: 다중 정밀도는 다중 GPU 설정"
|
||||
"에서 지원되지 않습니다.\n"
|
||||
"L|mirrored: 여러 로컬 GPU에서 동기화 분산 훈련을 지원합니다. 모델의 복사본과 "
|
||||
"모든 변수는 각 반복에서 각 GPU에 배포된 배치들와 함께 각 GPU에 로드됩니다."
|
||||
|
||||
#: lib/cli/args_train.py:193
|
||||
msgid ""
|
||||
"Disables TensorBoard logging. NB: Disabling logs means that you will not be "
|
||||
"able to use the graph or analysis for this session in the GUI."
|
||||
msgstr ""
|
||||
"텐서보드 로깅을 비활성화합니다. 주의: 로그를 비활성화하면 GUI에서 이 세션에 "
|
||||
"대한 그래프 또는 분석을 사용할 수 없습니다."
|
||||
|
||||
#: lib/cli/args_train.py:202
|
||||
msgid ""
|
||||
"Use the Learning Rate Finder to discover the optimal learning rate for "
|
||||
"training. For new models, this will calculate the optimal learning rate for "
|
||||
"the model. For existing models this will use the optimal learning rate that "
|
||||
"was discovered when initializing the model. Setting this option will ignore "
|
||||
"the manually configured learning rate (configurable in train settings)."
|
||||
msgstr ""
|
||||
"학습률 찾기를 사용하여 훈련을 위한 최적의 학습률을 찾아보세요. 새 모델의 경"
|
||||
"우 모델에 대한 최적의 학습률을 계산합니다. 기존 모델의 경우 모델을 초기화할 "
|
||||
"때 발견된 최적의 학습률을 사용합니다. 이 옵션을 설정하면 수동으로 구성된 학습"
|
||||
"률(기차 설정에서 구성 가능)이 무시됩니다."
|
||||
|
||||
#: lib/cli/args_train.py:215 lib/cli/args_train.py:225
|
||||
msgid "Saving"
|
||||
msgstr "저장"
|
||||
|
||||
#: lib/cli/args_train.py:216
|
||||
msgid "Sets the number of iterations between each model save."
|
||||
msgstr "각 모델 저장 사이의 반복 횟수를 설정합니다."
|
||||
|
||||
#: lib/cli/args_train.py:227
|
||||
msgid ""
|
||||
"Sets the number of iterations before saving a backup snapshot of the model "
|
||||
"in it's current state. Set to 0 for off."
|
||||
msgstr ""
|
||||
"현재 상태에서 모델의 백업 스냅샷을 저장하기 전에 반복할 횟수를 설정합니다. 0"
|
||||
"으로 설정하면 꺼집니다."
|
||||
|
||||
#: lib/cli/args_train.py:234 lib/cli/args_train.py:246
|
||||
#: lib/cli/args_train.py:258
|
||||
msgid "timelapse"
|
||||
msgstr "타임랩스"
|
||||
|
||||
#: lib/cli/args_train.py:236
|
||||
msgid ""
|
||||
"Optional for creating a timelapse. Timelapse will save an image of your "
|
||||
"selected faces into the timelapse-output folder at every save iteration. "
|
||||
"This should be the input folder of 'A' faces that you would like to use for "
|
||||
"creating the timelapse. You must also supply a --timelapse-output and a --"
|
||||
"timelapse-input-B parameter."
|
||||
msgstr ""
|
||||
"타임랩스를 만드는 옵션입니다. Timelapse(시간 경과)는 저장을 반복할 때마다 선"
|
||||
"택한 얼굴의 이미지를 Timelapse-output(시간 경과 출력) 폴더에 저장합니다. 타임"
|
||||
"랩스를 만드는 데 사용할 'A' 얼굴의 입력 폴더여야 합니다. 또한 사용자는 --"
|
||||
"timelapse-output 및 --timelapse-input-B 매개 변수를 제공해야 합니다."
|
||||
|
||||
#: lib/cli/args_train.py:248
|
||||
msgid ""
|
||||
"Optional for creating a timelapse. Timelapse will save an image of your "
|
||||
"selected faces into the timelapse-output folder at every save iteration. "
|
||||
"This should be the input folder of 'B' faces that you would like to use for "
|
||||
"creating the timelapse. You must also supply a --timelapse-output and a --"
|
||||
"timelapse-input-A parameter."
|
||||
msgstr ""
|
||||
"타임 랩스를 만드는 데 선택적입니다. Timelapse(시간 경과)는 저장을 반복할 때마"
|
||||
"다 선택한 얼굴의 이미지를 Timelapse-output(시간 경과 출력) 폴더에 저장합니"
|
||||
"다. 타임 랩스를 만드는 데 사용할 'B' 얼굴의 입력 폴더여야 합니다. 또한 사용자"
|
||||
"는 --timelapse-output 및 --timelapse-input-A 매개 변수를 제공해야 합니다."
|
||||
|
||||
#: lib/cli/args_train.py:260
|
||||
msgid ""
|
||||
"Optional for creating a timelapse. Timelapse will save an image of your "
|
||||
"selected faces into the timelapse-output folder at every save iteration. If "
|
||||
"the input folders are supplied but no output folder, it will default to your "
|
||||
"model folder/timelapse/"
|
||||
msgstr ""
|
||||
"타임랩스를 만드는 데 선택적입니다. Timelapse(시간 경과)는 저장을 반복할 때마"
|
||||
"다 선택한 얼굴의 이미지를 Timelapse-output(시간 경과 출력) 폴더에 저장합니"
|
||||
"다. 입력 폴더가 제공되었지만 출력 폴더가 없는 경우 모델 폴더에/timelapse/로 "
|
||||
"기본 설정됩니다"
|
||||
|
||||
#: lib/cli/args_train.py:269 lib/cli/args_train.py:276
|
||||
msgid "preview"
|
||||
msgstr "미리보기"
|
||||
|
||||
#: lib/cli/args_train.py:270
|
||||
msgid "Show training preview output. in a separate window."
|
||||
msgstr "훈련 미리보기 결과를 각기 다른 창에서 보여줍니다."
|
||||
|
||||
#: lib/cli/args_train.py:278
|
||||
msgid ""
|
||||
"Writes the training result to a file. The image will be stored in the root "
|
||||
"of your FaceSwap folder."
|
||||
msgstr ""
|
||||
"훈련 결과를 파일에 씁니다. 이미지는 Faceswap 폴더의 최상위 폴더에 저장됩니다."
|
||||
|
||||
#: lib/cli/args_train.py:285 lib/cli/args_train.py:295
|
||||
#: lib/cli/args_train.py:305 lib/cli/args_train.py:315
|
||||
msgid "augmentation"
|
||||
msgstr "보정"
|
||||
|
||||
#: lib/cli/args_train.py:287
|
||||
msgid ""
|
||||
"Warps training faces to closely matched Landmarks from the opposite face-set "
|
||||
"rather than randomly warping the face. This is the 'dfaker' way of doing "
|
||||
"warping."
|
||||
msgstr ""
|
||||
"무작위로 얼굴을 변환하지 않고 반대쪽 얼굴 세트에서 특징점과 밀접하게 일치하도"
|
||||
"록 훈련 얼굴을 변환해줍니다. 이것은 변환하는 'dfaker' 방식이다."
|
||||
|
||||
#: lib/cli/args_train.py:297
|
||||
msgid ""
|
||||
"To effectively learn, a random set of images are flipped horizontally. "
|
||||
"Sometimes it is desirable for this not to occur. Generally this should be "
|
||||
"left off except for during 'fit training'."
|
||||
msgstr ""
|
||||
"효과적으로 학습하기 위해 임의의 이미지 세트를 수평으로 뒤집습니다. 때때로 이"
|
||||
"런 일이 일어나지 않는 것이 바람직합니다. 일반적으로 'fit training' 중을 제외"
|
||||
"하고는 이 작업을 중단해야 합니다."
|
||||
|
||||
#: lib/cli/args_train.py:307
|
||||
msgid ""
|
||||
"Color augmentation helps make the model less susceptible to color "
|
||||
"differences between the A and B sets, at an increased training time cost. "
|
||||
"Enable this option to disable color augmentation."
|
||||
msgstr ""
|
||||
"색상 보정은 모델이 A와 B 세트 사이의 색상 차이에 덜 민감하게 만드는 데 도움"
|
||||
"이 되며, 훈련 시간 비용이 증가합니다. 색상 보저를 사용하지 않으려면 이 옵션"
|
||||
"을 사용합니다."
|
||||
|
||||
#: lib/cli/args_train.py:317
|
||||
msgid ""
|
||||
"Warping is integral to training the Neural Network. This option should only "
|
||||
"be enabled towards the very end of training to try to bring out more detail. "
|
||||
"Think of it as 'fine-tuning'. Enabling this option from the beginning is "
|
||||
"likely to kill a model and lead to terrible results."
|
||||
msgstr ""
|
||||
"변환은 신경망을 훈련하는 데 필수적입니다. 이 옵션은 보다 세부적인 것들을 뽑아"
|
||||
"내위하여 훈련 막바지까지 활성화하여야 합니다. 이것은 '미세 조정'이라고 생각하"
|
||||
"면 됩니다. 처음부터 이 옵션을 활성화하면 모델이 죽을 수있고 끔찍한 결과를 초"
|
||||
"래할 수 있습니다."
|
Binary file not shown.
|
@ -7,8 +7,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-02-24 00:27+0000\n"
|
||||
"PO-Revision-Date: 2023-02-24 00:34+0000\n"
|
||||
"POT-Creation-Date: 2024-03-28 23:49+0000\n"
|
||||
"PO-Revision-Date: 2024-03-29 00:05+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: ko_KR\n"
|
||||
|
@ -16,15 +16,15 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Poedit 3.0.1\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#: tools/alignments/cli.py:17
|
||||
#: tools/alignments/cli.py:16
|
||||
msgid ""
|
||||
"This command lets you perform various tasks pertaining to an alignments file."
|
||||
msgstr ""
|
||||
"이 명령을 사용하여 alignments 파일과 관련된 다양한 작ㅇ를 수행할 수 있습니다."
|
||||
|
||||
#: tools/alignments/cli.py:32
|
||||
#: tools/alignments/cli.py:31
|
||||
msgid ""
|
||||
"Alignments tool\n"
|
||||
"This tool allows you to perform numerous actions on or using an alignments "
|
||||
|
@ -34,16 +34,16 @@ msgstr ""
|
|||
"이 도구를 사용하면 해당 얼굴 세트/프레임 원본에 해당하는 alignments 파일을 사"
|
||||
"용하거나 여러 작업을 수행할 수 있습니다."
|
||||
|
||||
#: tools/alignments/cli.py:44
|
||||
#: tools/alignments/cli.py:43
|
||||
msgid " Must Pass in a frames folder/source video file (-fr)."
|
||||
msgstr ""
|
||||
" 프레임들이 저장된 폴더나 원본 비디오 파일을 무조건 전달해야 합니다 (-fr)."
|
||||
|
||||
#: tools/alignments/cli.py:45
|
||||
#: tools/alignments/cli.py:44
|
||||
msgid " Must Pass in a faces folder (-fc)."
|
||||
msgstr " 얼굴 폴더를 무조건 전달해야 합니다 (-fc)."
|
||||
|
||||
#: tools/alignments/cli.py:46
|
||||
#: tools/alignments/cli.py:45
|
||||
msgid ""
|
||||
" Must Pass in either a frames folder/source video file OR a faces folder (-"
|
||||
"fr or -fc)."
|
||||
|
@ -51,7 +51,7 @@ msgstr ""
|
|||
" 프레임 폴더나 원본 비디오 파일 또는 얼굴 폴더중 하나를 무조건 전달해야 합니"
|
||||
"다 (-fr and -fc)."
|
||||
|
||||
#: tools/alignments/cli.py:48
|
||||
#: tools/alignments/cli.py:47
|
||||
msgid ""
|
||||
" Must Pass in a frames folder/source video file AND a faces folder (-fr and -"
|
||||
"fc)."
|
||||
|
@ -59,11 +59,11 @@ msgstr ""
|
|||
" 프레임 폴더나 원본 비디오 파일 그리고 얼굴 폴더를 무조건 전달해야 합니다 (-"
|
||||
"fr and -fc)."
|
||||
|
||||
#: tools/alignments/cli.py:50
|
||||
#: tools/alignments/cli.py:49
|
||||
msgid " Use the output option (-o) to process results."
|
||||
msgstr " 결과를 진행하려면 (-o) 출력 옵션을 사용하세요."
|
||||
|
||||
#: tools/alignments/cli.py:58 tools/alignments/cli.py:97
|
||||
#: tools/alignments/cli.py:57 tools/alignments/cli.py:97
|
||||
msgid "processing"
|
||||
msgstr "처리"
|
||||
|
||||
|
@ -131,7 +131,7 @@ msgstr ""
|
|||
"L| 'spatial': 공간 및 시간 필터링을 수행하여 alignments를 원활하게 수행합니다"
|
||||
"(실험적!)."
|
||||
|
||||
#: tools/alignments/cli.py:99
|
||||
#: tools/alignments/cli.py:100
|
||||
msgid ""
|
||||
"R|How to output discovered items ('faces' and 'frames' only):\n"
|
||||
"L|'console': Print the list of frames to the screen. (DEFAULT)\n"
|
||||
|
@ -145,12 +145,12 @@ msgstr ""
|
|||
"L|'파일': 프레임 목록을 텍스트 파일(소스 디렉토리에 저장)로 출력합니다.\n"
|
||||
"L|'이동': 검색된 항목을 원본 디렉토리 내의 하위 폴더로 이동합니다."
|
||||
|
||||
#: tools/alignments/cli.py:110 tools/alignments/cli.py:123
|
||||
#: tools/alignments/cli.py:130 tools/alignments/cli.py:137
|
||||
#: tools/alignments/cli.py:111 tools/alignments/cli.py:134
|
||||
#: tools/alignments/cli.py:141
|
||||
msgid "data"
|
||||
msgstr "데이터"
|
||||
|
||||
#: tools/alignments/cli.py:114
|
||||
#: tools/alignments/cli.py:118
|
||||
msgid ""
|
||||
"Full path to the alignments file to be processed. If you have input a "
|
||||
"'frames_dir' and don't provide this option, the process will try to find the "
|
||||
|
@ -163,15 +163,11 @@ msgstr ""
|
|||
"다. 지정된 얼굴 폴더에 alignments 파일이 생성될 때 모든 작업은 'from-"
|
||||
"faces'를 제외한 alignments 파일이 필요로 합니다."
|
||||
|
||||
#: tools/alignments/cli.py:124
|
||||
msgid "Directory containing extracted faces."
|
||||
msgstr "추출된 얼굴들이 저장된 디렉토리."
|
||||
|
||||
#: tools/alignments/cli.py:131
|
||||
#: tools/alignments/cli.py:135
|
||||
msgid "Directory containing source frames that faces were extracted from."
|
||||
msgstr "얼굴 추출의 소스로 쓰인 원본 프레임이 저장된 디렉토리."
|
||||
|
||||
#: tools/alignments/cli.py:138
|
||||
#: tools/alignments/cli.py:143
|
||||
msgid ""
|
||||
"R|Run the aligmnents tool on multiple sources. The following jobs support "
|
||||
"batch mode:\n"
|
||||
|
@ -207,12 +203,12 @@ msgstr ""
|
|||
"지의 하위 폴더여야 합니다. 에. 정렬 파일은 기본 위치에 있어야 합니다. 다른 모"
|
||||
"든 작업의 경우 이 옵션은 무시됩니다."
|
||||
|
||||
#: tools/alignments/cli.py:164 tools/alignments/cli.py:175
|
||||
#: tools/alignments/cli.py:185
|
||||
#: tools/alignments/cli.py:169 tools/alignments/cli.py:181
|
||||
#: tools/alignments/cli.py:191
|
||||
msgid "extract"
|
||||
msgstr "추출"
|
||||
|
||||
#: tools/alignments/cli.py:165
|
||||
#: tools/alignments/cli.py:171
|
||||
msgid ""
|
||||
"[Extract only] Extract every 'nth' frame. This option will skip frames when "
|
||||
"extracting faces. For example a value of 1 will extract faces from every "
|
||||
|
@ -222,11 +218,11 @@ msgstr ""
|
|||
"프레임을 건너뜁니다. 예를 들어, 값이 1이면 모든 프레임에서 얼굴이 추출되고, "
|
||||
"값이 10이면 모든 10번째 프레임에서 얼굴이 추출됩니다."
|
||||
|
||||
#: tools/alignments/cli.py:176
|
||||
#: tools/alignments/cli.py:182
|
||||
msgid "[Extract only] The output size of extracted faces."
|
||||
msgstr "[Extract only] 추출된 얼굴들의 결과 크기입니다."
|
||||
|
||||
#: tools/alignments/cli.py:186
|
||||
#: tools/alignments/cli.py:193
|
||||
msgid ""
|
||||
"[Extract only] Only extract faces that have been resized by this percent or "
|
||||
"more to meet the specified extract size (`-sz`, `--size`). Useful for "
|
||||
|
@ -242,3 +238,6 @@ msgstr ""
|
|||
"512px인 경우, 50으로 설정하면 크기가 256px 이상인 면만 포함됩니다. 100으로 설"
|
||||
"정하면 512px 이상에서 크기가 조정된 얼굴만 추출됩니다. 200으로 설정하면 "
|
||||
"1024px 이상에서 축소된 얼굴만 추출됩니다."
|
||||
|
||||
#~ msgid "Directory containing extracted faces."
|
||||
#~ msgstr "추출된 얼굴들이 저장된 디렉토리."
|
||||
|
|
Binary file not shown.
|
@ -5,8 +5,9 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"POT-Creation-Date: 2021-02-18 23:34-0000\n"
|
||||
"PO-Revision-Date: 2022-11-26 21:19+0900\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-03-28 23:50+0000\n"
|
||||
"PO-Revision-Date: 2024-03-29 00:05+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: ko_KR\n"
|
||||
|
@ -15,18 +16,18 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
"X-Generator: Poedit 3.2\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#: tools/effmpeg/cli.py:15
|
||||
msgid "This command allows you to easily execute common ffmpeg tasks."
|
||||
msgstr ""
|
||||
"이 명령어는 사용자에게 일반 ffmpeg 작업을 쉽게 실행할 수 있도록 해줍니다."
|
||||
|
||||
#: tools/effmpeg/cli.py:24
|
||||
#: tools/effmpeg/cli.py:52
|
||||
msgid "A wrapper for ffmpeg for performing image <> video converting."
|
||||
msgstr "이미지 <> 비디오 변환을 수행하기 위한 ffmpeg용 wrapper입니다."
|
||||
|
||||
#: tools/effmpeg/cli.py:51
|
||||
#: tools/effmpeg/cli.py:64
|
||||
msgid ""
|
||||
"R|Choose which action you want ffmpeg ffmpeg to do.\n"
|
||||
"L|'extract': turns videos into images \n"
|
||||
|
@ -48,15 +49,15 @@ msgstr ""
|
|||
"L|'rotate' 비디오 회전.\n"
|
||||
"L| 'slice'는 동영상의 일부를 별도의 동영상 파일로 잘라냅니다."
|
||||
|
||||
#: tools/effmpeg/cli.py:65
|
||||
#: tools/effmpeg/cli.py:78
|
||||
msgid "Input file."
|
||||
msgstr "입력 파일."
|
||||
|
||||
#: tools/effmpeg/cli.py:66 tools/effmpeg/cli.py:73 tools/effmpeg/cli.py:87
|
||||
#: tools/effmpeg/cli.py:79 tools/effmpeg/cli.py:86 tools/effmpeg/cli.py:100
|
||||
msgid "data"
|
||||
msgstr "데이터"
|
||||
|
||||
#: tools/effmpeg/cli.py:76
|
||||
#: tools/effmpeg/cli.py:89
|
||||
msgid ""
|
||||
"Output file. If no output is specified then: if the output is meant to be a "
|
||||
"video then a video called 'out.mkv' will be created in the input directory; "
|
||||
|
@ -69,16 +70,16 @@ msgstr ""
|
|||
"리 내에 'out'이라는 디렉터리가 생성됩니다. 참고: 선택한 출력 파일 확장자가 파"
|
||||
"일 인코딩을 결정합니다."
|
||||
|
||||
#: tools/effmpeg/cli.py:89
|
||||
#: tools/effmpeg/cli.py:102
|
||||
msgid "Path to reference video if 'input' was not a video."
|
||||
msgstr "만약 input이 비디오가 아닐 경우 참고 비디으의 경로."
|
||||
|
||||
#: tools/effmpeg/cli.py:95 tools/effmpeg/cli.py:105 tools/effmpeg/cli.py:142
|
||||
#: tools/effmpeg/cli.py:171
|
||||
#: tools/effmpeg/cli.py:108 tools/effmpeg/cli.py:118 tools/effmpeg/cli.py:156
|
||||
#: tools/effmpeg/cli.py:185
|
||||
msgid "output"
|
||||
msgstr "출력"
|
||||
|
||||
#: tools/effmpeg/cli.py:97
|
||||
#: tools/effmpeg/cli.py:110
|
||||
msgid ""
|
||||
"Provide video fps. Can be an integer, float or fraction. Negative values "
|
||||
"will will make the program try to get the fps from the input or reference "
|
||||
|
@ -87,7 +88,7 @@ msgstr ""
|
|||
"비디오 fps를 제공합니다. 정수, 부동 또는 분수가 될 수 있습니다. 음수 값을 지"
|
||||
"정하면 프로그램이 입력 또는 참조 비디오에서 fps를 가져오려고 합니다."
|
||||
|
||||
#: tools/effmpeg/cli.py:107
|
||||
#: tools/effmpeg/cli.py:120
|
||||
msgid ""
|
||||
"Image format that extracted images should be saved as. '.bmp' will offer the "
|
||||
"fastest extraction speed, but will take the most storage space. '.png' will "
|
||||
|
@ -97,11 +98,11 @@ msgstr ""
|
|||
"속도를 제공하지만 가장 많은 저장 공간을 차지합니다. '.png'은 속도는 더 느리지"
|
||||
"만 저장 공간은 더 적게 차지합니다."
|
||||
|
||||
#: tools/effmpeg/cli.py:114 tools/effmpeg/cli.py:123 tools/effmpeg/cli.py:132
|
||||
#: tools/effmpeg/cli.py:127 tools/effmpeg/cli.py:136 tools/effmpeg/cli.py:145
|
||||
msgid "clip"
|
||||
msgstr "클립"
|
||||
|
||||
#: tools/effmpeg/cli.py:116
|
||||
#: tools/effmpeg/cli.py:129
|
||||
msgid ""
|
||||
"Enter the start time from which an action is to be applied. Default: "
|
||||
"00:00:00, in HH:MM:SS format. You can also enter the time with or without "
|
||||
|
@ -111,7 +112,7 @@ msgstr ""
|
|||
"콜론을 포함하거나 포함하지 않은 시간(예: 00:0000 또는 026010)을 입력할 수도 "
|
||||
"있습니다."
|
||||
|
||||
#: tools/effmpeg/cli.py:125
|
||||
#: tools/effmpeg/cli.py:138
|
||||
msgid ""
|
||||
"Enter the end time to which an action is to be applied. If both an end time "
|
||||
"and duration are set, then the end time will be used and the duration will "
|
||||
|
@ -120,7 +121,7 @@ msgstr ""
|
|||
"적용된 작업의 종료 시간을 입력합니다. 종료 시간과 기간이 모두 설정된 경우 종"
|
||||
"료 시간이 사용되고 기간이 무시됩니다. 기본값: 00:00:00, HH:MM:SS."
|
||||
|
||||
#: tools/effmpeg/cli.py:134
|
||||
#: tools/effmpeg/cli.py:147
|
||||
msgid ""
|
||||
"Enter the duration of the chosen action, for example if you enter 00:00:10 "
|
||||
"for slice, then the first 10 seconds after and including the start time will "
|
||||
|
@ -132,7 +133,7 @@ msgstr ""
|
|||
"MM:SS 형식입니다. 콜론을 포함하거나 포함하지 않은 시간(예: 00:0000 또는 "
|
||||
"026010)을 입력할 수도 있습니다."
|
||||
|
||||
#: tools/effmpeg/cli.py:144
|
||||
#: tools/effmpeg/cli.py:158
|
||||
msgid ""
|
||||
"Mux the audio from the reference video into the input video. This option is "
|
||||
"only used for the 'gen-vid' action. 'mux-audio' action has this turned on "
|
||||
|
@ -141,11 +142,11 @@ msgstr ""
|
|||
"참조 비디오의 오디오를 입력 비디오에 병합합니다. 이 옵션은 'gen-vid' 작업에"
|
||||
"만 사용됩니다. 'mux-timeout' 작업은 이 작업을 암시적으로 활성화했습니다."
|
||||
|
||||
#: tools/effmpeg/cli.py:155 tools/effmpeg/cli.py:165
|
||||
#: tools/effmpeg/cli.py:169 tools/effmpeg/cli.py:179
|
||||
msgid "rotate"
|
||||
msgstr "회전"
|
||||
|
||||
#: tools/effmpeg/cli.py:157
|
||||
#: tools/effmpeg/cli.py:171
|
||||
msgid ""
|
||||
"Transpose the video. If transpose is set, then degrees will be ignored. For "
|
||||
"cli you can enter either the number or the long command name, e.g. to use "
|
||||
|
@ -155,19 +156,19 @@ msgstr ""
|
|||
"긴 명령 이름을 입력할 수 있습니다(예: (1, 90Clockwise) (-tr 1 또는 -tr "
|
||||
"90Clockwise)"
|
||||
|
||||
#: tools/effmpeg/cli.py:166
|
||||
#: tools/effmpeg/cli.py:180
|
||||
msgid "Rotate the video clockwise by the given number of degrees."
|
||||
msgstr "비디오를 주어진 입력 각도에 따라 시계방향으로 회전합니다."
|
||||
|
||||
#: tools/effmpeg/cli.py:173
|
||||
#: tools/effmpeg/cli.py:187
|
||||
msgid "Set the new resolution scale if the chosen action is 'rescale'."
|
||||
msgstr "선택한 작업이 'rescale'이라면 새로운 해상도 크기를 설정합니다."
|
||||
|
||||
#: tools/effmpeg/cli.py:178 tools/effmpeg/cli.py:186
|
||||
#: tools/effmpeg/cli.py:192 tools/effmpeg/cli.py:200
|
||||
msgid "settings"
|
||||
msgstr "설정"
|
||||
|
||||
#: tools/effmpeg/cli.py:180
|
||||
#: tools/effmpeg/cli.py:194
|
||||
msgid ""
|
||||
"Reduces output verbosity so that only serious errors are printed. If both "
|
||||
"quiet and verbose are set, verbose will override quiet."
|
||||
|
@ -175,7 +176,7 @@ msgstr ""
|
|||
"출력 상세도를 줄여 심각한 오류만 출력합니다. quiet와 verbose가 모두 설정된 경"
|
||||
"우 verbose가 quiet를 재정의합니다."
|
||||
|
||||
#: tools/effmpeg/cli.py:188
|
||||
#: tools/effmpeg/cli.py:202
|
||||
msgid ""
|
||||
"Increases output verbosity. If both quiet and verbose are set, verbose will "
|
||||
"override quiet."
|
||||
|
|
Binary file not shown.
|
@ -5,8 +5,9 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"POT-Creation-Date: 2022-11-24 14:17+0900\n"
|
||||
"PO-Revision-Date: 2022-11-26 23:49+0900\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-03-28 23:55+0000\n"
|
||||
"PO-Revision-Date: 2024-03-29 00:05+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: ko_KR\n"
|
||||
|
@ -15,9 +16,9 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
"X-Generator: Poedit 3.2\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#: tools/manual\cli.py:13
|
||||
#: tools/manual/cli.py:13
|
||||
msgid ""
|
||||
"This command lets you perform various actions on frames, faces and "
|
||||
"alignments files using visual tools."
|
||||
|
@ -25,7 +26,7 @@ msgstr ""
|
|||
"이 명령어는 visual 도구들을 사용하여 프레임, 얼굴, alignments 파일들에 대한 "
|
||||
"다양한 작업을 수행할 수 있도록 해줍니다."
|
||||
|
||||
#: tools/manual\cli.py:23
|
||||
#: tools/manual/cli.py:23
|
||||
msgid ""
|
||||
"A tool to perform various actions on frames, faces and alignments files "
|
||||
"using visual tools"
|
||||
|
@ -33,33 +34,33 @@ msgstr ""
|
|||
"프레임, 얼굴, alignments 파일들에 대한 다양한 작업을 수행할 수 있도록 해주는 "
|
||||
"도구"
|
||||
|
||||
#: tools/manual\cli.py:35 tools/manual\cli.py:43
|
||||
#: tools/manual/cli.py:35 tools/manual/cli.py:44
|
||||
msgid "data"
|
||||
msgstr "데이터"
|
||||
|
||||
#: tools/manual\cli.py:37
|
||||
#: tools/manual/cli.py:38
|
||||
msgid ""
|
||||
"Path to the alignments file for the input, if not at the default location"
|
||||
msgstr ""
|
||||
"입력에 대한 alignments 파일의 경로, 만약 설정되지 않았다면 기본 경로입니다"
|
||||
|
||||
#: tools/manual\cli.py:44
|
||||
#: tools/manual/cli.py:46
|
||||
msgid ""
|
||||
"Video file or directory containing source frames that faces were extracted "
|
||||
"from."
|
||||
msgstr "얼굴이 추출된 소스 프레임을 가지고 있는 비디오 파일 또는 디렉토리."
|
||||
|
||||
#: tools/manual\cli.py:51 tools/manual\cli.py:59
|
||||
#: tools/manual/cli.py:53 tools/manual/cli.py:62
|
||||
msgid "options"
|
||||
msgstr "설정"
|
||||
|
||||
#: tools/manual\cli.py:52
|
||||
#: tools/manual/cli.py:55
|
||||
msgid ""
|
||||
"Force regeneration of the low resolution jpg thumbnails in the alignments "
|
||||
"file."
|
||||
msgstr "_alignments 파일에서 저해상도 jpg 미리 보기를 강제로 재생성합니다."
|
||||
|
||||
#: tools/manual\cli.py:60
|
||||
#: tools/manual/cli.py:64
|
||||
msgid ""
|
||||
"The process attempts to speed up generation of thumbnails by extracting from "
|
||||
"the video in parallel threads. For some videos, this causes the caching "
|
||||
|
|
Binary file not shown.
|
@ -7,8 +7,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-03-11 23:45+0000\n"
|
||||
"PO-Revision-Date: 2024-03-11 23:50+0000\n"
|
||||
"POT-Creation-Date: 2024-03-28 23:51+0000\n"
|
||||
"PO-Revision-Date: 2024-03-29 00:05+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: ko_KR\n"
|
||||
|
|
Binary file not shown.
|
@ -7,8 +7,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-06-28 14:05+0100\n"
|
||||
"PO-Revision-Date: 2022-11-27 01:32+0900\n"
|
||||
"POT-Creation-Date: 2024-03-28 23:51+0000\n"
|
||||
"PO-Revision-Date: 2024-03-29 00:05+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: ko_KR\n"
|
||||
|
@ -16,7 +16,7 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Poedit 3.2\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#: tools/model/cli.py:13
|
||||
msgid "This tool lets you perform actions on saved Faceswap models."
|
||||
|
@ -27,13 +27,13 @@ msgstr ""
|
|||
msgid "A tool for performing actions on Faceswap trained model files"
|
||||
msgstr "_Faceswap 훈련을 받은 모델 파일에서 작업을 수행하기 위한 도구"
|
||||
|
||||
#: tools/model/cli.py:33
|
||||
#: tools/model/cli.py:34
|
||||
msgid ""
|
||||
"Model directory. A directory containing the model you wish to perform an "
|
||||
"action on."
|
||||
msgstr "모델 디렉토리. 작업을 수행할 모델이 들어 있는 디렉토리입니다."
|
||||
|
||||
#: tools/model/cli.py:41
|
||||
#: tools/model/cli.py:43
|
||||
msgid ""
|
||||
"R|Choose which action you want to perform.\n"
|
||||
"L|'inference' - Create an inference only copy of the model. Strips any "
|
||||
|
@ -52,11 +52,11 @@ msgstr ""
|
|||
"L|'nan-scan' - 모델 파일에서 NaN 또는 Infs(잘못된 데이터)를 검색합니다.\n"
|
||||
"L|'restore' - 백업에서 모델을 복원합니다."
|
||||
|
||||
#: tools/model/cli.py:55 tools/model/cli.py:66
|
||||
#: tools/model/cli.py:57 tools/model/cli.py:69
|
||||
msgid "inference"
|
||||
msgstr "추론"
|
||||
|
||||
#: tools/model/cli.py:56
|
||||
#: tools/model/cli.py:59
|
||||
msgid ""
|
||||
"R|The format to save the model as. Note: Only used for 'inference' job.\n"
|
||||
"L|'h5' - Standard Keras H5 format. Does not store any custom layer "
|
||||
|
@ -70,9 +70,13 @@ msgstr ""
|
|||
"L| 'saved-model' - 텐서플로의 저장된 모델 형식. Faceswap 외부에서 모델을 로"
|
||||
"드하는 데 필요한 모든 정보를 포함합니다."
|
||||
|
||||
#: tools/model/cli.py:67
|
||||
#: tools/model/cli.py:71
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Only used for 'inference' job. Generate the inference model for B -> A "
|
||||
#| "instead of A -> B."
|
||||
msgid ""
|
||||
"Only used for 'inference' job. Generate the inference model for B -> A "
|
||||
"Only used for 'inference' job. Generate the inference model for B -> A "
|
||||
"instead of A -> B."
|
||||
msgstr ""
|
||||
"'추론' 작업에만 쓰입니다. A -> B 대신 B -> A에 대한 추론 모델을 생성합니다."
|
||||
|
|
Binary file not shown.
|
@ -5,8 +5,9 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"POT-Creation-Date: 2021-03-10 16:51-0000\n"
|
||||
"PO-Revision-Date: 2022-11-27 01:49+0900\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-03-28 23:53+0000\n"
|
||||
"PO-Revision-Date: 2024-03-29 00:04+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: ko_KR\n"
|
||||
|
@ -15,14 +16,14 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
"X-Generator: Poedit 3.2\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#: tools/preview\cli.py:13
|
||||
#: tools/preview/cli.py:15
|
||||
msgid "This command allows you to preview swaps to tweak convert settings."
|
||||
msgstr ""
|
||||
"이 명령어는 변환 설정을 변경하기 위한 변환 미리보기를 가능하게 해줍니다."
|
||||
|
||||
#: tools/preview\cli.py:22
|
||||
#: tools/preview/cli.py:30
|
||||
msgid ""
|
||||
"Preview tool\n"
|
||||
"Allows you to configure your convert settings with a live preview"
|
||||
|
@ -30,11 +31,11 @@ msgstr ""
|
|||
"미리보기 도구\n"
|
||||
"라이브로 미리보기를 보면서 변환 설정을 구성할 수 있도록 해줍니다"
|
||||
|
||||
#: tools/preview\cli.py:32 tools/preview\cli.py:41 tools/preview\cli.py:48
|
||||
#: tools/preview/cli.py:47 tools/preview/cli.py:57 tools/preview/cli.py:65
|
||||
msgid "data"
|
||||
msgstr "데이터"
|
||||
|
||||
#: tools/preview\cli.py:34
|
||||
#: tools/preview/cli.py:50
|
||||
msgid ""
|
||||
"Input directory or video. Either a directory containing the image files you "
|
||||
"wish to process or path to a video file."
|
||||
|
@ -42,42 +43,45 @@ msgstr ""
|
|||
"입력 디렉토리 또는 비디오. 처리할 이미지 파일이 들어 있는 디렉토리 또는 비디"
|
||||
"오 파일의 경로입니다."
|
||||
|
||||
#: tools/preview\cli.py:43
|
||||
#: tools/preview/cli.py:60
|
||||
msgid ""
|
||||
"Path to the alignments file for the input, if not at the default location"
|
||||
msgstr "입력 alignments 파일의 경로, 만약 제공되지 않는다면 기본 위치"
|
||||
|
||||
#: tools/preview\cli.py:50
|
||||
#: tools/preview/cli.py:68
|
||||
msgid ""
|
||||
"Model directory. A directory containing the trained model you wish to "
|
||||
"process."
|
||||
msgstr ""
|
||||
"모델 디렉토리. 사용자가 처리하고 싶어하는 훈련된 모델이 있는 디렉토리."
|
||||
|
||||
#: tools/preview\cli.py:57
|
||||
#: tools/preview/cli.py:74
|
||||
msgid "Swap the model. Instead of A -> B, swap B -> A"
|
||||
msgstr "모델을 스왑함. A -> B 대신, B -> A로 스왑함"
|
||||
|
||||
#: tools/preview\preview.py:1303
|
||||
#: tools/preview/control_panels.py:510
|
||||
msgid "Save full config"
|
||||
msgstr "전체 설정을 저장"
|
||||
|
||||
#: tools/preview\preview.py:1306
|
||||
#: tools/preview/control_panels.py:513
|
||||
msgid "Reset full config to default values"
|
||||
msgstr "전체 설정을 기본 값으로 초기화"
|
||||
|
||||
#: tools/preview\preview.py:1309
|
||||
#: tools/preview/control_panels.py:516
|
||||
msgid "Reset full config to saved values"
|
||||
msgstr "전체 설정을 저장된 값으로 초기화"
|
||||
|
||||
#: tools/preview\preview.py:1453
|
||||
msgid "Save {} config"
|
||||
msgstr "{} 설정 저장"
|
||||
#: tools/preview/control_panels.py:667
|
||||
#, python-brace-format
|
||||
msgid "Save {title} config"
|
||||
msgstr "{title} 설정 저장"
|
||||
|
||||
#: tools/preview\preview.py:1456
|
||||
msgid "Reset {} config to default values"
|
||||
msgstr "{} 설정을 기본 값으로 초기화"
|
||||
#: tools/preview/control_panels.py:670
|
||||
#, python-brace-format
|
||||
msgid "Reset {title} config to default values"
|
||||
msgstr "{title} 설정을 기본 값으로 초기화"
|
||||
|
||||
#: tools/preview\preview.py:1459
|
||||
msgid "Reset {} config to saved values"
|
||||
msgstr "{} 설정을 저장된 값으로 초기화"
|
||||
#: tools/preview/control_panels.py:673
|
||||
#, python-brace-format
|
||||
msgid "Reset {title} config to saved values"
|
||||
msgstr "{title} 설정을 저장된 값으로 초기화"
|
||||
|
|
Binary file not shown.
|
@ -7,8 +7,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-11-24 14:19+0900\n"
|
||||
"PO-Revision-Date: 2022-11-27 03:43+0900\n"
|
||||
"POT-Creation-Date: 2024-03-28 23:53+0000\n"
|
||||
"PO-Revision-Date: 2024-03-29 00:04+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: ko_KR\n"
|
||||
|
@ -16,19 +16,19 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Poedit 3.2\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#: tools/sort/cli.py:14
|
||||
#: tools/sort/cli.py:15
|
||||
msgid "This command lets you sort images using various methods."
|
||||
msgstr "이 명령어는 다양한 메소드를 이용하여 이미지를 정렬해줍니다."
|
||||
|
||||
#: tools/sort/cli.py:20
|
||||
#: tools/sort/cli.py:21
|
||||
msgid ""
|
||||
" Adjust the '-t' ('--threshold') parameter to control the strength of "
|
||||
"grouping."
|
||||
msgstr " 그룹화의 강도를 제어하기 위해 '-t' ('--threshold') 인자를 조정하세요."
|
||||
|
||||
#: tools/sort/cli.py:21
|
||||
#: tools/sort/cli.py:22
|
||||
msgid ""
|
||||
" Adjust the '-b' ('--bins') parameter to control the number of bins for "
|
||||
"grouping. Each image is allocated to a bin by the percentage of color pixels "
|
||||
|
@ -37,7 +37,7 @@ msgstr ""
|
|||
" '-b'('--bins') 매개 변수를 조정하여 그룹화할 bins의 수를 제어합니다. 각 이미"
|
||||
"지는 이미지에 나타나는 색상 픽셀의 백분율에 따라 bin에 할당됩니다."
|
||||
|
||||
#: tools/sort/cli.py:24
|
||||
#: tools/sort/cli.py:25
|
||||
msgid ""
|
||||
" Adjust the '-b' ('--bins') parameter to control the number of bins for "
|
||||
"grouping. Each image is allocated to a bin by the number of degrees the face "
|
||||
|
@ -46,7 +46,7 @@ msgstr ""
|
|||
" '-b'('--bins') 매개 변수를 조정하여 그룹화할 bins의 수를 제어합니다. 각 이미"
|
||||
"지는 얼굴이 이미지 중심에서 떨어진 각도에 따라 bin에 할당됩니다."
|
||||
|
||||
#: tools/sort/cli.py:27
|
||||
#: tools/sort/cli.py:28
|
||||
msgid ""
|
||||
" Adjust the '-b' ('--bins') parameter to control the number of bins for "
|
||||
"grouping. The minimum and maximum values are taken for the chosen sort "
|
||||
|
@ -56,15 +56,15 @@ msgstr ""
|
|||
"정렬 방법에 대해 최소값과 최대값이 사용됩니다. 그런 다음 bins가 그룹 정렬의 "
|
||||
"결과로 채워집니다."
|
||||
|
||||
#: tools/sort/cli.py:31
|
||||
#: tools/sort/cli.py:32
|
||||
msgid "faces by blurriness."
|
||||
msgstr "흐릿한 얼굴."
|
||||
|
||||
#: tools/sort/cli.py:32
|
||||
#: tools/sort/cli.py:33
|
||||
msgid "faces by fft filtered blurriness."
|
||||
msgstr "fft 필터링된 흐릿한 얼굴."
|
||||
|
||||
#: tools/sort/cli.py:33
|
||||
#: tools/sort/cli.py:34
|
||||
msgid ""
|
||||
"faces by the estimated distance of the alignments from an 'average' face. "
|
||||
"This can be useful for eliminating misaligned faces. Sorts from most like an "
|
||||
|
@ -74,7 +74,7 @@ msgstr ""
|
|||
"된 얼굴을 제거하는 데 유용할 수 있습니다. 가장 평균 얼굴에서 가장 덜 평균 얼"
|
||||
"굴순으로 정렬합니다."
|
||||
|
||||
#: tools/sort/cli.py:36
|
||||
#: tools/sort/cli.py:37
|
||||
msgid ""
|
||||
"faces using VGG Face2 by face similarity. This uses a pairwise clustering "
|
||||
"algorithm to check the distances between 512 features on every face in your "
|
||||
|
@ -84,23 +84,23 @@ msgstr ""
|
|||
"알고리즘을 사용하여 세트의 모든 얼굴에서 512개의 특징 사이의 거리를 확인하고 "
|
||||
"적절하게 정렬합니다."
|
||||
|
||||
#: tools/sort/cli.py:39
|
||||
#: tools/sort/cli.py:40
|
||||
msgid "faces by their landmarks."
|
||||
msgstr "특징점이 있는 얼굴."
|
||||
|
||||
#: tools/sort/cli.py:40
|
||||
#: tools/sort/cli.py:41
|
||||
msgid "Like 'face-cnn' but sorts by dissimilarity."
|
||||
msgstr "'face-cnn'과 비슷하지만 비유사성에 따라 정렬된."
|
||||
|
||||
#: tools/sort/cli.py:41
|
||||
#: tools/sort/cli.py:42
|
||||
msgid "faces by Yaw (rotation left to right)."
|
||||
msgstr "yaw (왼쪽에서 오른쪽으로 회전)에 의한 얼굴."
|
||||
|
||||
#: tools/sort/cli.py:42
|
||||
#: tools/sort/cli.py:43
|
||||
msgid "faces by Pitch (rotation up and down)."
|
||||
msgstr "pitch (위에서 아래로 회전)에 의한 얼굴."
|
||||
|
||||
#: tools/sort/cli.py:43
|
||||
#: tools/sort/cli.py:44
|
||||
msgid ""
|
||||
"faces by Roll (rotation). Aligned faces should have a roll value close to "
|
||||
"zero. The further the Roll value from zero the higher liklihood the face is "
|
||||
|
@ -109,20 +109,20 @@ msgstr ""
|
|||
"이동 (회전)에 의한 얼굴. 정렬된 얼굴들은 0에 가까운 이동 값을 가져야 한다. 이"
|
||||
"동 값이 0에서 멀수록 얼굴들이 잘못 정렬되었을 가능성이 높습니다."
|
||||
|
||||
#: tools/sort/cli.py:45
|
||||
#: tools/sort/cli.py:46
|
||||
msgid "faces by their color histogram."
|
||||
msgstr "색상 히스토그램에 의한 얼굴."
|
||||
|
||||
#: tools/sort/cli.py:46
|
||||
#: tools/sort/cli.py:47
|
||||
msgid "Like 'hist' but sorts by dissimilarity."
|
||||
msgstr "'hist' 같지만 비유사성에 따라 정렬된."
|
||||
|
||||
#: tools/sort/cli.py:47
|
||||
#: tools/sort/cli.py:48
|
||||
msgid ""
|
||||
"images by the average intensity of the converted grayscale color channel."
|
||||
msgstr "변환된 회색 계열 색상 채널의 평균 강도에 따른 이미지."
|
||||
|
||||
#: tools/sort/cli.py:48
|
||||
#: tools/sort/cli.py:49
|
||||
msgid ""
|
||||
"images by their number of black pixels. Useful when faces are near borders "
|
||||
"and a large part of the image is black."
|
||||
|
@ -130,7 +130,7 @@ msgstr ""
|
|||
"검은색 픽셀의 개수에 따른 이미지들. 얼굴이 테두리 근처에 있고 이미지의 대부분"
|
||||
"이 검은색일 때 유용합니다."
|
||||
|
||||
#: tools/sort/cli.py:50
|
||||
#: tools/sort/cli.py:51
|
||||
msgid ""
|
||||
"images by the average intensity of the converted Y color channel. Bright "
|
||||
"lighting and oversaturated images will be ranked first."
|
||||
|
@ -138,7 +138,7 @@ msgstr ""
|
|||
"변환된 Y 색상 채널의 평균 강도를 기준으로 한 이미지. 밝은 조명과 과포화 이미"
|
||||
"지가 1위를 차지할 것이다."
|
||||
|
||||
#: tools/sort/cli.py:52
|
||||
#: tools/sort/cli.py:53
|
||||
msgid ""
|
||||
"images by the average intensity of the converted Cg color channel. Green "
|
||||
"images will be ranked first and red images will be last."
|
||||
|
@ -146,7 +146,7 @@ msgstr ""
|
|||
"변환된 Cg 컬러 채널의 평균 강도를 기준으로 한 이미지. 녹색 이미지가 먼저 순위"
|
||||
"가 매겨지고 빨간색 이미지가 마지막 순위가 됩니다."
|
||||
|
||||
#: tools/sort/cli.py:54
|
||||
#: tools/sort/cli.py:55
|
||||
msgid ""
|
||||
"images by the average intensity of the converted Co color channel. Orange "
|
||||
"images will be ranked first and blue images will be last."
|
||||
|
@ -154,7 +154,7 @@ msgstr ""
|
|||
"변환된 Co 색상 채널의 평균 강도를 기준으로 한 이미지. 주황색 이미지가 먼저 순"
|
||||
"위가 매겨지고 파란색 이미지가 마지막 순위가 됩니다."
|
||||
|
||||
#: tools/sort/cli.py:56
|
||||
#: tools/sort/cli.py:57
|
||||
msgid ""
|
||||
"images by their size in the original frame. Faces further from the camera "
|
||||
"and from lower resolution sources will be sorted first, whilst faces closer "
|
||||
|
@ -164,24 +164,16 @@ msgstr ""
|
|||
"해상도 원본에서 온 얼굴이 먼저 정렬되고, 카메라에 더 가까이 있고 고해상도 원"
|
||||
"본에서 온 얼굴이 마지막으로 정렬됩니다."
|
||||
|
||||
#: tools/sort/cli.py:59
|
||||
msgid " option is deprecated. Use 'yaw'"
|
||||
msgstr " 이 옵션은 더 이상 사용되지 않습니다. 'yaw'를 사용하세요"
|
||||
|
||||
#: tools/sort/cli.py:60
|
||||
msgid " option is deprecated. Use 'color-black'"
|
||||
msgstr " 이 옵션은 더 이상 사용되지 않습니다. 'color-black'을 사용하세요"
|
||||
|
||||
#: tools/sort/cli.py:82
|
||||
#: tools/sort/cli.py:81
|
||||
msgid "Sort faces using a number of different techniques"
|
||||
msgstr "얼굴을 정렬하는데 사용되는 서로 다른 기술들의 개수"
|
||||
|
||||
#: tools/sort/cli.py:92 tools/sort/cli.py:99 tools/sort/cli.py:110
|
||||
#: tools/sort/cli.py:148
|
||||
#: tools/sort/cli.py:91 tools/sort/cli.py:98 tools/sort/cli.py:110
|
||||
#: tools/sort/cli.py:150
|
||||
msgid "data"
|
||||
msgstr "데이터"
|
||||
|
||||
#: tools/sort/cli.py:93
|
||||
#: tools/sort/cli.py:92
|
||||
msgid "Input directory of aligned faces."
|
||||
msgstr "정렬된 얼굴들의 입력 디렉토리."
|
||||
|
||||
|
@ -198,7 +190,7 @@ msgstr ""
|
|||
"다. 제공되지 않고 'keep'을 선택하지 않으면 이미지가 제자리에 정렬되어 "
|
||||
"'input_dir'의 원래 내용을 덮어씁니다."
|
||||
|
||||
#: tools/sort/cli.py:111
|
||||
#: tools/sort/cli.py:112
|
||||
msgid ""
|
||||
"R|If selected then the input_dir should be a parent folder containing "
|
||||
"multiple folders of faces you wish to sort. The faces will be output to "
|
||||
|
@ -207,11 +199,11 @@ msgstr ""
|
|||
"R|선택되면 input_dir는 정렬할 여러 개의 얼굴 폴더를 포함하는 상위 폴더여야 합"
|
||||
"니다. 얼굴은 output_dir의 별도 하위 폴더로 출력됩니다"
|
||||
|
||||
#: tools/sort/cli.py:120
|
||||
#: tools/sort/cli.py:121
|
||||
msgid "sort settings"
|
||||
msgstr "정렬 설정"
|
||||
|
||||
#: tools/sort/cli.py:122
|
||||
#: tools/sort/cli.py:124
|
||||
msgid ""
|
||||
"R|Choose how images are sorted. Selecting a sort method gives the images a "
|
||||
"new filename based on the order the image appears within the given method.\n"
|
||||
|
@ -227,17 +219,25 @@ msgstr ""
|
|||
"유지합니다. 'sort-by' 및 'group-by' 모두에 대해 'none'을 선택해도 아무 효과"
|
||||
"가 없습니다"
|
||||
|
||||
#: tools/sort/cli.py:135 tools/sort/cli.py:162 tools/sort/cli.py:191
|
||||
#: tools/sort/cli.py:136 tools/sort/cli.py:164 tools/sort/cli.py:184
|
||||
msgid "group settings"
|
||||
msgstr "그룹 설정"
|
||||
|
||||
#: tools/sort/cli.py:137
|
||||
#: tools/sort/cli.py:139
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "R|Selecting a group by method will move/copy files into numbered bins "
|
||||
#| "based on the selected method.\n"
|
||||
#| "L|'none': Don't bin the images. Folders will be sorted by the selected "
|
||||
#| "'sort-by' but will not be binned, instead they will be sorted into a "
|
||||
#| "single folder. Selecting 'none' for both 'sort-by' and 'group-by' will "
|
||||
#| "do nothing"
|
||||
msgid ""
|
||||
"R|Selecting a group by method will move/copy files into numbered bins based "
|
||||
"on the selected method.\n"
|
||||
"L|'none': Don't bin the images. Folders will be sorted by the selected 'sort-"
|
||||
"by' but will not be binned, instead they will be sorted into a single "
|
||||
"folder. Selecting 'none' for both 'sort-by' and 'group-by' will do nothing"
|
||||
"folder. Selecting 'none' for both 'sort-by' and 'group-by' will do nothing"
|
||||
msgstr ""
|
||||
"R|방법별로 그룹을 선택하면 선택한 방법에 따라 파일이 번호가 매겨진 빈으로 이"
|
||||
"동/복사됩니다.\n"
|
||||
|
@ -245,7 +245,7 @@ msgstr ""
|
|||
"만 버려지진 않고 단일 폴더로 정렬됩니다. 'sort-by' 및 'group-by' 모두에 대해 "
|
||||
"'none'을 선택해도 아무 효과가 없습니다"
|
||||
|
||||
#: tools/sort/cli.py:149
|
||||
#: tools/sort/cli.py:152
|
||||
msgid ""
|
||||
"Whether to keep the original files in their original location. Choosing a "
|
||||
"'sort-by' method means that the files have to be renamed. Selecting 'keep' "
|
||||
|
@ -259,7 +259,7 @@ msgstr ""
|
|||
"된 파일이 지정된 출력 폴더에 생성됩니다. keep을 선택취소하면 선택한 정렬/그"
|
||||
"룹 기준에 따라 원래 파일이 이동되고 이름이 변경됩니다."
|
||||
|
||||
#: tools/sort/cli.py:164
|
||||
#: tools/sort/cli.py:167
|
||||
msgid ""
|
||||
"R|Float value. Minimum threshold to use for grouping comparison with 'face-"
|
||||
"cnn' 'hist' and 'face' methods.\n"
|
||||
|
@ -284,20 +284,29 @@ msgstr ""
|
|||
"이미지가 많은 디렉터리에서 너무 극단적인 값을 설정하면 폴더가 많이 생성될 수 "
|
||||
"있으므로 주의하십시오. 기본값: face-cnn 7.2, hist 0.3, face 0.25"
|
||||
|
||||
#: tools/sort/cli.py:181
|
||||
msgid "output"
|
||||
msgstr "출력"
|
||||
|
||||
#: tools/sort/cli.py:182
|
||||
msgid ""
|
||||
"Deprecated and no longer used. The final processing will be dictated by the "
|
||||
"sort/group by methods and whether 'keep_original' is selected."
|
||||
msgstr ""
|
||||
"폐기되었고 더 이상 사용되지 않습니다. 최종 처리는 sort/group-by 메서드와 "
|
||||
"'keep_original'이 선택되었는지 여부에 의해 결정됩니다."
|
||||
|
||||
#: tools/sort/cli.py:193
|
||||
#, python-format
|
||||
#: tools/sort/cli.py:187
|
||||
#, fuzzy, python-format
|
||||
#| msgid ""
|
||||
#| "R|Integer value. Used to control the number of bins created for grouping "
|
||||
#| "by: any 'blur' methods, 'color' methods or 'face metric' methods "
|
||||
#| "('distance', 'size') and 'orientation; methods ('yaw', 'pitch'). For any "
|
||||
#| "other grouping methods see the '-t' ('--threshold') option.\n"
|
||||
#| "L|For 'face metric' methods the bins are filled, according the the "
|
||||
#| "distribution of faces between the minimum and maximum chosen metric.\n"
|
||||
#| "L|For 'color' methods the number of bins represents the divider of the "
|
||||
#| "percentage of colored pixels. Eg. For a bin number of '5': The first "
|
||||
#| "folder will have the faces with 0%% to 20%% colored pixels, second 21%% "
|
||||
#| "to 40%%, etc. Any empty bins will be deleted, so you may end up with "
|
||||
#| "fewer bins than selected.\n"
|
||||
#| "L|For 'blur' methods folder 0 will be the least blurry, while the last "
|
||||
#| "folder will be the blurriest.\n"
|
||||
#| "L|For 'orientation' methods the number of bins is dictated by how much "
|
||||
#| "180 degrees is divided. Eg. If 18 is selected, then each folder will be a "
|
||||
#| "10 degree increment. Folder 0 will contain faces looking the most to the "
|
||||
#| "left/down whereas the last folder will contain the faces looking the most "
|
||||
#| "to the right/up. NB: Some bins may be empty if faces do not fit the "
|
||||
#| "criteria.\n"
|
||||
#| "Default value: 5"
|
||||
msgid ""
|
||||
"R|Integer value. Used to control the number of bins created for grouping by: "
|
||||
"any 'blur' methods, 'color' methods or 'face metric' methods ('distance', "
|
||||
|
@ -316,7 +325,7 @@ msgid ""
|
|||
"degrees is divided. Eg. If 18 is selected, then each folder will be a 10 "
|
||||
"degree increment. Folder 0 will contain faces looking the most to the left/"
|
||||
"down whereas the last folder will contain the faces looking the most to the "
|
||||
"right/up. NB: Some bins may be empty if faces do not fit the criteria.\n"
|
||||
"right/up. NB: Some bins may be empty if faces do not fit the criteria. \n"
|
||||
"Default value: 5"
|
||||
msgstr ""
|
||||
"R| 정수 값. 그룹화를 위해 생성된 bins의 수를 제어하는 데 사용됩니다. 임의의 "
|
||||
|
@ -337,11 +346,11 @@ msgstr ""
|
|||
"니다. 주의: 얼굴이 기준에 맞지 않으면 일부 bins가 비어 있을 수 있습니다.\n"
|
||||
"기본값: 5"
|
||||
|
||||
#: tools/sort/cli.py:215 tools/sort/cli.py:225
|
||||
#: tools/sort/cli.py:207 tools/sort/cli.py:217
|
||||
msgid "settings"
|
||||
msgstr "설정"
|
||||
|
||||
#: tools/sort/cli.py:217
|
||||
#: tools/sort/cli.py:210
|
||||
msgid ""
|
||||
"Logs file renaming changes if grouping by renaming, or it logs the file "
|
||||
"copying/movement if grouping by folders. If no log file is specified with "
|
||||
|
@ -352,7 +361,7 @@ msgstr ""
|
|||
"로 그룹화하는 경우 파일 복사/이동을 기록합니다. '--log-file'로 로그 파일을 지"
|
||||
"정하지 않으면 'sort_log.json' 파일이 입력 디렉토리에 생성됩니다."
|
||||
|
||||
#: tools/sort/cli.py:228
|
||||
#: tools/sort/cli.py:221
|
||||
msgid ""
|
||||
"Specify a log file to use for saving the renaming or grouping information. "
|
||||
"If specified extension isn't 'json' or 'yaml', then json will be used as the "
|
||||
|
@ -361,3 +370,19 @@ msgstr ""
|
|||
"_renaming 또는 grouping 정보를 저장하는 데 사용할 로그 파일을 지정합니다. 지"
|
||||
"정된 확장자가 'json' 또는 'yaml'이 아니면 json이 제공된 파일 이름과 함께 직렬"
|
||||
"화기로 사용됩니다. 기본값: sort_log.json"
|
||||
|
||||
#~ msgid " option is deprecated. Use 'yaw'"
|
||||
#~ msgstr " 이 옵션은 더 이상 사용되지 않습니다. 'yaw'를 사용하세요"
|
||||
|
||||
#~ msgid " option is deprecated. Use 'color-black'"
|
||||
#~ msgstr " 이 옵션은 더 이상 사용되지 않습니다. 'color-black'을 사용하세요"
|
||||
|
||||
#~ msgid "output"
|
||||
#~ msgstr "출력"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Deprecated and no longer used. The final processing will be dictated by "
|
||||
#~ "the sort/group by methods and whether 'keep_original' is selected."
|
||||
#~ msgstr ""
|
||||
#~ "폐기되었고 더 이상 사용되지 않습니다. 최종 처리는 sort/group-by 메서드와 "
|
||||
#~ "'keep_original'이 선택되었는지 여부에 의해 결정됩니다."
|
||||
|
|
|
@ -8,7 +8,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-09-25 16:09+0100\n"
|
||||
"POT-Creation-Date: 2024-03-28 18:06+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
@ -17,12 +17,12 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: lib/cli/args.py:192 lib/cli/args.py:202 lib/cli/args.py:210
|
||||
#: lib/cli/args.py:220
|
||||
#: lib/cli/args.py:188 lib/cli/args.py:199 lib/cli/args.py:208
|
||||
#: lib/cli/args.py:219
|
||||
msgid "Global Options"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:193
|
||||
#: lib/cli/args.py:190
|
||||
msgid ""
|
||||
"R|Exclude GPUs from use by Faceswap. Select the number(s) which correspond "
|
||||
"to any GPU(s) that you do not wish to be made available to Faceswap. "
|
||||
|
@ -30,688 +30,21 @@ msgid ""
|
|||
"L|{}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:203
|
||||
#: lib/cli/args.py:201
|
||||
msgid ""
|
||||
"Optionally overide the saved config with the path to a custom config file."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:211
|
||||
#: lib/cli/args.py:210
|
||||
msgid ""
|
||||
"Log level. Stick with INFO or VERBOSE unless you need to file an error "
|
||||
"report. Be careful with TRACE as it will generate a lot of data"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:221
|
||||
#: lib/cli/args.py:220
|
||||
msgid "Path to store the logfile. Leave blank to store in the faceswap folder"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:319 lib/cli/args.py:328 lib/cli/args.py:336
|
||||
#: lib/cli/args.py:385 lib/cli/args.py:676 lib/cli/args.py:685
|
||||
msgid "Data"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:320
|
||||
msgid ""
|
||||
"Input directory or video. Either a directory containing the image files you "
|
||||
"wish to process or path to a video file. NB: This should be the source video/"
|
||||
"frames NOT the source faces."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:329
|
||||
msgid "Output directory. This is where the converted files will be saved."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:337
|
||||
msgid ""
|
||||
"Optional path to an alignments file. Leave blank if the alignments file is "
|
||||
"at the default location."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:360
|
||||
msgid ""
|
||||
"Extract faces from image or video sources.\n"
|
||||
"Extraction plugins can be configured in the 'Settings' Menu"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:386
|
||||
msgid ""
|
||||
"R|If selected then the input_dir should be a parent folder containing "
|
||||
"multiple videos and/or folders of images you wish to extract from. The faces "
|
||||
"will be output to separate sub-folders in the output_dir."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:395 lib/cli/args.py:411 lib/cli/args.py:423
|
||||
#: lib/cli/args.py:462 lib/cli/args.py:480 lib/cli/args.py:492
|
||||
#: lib/cli/args.py:501 lib/cli/args.py:510 lib/cli/args.py:695
|
||||
#: lib/cli/args.py:722 lib/cli/args.py:760
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:396
|
||||
msgid ""
|
||||
"R|Detector to use. Some of these have configurable settings in '/config/"
|
||||
"extract.ini' or 'Settings > Configure Extract 'Plugins':\n"
|
||||
"L|cv2-dnn: A CPU only extractor which is the least reliable and least "
|
||||
"resource intensive. Use this if not using a GPU and time is important.\n"
|
||||
"L|mtcnn: Good detector. Fast on CPU, faster on GPU. Uses fewer resources "
|
||||
"than other GPU detectors but can often return more false positives.\n"
|
||||
"L|s3fd: Best detector. Slow on CPU, faster on GPU. Can detect more faces and "
|
||||
"fewer false positives than other GPU detectors, but is a lot more resource "
|
||||
"intensive."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:412
|
||||
msgid ""
|
||||
"R|Aligner to use.\n"
|
||||
"L|cv2-dnn: A CPU only landmark detector. Faster, less resource intensive, "
|
||||
"but less accurate. Only use this if not using a GPU and time is important.\n"
|
||||
"L|fan: Best aligner. Fast on GPU, slow on CPU."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:424
|
||||
msgid ""
|
||||
"R|Additional Masker(s) to use. The masks generated here will all take up GPU "
|
||||
"RAM. You can select none, one or multiple masks, but the extraction may take "
|
||||
"longer the more you select. NB: The Extended and Components (landmark based) "
|
||||
"masks are automatically generated on extraction.\n"
|
||||
"L|bisenet-fp: Relatively lightweight NN based mask that provides more "
|
||||
"refined control over the area to be masked including full head masking "
|
||||
"(configurable in mask settings).\n"
|
||||
"L|custom: A dummy mask that fills the mask area with all 1s or 0s "
|
||||
"(configurable in settings). This is only required if you intend to manually "
|
||||
"edit the custom masks yourself in the manual tool. This mask does not use "
|
||||
"the GPU so will not use any additional VRAM.\n"
|
||||
"L|vgg-clear: Mask designed to provide smart segmentation of mostly frontal "
|
||||
"faces clear of obstructions. Profile faces and obstructions may result in "
|
||||
"sub-par performance.\n"
|
||||
"L|vgg-obstructed: Mask designed to provide smart segmentation of mostly "
|
||||
"frontal faces. The mask model has been specifically trained to recognize "
|
||||
"some facial obstructions (hands and eyeglasses). Profile faces may result in "
|
||||
"sub-par performance.\n"
|
||||
"L|unet-dfl: Mask designed to provide smart segmentation of mostly frontal "
|
||||
"faces. The mask model has been trained by community members and will need "
|
||||
"testing for further description. Profile faces may result in sub-par "
|
||||
"performance.\n"
|
||||
"The auto generated masks are as follows:\n"
|
||||
"L|components: Mask designed to provide facial segmentation based on the "
|
||||
"positioning of landmark locations. A convex hull is constructed around the "
|
||||
"exterior of the landmarks to create a mask.\n"
|
||||
"L|extended: Mask designed to provide facial segmentation based on the "
|
||||
"positioning of landmark locations. A convex hull is constructed around the "
|
||||
"exterior of the landmarks and the mask is extended upwards onto the "
|
||||
"forehead.\n"
|
||||
"(eg: `-M unet-dfl vgg-clear`, `--masker vgg-obstructed`)"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:463
|
||||
msgid ""
|
||||
"R|Performing normalization can help the aligner better align faces with "
|
||||
"difficult lighting conditions at an extraction speed cost. Different methods "
|
||||
"will yield different results on different sets. NB: This does not impact the "
|
||||
"output face, just the input to the aligner.\n"
|
||||
"L|none: Don't perform normalization on the face.\n"
|
||||
"L|clahe: Perform Contrast Limited Adaptive Histogram Equalization on the "
|
||||
"face.\n"
|
||||
"L|hist: Equalize the histograms on the RGB channels.\n"
|
||||
"L|mean: Normalize the face colors to the mean."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:481
|
||||
msgid ""
|
||||
"The number of times to re-feed the detected face into the aligner. Each time "
|
||||
"the face is re-fed into the aligner the bounding box is adjusted by a small "
|
||||
"amount. The final landmarks are then averaged from each iteration. Helps to "
|
||||
"remove 'micro-jitter' but at the cost of slower extraction speed. The more "
|
||||
"times the face is re-fed into the aligner, the less micro-jitter should "
|
||||
"occur but the longer extraction will take."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:493
|
||||
msgid ""
|
||||
"Re-feed the initially found aligned face through the aligner. Can help "
|
||||
"produce better alignments for faces that are rotated beyond 45 degrees in "
|
||||
"the frame or are at extreme angles. Slows down extraction."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:502
|
||||
msgid ""
|
||||
"If a face isn't found, rotate the images to try to find a face. Can find "
|
||||
"more faces at the cost of extraction speed. Pass in a single number to use "
|
||||
"increments of that size up to 360, or pass in a list of numbers to enumerate "
|
||||
"exactly what angles to check."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:511
|
||||
msgid ""
|
||||
"Obtain and store face identity encodings from VGGFace2. Slows down extract a "
|
||||
"little, but will save time if using 'sort by face'"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:521 lib/cli/args.py:531 lib/cli/args.py:543
|
||||
#: lib/cli/args.py:556 lib/cli/args.py:804 lib/cli/args.py:812
|
||||
#: lib/cli/args.py:826 lib/cli/args.py:839 lib/cli/args.py:853
|
||||
msgid "Face Processing"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:522
|
||||
msgid ""
|
||||
"Filters out faces detected below this size. Length, in pixels across the "
|
||||
"diagonal of the bounding box. Set to 0 for off"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:532
|
||||
msgid ""
|
||||
"Optionally filter out people who you do not wish to extract by passing in "
|
||||
"images of those people. Should be a small variety of images at different "
|
||||
"angles and in different conditions. A folder containing the required images "
|
||||
"or multiple image files, space separated, can be selected."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:544
|
||||
msgid ""
|
||||
"Optionally select people you wish to extract by passing in images of that "
|
||||
"person. Should be a small variety of images at different angles and in "
|
||||
"different conditions A folder containing the required images or multiple "
|
||||
"image files, space separated, can be selected."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:557
|
||||
msgid ""
|
||||
"For use with the optional nfilter/filter files. Threshold for positive face "
|
||||
"recognition. Higher values are stricter."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:566 lib/cli/args.py:578 lib/cli/args.py:590
|
||||
#: lib/cli/args.py:602
|
||||
msgid "output"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:567
|
||||
msgid ""
|
||||
"The output size of extracted faces. Make sure that the model you intend to "
|
||||
"train supports your required size. This will only need to be changed for hi-"
|
||||
"res models."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:579
|
||||
msgid ""
|
||||
"Extract every 'nth' frame. This option will skip frames when extracting "
|
||||
"faces. For example a value of 1 will extract faces from every frame, a value "
|
||||
"of 10 will extract faces from every 10th frame."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:591
|
||||
msgid ""
|
||||
"Automatically save the alignments file after a set amount of frames. By "
|
||||
"default the alignments file is only saved at the end of the extraction "
|
||||
"process. NB: If extracting in 2 passes then the alignments file will only "
|
||||
"start to be saved out during the second pass. WARNING: Don't interrupt the "
|
||||
"script when writing the file because it might get corrupted. Set to 0 to "
|
||||
"turn off"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:603
|
||||
msgid "Draw landmarks on the ouput faces for debugging purposes."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:609 lib/cli/args.py:618 lib/cli/args.py:626
|
||||
#: lib/cli/args.py:633 lib/cli/args.py:866 lib/cli/args.py:877
|
||||
#: lib/cli/args.py:885 lib/cli/args.py:904 lib/cli/args.py:910
|
||||
msgid "settings"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:610
|
||||
msgid ""
|
||||
"Don't run extraction in parallel. Will run each part of the extraction "
|
||||
"process separately (one after the other) rather than all at the same time. "
|
||||
"Useful if VRAM is at a premium."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:619
|
||||
msgid ""
|
||||
"Skips frames that have already been extracted and exist in the alignments "
|
||||
"file"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:627
|
||||
msgid "Skip frames that already have detected faces in the alignments file"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:634
|
||||
msgid "Skip saving the detected faces to disk. Just create an alignments file"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:656
|
||||
msgid ""
|
||||
"Swap the original faces in a source video/images to your final faces.\n"
|
||||
"Conversion plugins can be configured in the 'Settings' Menu"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:677
|
||||
msgid ""
|
||||
"Only required if converting from images to video. Provide The original video "
|
||||
"that the source frames were extracted from (for extracting the fps and "
|
||||
"audio)."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:686
|
||||
msgid ""
|
||||
"Model directory. The directory containing the trained model you wish to use "
|
||||
"for conversion."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:696
|
||||
msgid ""
|
||||
"R|Performs color adjustment to the swapped face. Some of these options have "
|
||||
"configurable settings in '/config/convert.ini' or 'Settings > Configure "
|
||||
"Convert Plugins':\n"
|
||||
"L|avg-color: Adjust the mean of each color channel in the swapped "
|
||||
"reconstruction to equal the mean of the masked area in the original image.\n"
|
||||
"L|color-transfer: Transfers the color distribution from the source to the "
|
||||
"target image using the mean and standard deviations of the L*a*b* color "
|
||||
"space.\n"
|
||||
"L|manual-balance: Manually adjust the balance of the image in a variety of "
|
||||
"color spaces. Best used with the Preview tool to set correct values.\n"
|
||||
"L|match-hist: Adjust the histogram of each color channel in the swapped "
|
||||
"reconstruction to equal the histogram of the masked area in the original "
|
||||
"image.\n"
|
||||
"L|seamless-clone: Use cv2's seamless clone function to remove extreme "
|
||||
"gradients at the mask seam by smoothing colors. Generally does not give very "
|
||||
"satisfactory results.\n"
|
||||
"L|none: Don't perform color adjustment."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:723
|
||||
msgid ""
|
||||
"R|Masker to use. NB: The mask you require must exist within the alignments "
|
||||
"file. You can add additional masks with the Mask Tool.\n"
|
||||
"L|none: Don't use a mask.\n"
|
||||
"L|bisenet-fp_face: Relatively lightweight NN based mask that provides more "
|
||||
"refined control over the area to be masked (configurable in mask settings). "
|
||||
"Use this version of bisenet-fp if your model is trained with 'face' or "
|
||||
"'legacy' centering.\n"
|
||||
"L|bisenet-fp_head: Relatively lightweight NN based mask that provides more "
|
||||
"refined control over the area to be masked (configurable in mask settings). "
|
||||
"Use this version of bisenet-fp if your model is trained with 'head' "
|
||||
"centering.\n"
|
||||
"L|custom_face: Custom user created, face centered mask.\n"
|
||||
"L|custom_head: Custom user created, head centered mask.\n"
|
||||
"L|components: Mask designed to provide facial segmentation based on the "
|
||||
"positioning of landmark locations. A convex hull is constructed around the "
|
||||
"exterior of the landmarks to create a mask.\n"
|
||||
"L|extended: Mask designed to provide facial segmentation based on the "
|
||||
"positioning of landmark locations. A convex hull is constructed around the "
|
||||
"exterior of the landmarks and the mask is extended upwards onto the "
|
||||
"forehead.\n"
|
||||
"L|vgg-clear: Mask designed to provide smart segmentation of mostly frontal "
|
||||
"faces clear of obstructions. Profile faces and obstructions may result in "
|
||||
"sub-par performance.\n"
|
||||
"L|vgg-obstructed: Mask designed to provide smart segmentation of mostly "
|
||||
"frontal faces. The mask model has been specifically trained to recognize "
|
||||
"some facial obstructions (hands and eyeglasses). Profile faces may result in "
|
||||
"sub-par performance.\n"
|
||||
"L|unet-dfl: Mask designed to provide smart segmentation of mostly frontal "
|
||||
"faces. The mask model has been trained by community members and will need "
|
||||
"testing for further description. Profile faces may result in sub-par "
|
||||
"performance.\n"
|
||||
"L|predicted: If the 'Learn Mask' option was enabled during training, this "
|
||||
"will use the mask that was created by the trained model."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:761
|
||||
msgid ""
|
||||
"R|The plugin to use to output the converted images. The writers are "
|
||||
"configurable in '/config/convert.ini' or 'Settings > Configure Convert "
|
||||
"Plugins:'\n"
|
||||
"L|ffmpeg: [video] Writes out the convert straight to video. When the input "
|
||||
"is a series of images then the '-ref' (--reference-video) parameter must be "
|
||||
"set.\n"
|
||||
"L|gif: [animated image] Create an animated gif.\n"
|
||||
"L|opencv: [images] The fastest image writer, but less options and formats "
|
||||
"than other plugins.\n"
|
||||
"L|patch: [images] Outputs the raw swapped face patch, along with the "
|
||||
"transformation matrix required to re-insert the face back into the original "
|
||||
"frame. Use this option if you wish to post-process and composite the final "
|
||||
"face within external tools.\n"
|
||||
"L|pillow: [images] Slower than opencv, but has more options and supports "
|
||||
"more formats."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:784 lib/cli/args.py:791 lib/cli/args.py:896
|
||||
msgid "Frame Processing"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:785
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Scale the final output frames by this amount. 100%% will output the frames "
|
||||
"at source dimensions. 50%% at half size 200%% at double size"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:792
|
||||
msgid ""
|
||||
"Frame ranges to apply transfer to e.g. For frames 10 to 50 and 90 to 100 use "
|
||||
"--frame-ranges 10-50 90-100. Frames falling outside of the selected range "
|
||||
"will be discarded unless '-k' (--keep-unchanged) is selected. NB: If you are "
|
||||
"converting from images, then the filenames must end with the frame-number!"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:805
|
||||
msgid ""
|
||||
"Scale the swapped face by this percentage. Positive values will enlarge the "
|
||||
"face, Negative values will shrink the face."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:813
|
||||
msgid ""
|
||||
"If you have not cleansed your alignments file, then you can filter out faces "
|
||||
"by defining a folder here that contains the faces extracted from your input "
|
||||
"files/video. If this folder is defined, then only faces that exist within "
|
||||
"your alignments file and also exist within the specified folder will be "
|
||||
"converted. Leaving this blank will convert all faces that exist within the "
|
||||
"alignments file."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:827
|
||||
msgid ""
|
||||
"Optionally filter out people who you do not wish to process by passing in an "
|
||||
"image of that person. Should be a front portrait with a single person in the "
|
||||
"image. Multiple images can be added space separated. NB: Using face filter "
|
||||
"will significantly decrease extraction speed and its accuracy cannot be "
|
||||
"guaranteed."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:840
|
||||
msgid ""
|
||||
"Optionally select people you wish to process by passing in an image of that "
|
||||
"person. Should be a front portrait with a single person in the image. "
|
||||
"Multiple images can be added space separated. NB: Using face filter will "
|
||||
"significantly decrease extraction speed and its accuracy cannot be "
|
||||
"guaranteed."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:854
|
||||
msgid ""
|
||||
"For use with the optional nfilter/filter files. Threshold for positive face "
|
||||
"recognition. Lower values are stricter. NB: Using face filter will "
|
||||
"significantly decrease extraction speed and its accuracy cannot be "
|
||||
"guaranteed."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:867
|
||||
msgid ""
|
||||
"The maximum number of parallel processes for performing conversion. "
|
||||
"Converting images is system RAM heavy so it is possible to run out of memory "
|
||||
"if you have a lot of processes and not enough RAM to accommodate them all. "
|
||||
"Setting this to 0 will use the maximum available. No matter what you set "
|
||||
"this to, it will never attempt to use more processes than are available on "
|
||||
"your system. If singleprocess is enabled this setting will be ignored."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:878
|
||||
msgid ""
|
||||
"[LEGACY] This only needs to be selected if a legacy model is being loaded or "
|
||||
"if there are multiple models in the model folder"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:886
|
||||
msgid ""
|
||||
"Enable On-The-Fly Conversion. NOT recommended. You should generate a clean "
|
||||
"alignments file for your destination video. However, if you wish you can "
|
||||
"generate the alignments on-the-fly by enabling this option. This will use an "
|
||||
"inferior extraction pipeline and will lead to substandard results. If an "
|
||||
"alignments file is found, this option will be ignored."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:897
|
||||
msgid ""
|
||||
"When used with --frame-ranges outputs the unchanged frames that are not "
|
||||
"processed instead of discarding them."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:905
|
||||
msgid "Swap the model. Instead converting from of A -> B, converts B -> A"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:911
|
||||
msgid "Disable multiprocessing. Slower but less resource intensive."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:927
|
||||
msgid ""
|
||||
"Train a model on extracted original (A) and swap (B) faces.\n"
|
||||
"Training models can take a long time. Anything from 24hrs to over a week\n"
|
||||
"Model plugins can be configured in the 'Settings' Menu"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:946 lib/cli/args.py:955
|
||||
msgid "faces"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:947
|
||||
msgid ""
|
||||
"Input directory. A directory containing training images for face A. This is "
|
||||
"the original face, i.e. the face that you want to remove and replace with "
|
||||
"face B."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:956
|
||||
msgid ""
|
||||
"Input directory. A directory containing training images for face B. This is "
|
||||
"the swap face, i.e. the face that you want to place onto the head of person "
|
||||
"A."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:964 lib/cli/args.py:976 lib/cli/args.py:992
|
||||
#: lib/cli/args.py:1017 lib/cli/args.py:1027
|
||||
msgid "model"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:965
|
||||
msgid ""
|
||||
"Model directory. This is where the training data will be stored. You should "
|
||||
"always specify a new folder for new models. If starting a new model, select "
|
||||
"either an empty folder, or a folder which does not exist (which will be "
|
||||
"created). If continuing to train an existing model, specify the location of "
|
||||
"the existing model."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:977
|
||||
msgid ""
|
||||
"R|Load the weights from a pre-existing model into a newly created model. For "
|
||||
"most models this will load weights from the Encoder of the given model into "
|
||||
"the encoder of the newly created model. Some plugins may have specific "
|
||||
"configuration options allowing you to load weights from other layers. "
|
||||
"Weights will only be loaded when creating a new model. This option will be "
|
||||
"ignored if you are resuming an existing model. Generally you will also want "
|
||||
"to 'freeze-weights' whilst the rest of your model catches up with your "
|
||||
"Encoder.\n"
|
||||
"NB: Weights can only be loaded from models of the same plugin as you intend "
|
||||
"to train."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:993
|
||||
msgid ""
|
||||
"R|Select which trainer to use. Trainers can be configured from the Settings "
|
||||
"menu or the config folder.\n"
|
||||
"L|original: The original model created by /u/deepfakes.\n"
|
||||
"L|dfaker: 64px in/128px out model from dfaker. Enable 'warp-to-landmarks' "
|
||||
"for full dfaker method.\n"
|
||||
"L|dfl-h128: 128px in/out model from deepfacelab\n"
|
||||
"L|dfl-sae: Adaptable model from deepfacelab\n"
|
||||
"L|dlight: A lightweight, high resolution DFaker variant.\n"
|
||||
"L|iae: A model that uses intermediate layers to try to get better details\n"
|
||||
"L|lightweight: A lightweight model for low-end cards. Don't expect great "
|
||||
"results. Can train as low as 1.6GB with batch size 8.\n"
|
||||
"L|realface: A high detail, dual density model based on DFaker, with "
|
||||
"customizable in/out resolution. The autoencoders are unbalanced so B>A swaps "
|
||||
"won't work so well. By andenixa et al. Very configurable.\n"
|
||||
"L|unbalanced: 128px in/out model from andenixa. The autoencoders are "
|
||||
"unbalanced so B>A swaps won't work so well. Very configurable.\n"
|
||||
"L|villain: 128px in/out model from villainguy. Very resource hungry (You "
|
||||
"will require a GPU with a fair amount of VRAM). Good for details, but more "
|
||||
"susceptible to color differences."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:1018
|
||||
msgid ""
|
||||
"Output a summary of the model and exit. If a model folder is provided then a "
|
||||
"summary of the saved model is displayed. Otherwise a summary of the model "
|
||||
"that would be created by the chosen plugin and configuration settings is "
|
||||
"displayed."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:1028
|
||||
msgid ""
|
||||
"Freeze the weights of the model. Freezing weights means that some of the "
|
||||
"parameters in the model will no longer continue to learn, but those that are "
|
||||
"not frozen will continue to learn. For most models, this will freeze the "
|
||||
"encoder, but some models may have configuration options for freezing other "
|
||||
"layers."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:1041 lib/cli/args.py:1053 lib/cli/args.py:1067
|
||||
#: lib/cli/args.py:1082 lib/cli/args.py:1090
|
||||
msgid "training"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:1042
|
||||
msgid ""
|
||||
"Batch size. This is the number of images processed through the model for "
|
||||
"each side per iteration. NB: As the model is fed 2 sides at a time, the "
|
||||
"actual number of images within the model at any one time is double the "
|
||||
"number that you set here. Larger batches require more GPU RAM."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:1054
|
||||
msgid ""
|
||||
"Length of training in iterations. This is only really used for automation. "
|
||||
"There is no 'correct' number of iterations a model should be trained for. "
|
||||
"You should stop training when you are happy with the previews. However, if "
|
||||
"you want the model to stop automatically at a set number of iterations, you "
|
||||
"can set that value here."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:1068
|
||||
msgid ""
|
||||
"R|Select the distribution stategy to use.\n"
|
||||
"L|default: Use Tensorflow's default distribution strategy.\n"
|
||||
"L|central-storage: Centralizes variables on the CPU whilst operations are "
|
||||
"performed on 1 or more local GPUs. This can help save some VRAM at the cost "
|
||||
"of some speed by not storing variables on the GPU. Note: Mixed-Precision is "
|
||||
"not supported on multi-GPU setups.\n"
|
||||
"L|mirrored: Supports synchronous distributed training across multiple local "
|
||||
"GPUs. A copy of the model and all variables are loaded onto each GPU with "
|
||||
"batches distributed to each GPU at each iteration."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:1083
|
||||
msgid ""
|
||||
"Disables TensorBoard logging. NB: Disabling logs means that you will not be "
|
||||
"able to use the graph or analysis for this session in the GUI."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:1091
|
||||
msgid ""
|
||||
"Use the Learning Rate Finder to discover the optimal learning rate for "
|
||||
"training. For new models, this will calculate the optimal learning rate for "
|
||||
"the model. For existing models this will use the optimal learning rate that "
|
||||
"was discovered when initializing the model. Setting this option will ignore "
|
||||
"the manually configured learning rate (configurable in train settings)."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:1104 lib/cli/args.py:1114
|
||||
msgid "Saving"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:1105
|
||||
msgid "Sets the number of iterations between each model save."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:1115
|
||||
msgid ""
|
||||
"Sets the number of iterations before saving a backup snapshot of the model "
|
||||
"in it's current state. Set to 0 for off."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:1122 lib/cli/args.py:1133 lib/cli/args.py:1144
|
||||
msgid "timelapse"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:1123
|
||||
msgid ""
|
||||
"Optional for creating a timelapse. Timelapse will save an image of your "
|
||||
"selected faces into the timelapse-output folder at every save iteration. "
|
||||
"This should be the input folder of 'A' faces that you would like to use for "
|
||||
"creating the timelapse. You must also supply a --timelapse-output and a --"
|
||||
"timelapse-input-B parameter."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:1134
|
||||
msgid ""
|
||||
"Optional for creating a timelapse. Timelapse will save an image of your "
|
||||
"selected faces into the timelapse-output folder at every save iteration. "
|
||||
"This should be the input folder of 'B' faces that you would like to use for "
|
||||
"creating the timelapse. You must also supply a --timelapse-output and a --"
|
||||
"timelapse-input-A parameter."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:1145
|
||||
msgid ""
|
||||
"Optional for creating a timelapse. Timelapse will save an image of your "
|
||||
"selected faces into the timelapse-output folder at every save iteration. If "
|
||||
"the input folders are supplied but no output folder, it will default to your "
|
||||
"model folder /timelapse/"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:1154 lib/cli/args.py:1161
|
||||
msgid "preview"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:1155
|
||||
msgid "Show training preview output. in a separate window."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:1162
|
||||
msgid ""
|
||||
"Writes the training result to a file. The image will be stored in the root "
|
||||
"of your FaceSwap folder."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:1169 lib/cli/args.py:1178 lib/cli/args.py:1187
|
||||
#: lib/cli/args.py:1196
|
||||
msgid "augmentation"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:1170
|
||||
msgid ""
|
||||
"Warps training faces to closely matched Landmarks from the opposite face-set "
|
||||
"rather than randomly warping the face. This is the 'dfaker' way of doing "
|
||||
"warping."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:1179
|
||||
msgid ""
|
||||
"To effectively learn, a random set of images are flipped horizontally. "
|
||||
"Sometimes it is desirable for this not to occur. Generally this should be "
|
||||
"left off except for during 'fit training'."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:1188
|
||||
msgid ""
|
||||
"Color augmentation helps make the model less susceptible to color "
|
||||
"differences between the A and B sets, at an increased training time cost. "
|
||||
"Enable this option to disable color augmentation."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:1197
|
||||
msgid ""
|
||||
"Warping is integral to training the Neural Network. This option should only "
|
||||
"be enabled towards the very end of training to try to bring out more detail. "
|
||||
"Think of it as 'fine-tuning'. Enabling this option from the beginning is "
|
||||
"likely to kill a model and lead to terrible results."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args.py:1222
|
||||
#: lib/cli/args.py:319
|
||||
msgid "Output to Shell console instead of GUI console"
|
||||
msgstr ""
|
||||
|
|
458
locales/lib.cli.args_extract_convert.pot
Normal file
458
locales/lib.cli.args_extract_convert.pot
Normal file
|
@ -0,0 +1,458 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-03-28 18:11+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:46 lib/cli/args_extract_convert.py:56
|
||||
#: lib/cli/args_extract_convert.py:64 lib/cli/args_extract_convert.py:122
|
||||
#: lib/cli/args_extract_convert.py:479 lib/cli/args_extract_convert.py:488
|
||||
msgid "Data"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:48
|
||||
msgid ""
|
||||
"Input directory or video. Either a directory containing the image files you "
|
||||
"wish to process or path to a video file. NB: This should be the source video/"
|
||||
"frames NOT the source faces."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:57
|
||||
msgid "Output directory. This is where the converted files will be saved."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:66
|
||||
msgid ""
|
||||
"Optional path to an alignments file. Leave blank if the alignments file is "
|
||||
"at the default location."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:97
|
||||
msgid ""
|
||||
"Extract faces from image or video sources.\n"
|
||||
"Extraction plugins can be configured in the 'Settings' Menu"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:124
|
||||
msgid ""
|
||||
"R|If selected then the input_dir should be a parent folder containing "
|
||||
"multiple videos and/or folders of images you wish to extract from. The faces "
|
||||
"will be output to separate sub-folders in the output_dir."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:133 lib/cli/args_extract_convert.py:150
|
||||
#: lib/cli/args_extract_convert.py:163 lib/cli/args_extract_convert.py:202
|
||||
#: lib/cli/args_extract_convert.py:220 lib/cli/args_extract_convert.py:233
|
||||
#: lib/cli/args_extract_convert.py:243 lib/cli/args_extract_convert.py:253
|
||||
#: lib/cli/args_extract_convert.py:499 lib/cli/args_extract_convert.py:525
|
||||
#: lib/cli/args_extract_convert.py:564
|
||||
msgid "Plugins"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:135
|
||||
msgid ""
|
||||
"R|Detector to use. Some of these have configurable settings in '/config/"
|
||||
"extract.ini' or 'Settings > Configure Extract 'Plugins':\n"
|
||||
"L|cv2-dnn: A CPU only extractor which is the least reliable and least "
|
||||
"resource intensive. Use this if not using a GPU and time is important.\n"
|
||||
"L|mtcnn: Good detector. Fast on CPU, faster on GPU. Uses fewer resources "
|
||||
"than other GPU detectors but can often return more false positives.\n"
|
||||
"L|s3fd: Best detector. Slow on CPU, faster on GPU. Can detect more faces and "
|
||||
"fewer false positives than other GPU detectors, but is a lot more resource "
|
||||
"intensive."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:152
|
||||
msgid ""
|
||||
"R|Aligner to use.\n"
|
||||
"L|cv2-dnn: A CPU only landmark detector. Faster, less resource intensive, "
|
||||
"but less accurate. Only use this if not using a GPU and time is important.\n"
|
||||
"L|fan: Best aligner. Fast on GPU, slow on CPU."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:165
|
||||
msgid ""
|
||||
"R|Additional Masker(s) to use. The masks generated here will all take up GPU "
|
||||
"RAM. You can select none, one or multiple masks, but the extraction may take "
|
||||
"longer the more you select. NB: The Extended and Components (landmark based) "
|
||||
"masks are automatically generated on extraction.\n"
|
||||
"L|bisenet-fp: Relatively lightweight NN based mask that provides more "
|
||||
"refined control over the area to be masked including full head masking "
|
||||
"(configurable in mask settings).\n"
|
||||
"L|custom: A dummy mask that fills the mask area with all 1s or 0s "
|
||||
"(configurable in settings). This is only required if you intend to manually "
|
||||
"edit the custom masks yourself in the manual tool. This mask does not use "
|
||||
"the GPU so will not use any additional VRAM.\n"
|
||||
"L|vgg-clear: Mask designed to provide smart segmentation of mostly frontal "
|
||||
"faces clear of obstructions. Profile faces and obstructions may result in "
|
||||
"sub-par performance.\n"
|
||||
"L|vgg-obstructed: Mask designed to provide smart segmentation of mostly "
|
||||
"frontal faces. The mask model has been specifically trained to recognize "
|
||||
"some facial obstructions (hands and eyeglasses). Profile faces may result in "
|
||||
"sub-par performance.\n"
|
||||
"L|unet-dfl: Mask designed to provide smart segmentation of mostly frontal "
|
||||
"faces. The mask model has been trained by community members and will need "
|
||||
"testing for further description. Profile faces may result in sub-par "
|
||||
"performance.\n"
|
||||
"The auto generated masks are as follows:\n"
|
||||
"L|components: Mask designed to provide facial segmentation based on the "
|
||||
"positioning of landmark locations. A convex hull is constructed around the "
|
||||
"exterior of the landmarks to create a mask.\n"
|
||||
"L|extended: Mask designed to provide facial segmentation based on the "
|
||||
"positioning of landmark locations. A convex hull is constructed around the "
|
||||
"exterior of the landmarks and the mask is extended upwards onto the "
|
||||
"forehead.\n"
|
||||
"(eg: `-M unet-dfl vgg-clear`, `--masker vgg-obstructed`)"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:204
|
||||
msgid ""
|
||||
"R|Performing normalization can help the aligner better align faces with "
|
||||
"difficult lighting conditions at an extraction speed cost. Different methods "
|
||||
"will yield different results on different sets. NB: This does not impact the "
|
||||
"output face, just the input to the aligner.\n"
|
||||
"L|none: Don't perform normalization on the face.\n"
|
||||
"L|clahe: Perform Contrast Limited Adaptive Histogram Equalization on the "
|
||||
"face.\n"
|
||||
"L|hist: Equalize the histograms on the RGB channels.\n"
|
||||
"L|mean: Normalize the face colors to the mean."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:222
|
||||
msgid ""
|
||||
"The number of times to re-feed the detected face into the aligner. Each time "
|
||||
"the face is re-fed into the aligner the bounding box is adjusted by a small "
|
||||
"amount. The final landmarks are then averaged from each iteration. Helps to "
|
||||
"remove 'micro-jitter' but at the cost of slower extraction speed. The more "
|
||||
"times the face is re-fed into the aligner, the less micro-jitter should "
|
||||
"occur but the longer extraction will take."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:235
|
||||
msgid ""
|
||||
"Re-feed the initially found aligned face through the aligner. Can help "
|
||||
"produce better alignments for faces that are rotated beyond 45 degrees in "
|
||||
"the frame or are at extreme angles. Slows down extraction."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:245
|
||||
msgid ""
|
||||
"If a face isn't found, rotate the images to try to find a face. Can find "
|
||||
"more faces at the cost of extraction speed. Pass in a single number to use "
|
||||
"increments of that size up to 360, or pass in a list of numbers to enumerate "
|
||||
"exactly what angles to check."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:255
|
||||
msgid ""
|
||||
"Obtain and store face identity encodings from VGGFace2. Slows down extract a "
|
||||
"little, but will save time if using 'sort by face'"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:265 lib/cli/args_extract_convert.py:276
|
||||
#: lib/cli/args_extract_convert.py:289 lib/cli/args_extract_convert.py:303
|
||||
#: lib/cli/args_extract_convert.py:610 lib/cli/args_extract_convert.py:619
|
||||
#: lib/cli/args_extract_convert.py:634 lib/cli/args_extract_convert.py:647
|
||||
#: lib/cli/args_extract_convert.py:661
|
||||
msgid "Face Processing"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:267
|
||||
msgid ""
|
||||
"Filters out faces detected below this size. Length, in pixels across the "
|
||||
"diagonal of the bounding box. Set to 0 for off"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:278
|
||||
msgid ""
|
||||
"Optionally filter out people who you do not wish to extract by passing in "
|
||||
"images of those people. Should be a small variety of images at different "
|
||||
"angles and in different conditions. A folder containing the required images "
|
||||
"or multiple image files, space separated, can be selected."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:291
|
||||
msgid ""
|
||||
"Optionally select people you wish to extract by passing in images of that "
|
||||
"person. Should be a small variety of images at different angles and in "
|
||||
"different conditions A folder containing the required images or multiple "
|
||||
"image files, space separated, can be selected."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:305
|
||||
msgid ""
|
||||
"For use with the optional nfilter/filter files. Threshold for positive face "
|
||||
"recognition. Higher values are stricter."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:314 lib/cli/args_extract_convert.py:327
|
||||
#: lib/cli/args_extract_convert.py:340 lib/cli/args_extract_convert.py:352
|
||||
msgid "output"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:316
|
||||
msgid ""
|
||||
"The output size of extracted faces. Make sure that the model you intend to "
|
||||
"train supports your required size. This will only need to be changed for hi-"
|
||||
"res models."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:329
|
||||
msgid ""
|
||||
"Extract every 'nth' frame. This option will skip frames when extracting "
|
||||
"faces. For example a value of 1 will extract faces from every frame, a value "
|
||||
"of 10 will extract faces from every 10th frame."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:342
|
||||
msgid ""
|
||||
"Automatically save the alignments file after a set amount of frames. By "
|
||||
"default the alignments file is only saved at the end of the extraction "
|
||||
"process. NB: If extracting in 2 passes then the alignments file will only "
|
||||
"start to be saved out during the second pass. WARNING: Don't interrupt the "
|
||||
"script when writing the file because it might get corrupted. Set to 0 to "
|
||||
"turn off"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:353
|
||||
msgid "Draw landmarks on the ouput faces for debugging purposes."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:359 lib/cli/args_extract_convert.py:369
|
||||
#: lib/cli/args_extract_convert.py:377 lib/cli/args_extract_convert.py:384
|
||||
#: lib/cli/args_extract_convert.py:674 lib/cli/args_extract_convert.py:686
|
||||
#: lib/cli/args_extract_convert.py:695 lib/cli/args_extract_convert.py:716
|
||||
#: lib/cli/args_extract_convert.py:722
|
||||
msgid "settings"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:361
|
||||
msgid ""
|
||||
"Don't run extraction in parallel. Will run each part of the extraction "
|
||||
"process separately (one after the other) rather than all at the same time. "
|
||||
"Useful if VRAM is at a premium."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:371
|
||||
msgid ""
|
||||
"Skips frames that have already been extracted and exist in the alignments "
|
||||
"file"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:378
|
||||
msgid "Skip frames that already have detected faces in the alignments file"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:385
|
||||
msgid "Skip saving the detected faces to disk. Just create an alignments file"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:459
|
||||
msgid ""
|
||||
"Swap the original faces in a source video/images to your final faces.\n"
|
||||
"Conversion plugins can be configured in the 'Settings' Menu"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:481
|
||||
msgid ""
|
||||
"Only required if converting from images to video. Provide The original video "
|
||||
"that the source frames were extracted from (for extracting the fps and "
|
||||
"audio)."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:490
|
||||
msgid ""
|
||||
"Model directory. The directory containing the trained model you wish to use "
|
||||
"for conversion."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:501
|
||||
msgid ""
|
||||
"R|Performs color adjustment to the swapped face. Some of these options have "
|
||||
"configurable settings in '/config/convert.ini' or 'Settings > Configure "
|
||||
"Convert Plugins':\n"
|
||||
"L|avg-color: Adjust the mean of each color channel in the swapped "
|
||||
"reconstruction to equal the mean of the masked area in the original image.\n"
|
||||
"L|color-transfer: Transfers the color distribution from the source to the "
|
||||
"target image using the mean and standard deviations of the L*a*b* color "
|
||||
"space.\n"
|
||||
"L|manual-balance: Manually adjust the balance of the image in a variety of "
|
||||
"color spaces. Best used with the Preview tool to set correct values.\n"
|
||||
"L|match-hist: Adjust the histogram of each color channel in the swapped "
|
||||
"reconstruction to equal the histogram of the masked area in the original "
|
||||
"image.\n"
|
||||
"L|seamless-clone: Use cv2's seamless clone function to remove extreme "
|
||||
"gradients at the mask seam by smoothing colors. Generally does not give very "
|
||||
"satisfactory results.\n"
|
||||
"L|none: Don't perform color adjustment."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:527
|
||||
msgid ""
|
||||
"R|Masker to use. NB: The mask you require must exist within the alignments "
|
||||
"file. You can add additional masks with the Mask Tool.\n"
|
||||
"L|none: Don't use a mask.\n"
|
||||
"L|bisenet-fp_face: Relatively lightweight NN based mask that provides more "
|
||||
"refined control over the area to be masked (configurable in mask settings). "
|
||||
"Use this version of bisenet-fp if your model is trained with 'face' or "
|
||||
"'legacy' centering.\n"
|
||||
"L|bisenet-fp_head: Relatively lightweight NN based mask that provides more "
|
||||
"refined control over the area to be masked (configurable in mask settings). "
|
||||
"Use this version of bisenet-fp if your model is trained with 'head' "
|
||||
"centering.\n"
|
||||
"L|custom_face: Custom user created, face centered mask.\n"
|
||||
"L|custom_head: Custom user created, head centered mask.\n"
|
||||
"L|components: Mask designed to provide facial segmentation based on the "
|
||||
"positioning of landmark locations. A convex hull is constructed around the "
|
||||
"exterior of the landmarks to create a mask.\n"
|
||||
"L|extended: Mask designed to provide facial segmentation based on the "
|
||||
"positioning of landmark locations. A convex hull is constructed around the "
|
||||
"exterior of the landmarks and the mask is extended upwards onto the "
|
||||
"forehead.\n"
|
||||
"L|vgg-clear: Mask designed to provide smart segmentation of mostly frontal "
|
||||
"faces clear of obstructions. Profile faces and obstructions may result in "
|
||||
"sub-par performance.\n"
|
||||
"L|vgg-obstructed: Mask designed to provide smart segmentation of mostly "
|
||||
"frontal faces. The mask model has been specifically trained to recognize "
|
||||
"some facial obstructions (hands and eyeglasses). Profile faces may result in "
|
||||
"sub-par performance.\n"
|
||||
"L|unet-dfl: Mask designed to provide smart segmentation of mostly frontal "
|
||||
"faces. The mask model has been trained by community members and will need "
|
||||
"testing for further description. Profile faces may result in sub-par "
|
||||
"performance.\n"
|
||||
"L|predicted: If the 'Learn Mask' option was enabled during training, this "
|
||||
"will use the mask that was created by the trained model."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:566
|
||||
msgid ""
|
||||
"R|The plugin to use to output the converted images. The writers are "
|
||||
"configurable in '/config/convert.ini' or 'Settings > Configure Convert "
|
||||
"Plugins:'\n"
|
||||
"L|ffmpeg: [video] Writes out the convert straight to video. When the input "
|
||||
"is a series of images then the '-ref' (--reference-video) parameter must be "
|
||||
"set.\n"
|
||||
"L|gif: [animated image] Create an animated gif.\n"
|
||||
"L|opencv: [images] The fastest image writer, but less options and formats "
|
||||
"than other plugins.\n"
|
||||
"L|patch: [images] Outputs the raw swapped face patch, along with the "
|
||||
"transformation matrix required to re-insert the face back into the original "
|
||||
"frame. Use this option if you wish to post-process and composite the final "
|
||||
"face within external tools.\n"
|
||||
"L|pillow: [images] Slower than opencv, but has more options and supports "
|
||||
"more formats."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:587 lib/cli/args_extract_convert.py:596
|
||||
#: lib/cli/args_extract_convert.py:707
|
||||
msgid "Frame Processing"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:589
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Scale the final output frames by this amount. 100%% will output the frames "
|
||||
"at source dimensions. 50%% at half size 200%% at double size"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:598
|
||||
msgid ""
|
||||
"Frame ranges to apply transfer to e.g. For frames 10 to 50 and 90 to 100 use "
|
||||
"--frame-ranges 10-50 90-100. Frames falling outside of the selected range "
|
||||
"will be discarded unless '-k' (--keep-unchanged) is selected. NB: If you are "
|
||||
"converting from images, then the filenames must end with the frame-number!"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:612
|
||||
msgid ""
|
||||
"Scale the swapped face by this percentage. Positive values will enlarge the "
|
||||
"face, Negative values will shrink the face."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:621
|
||||
msgid ""
|
||||
"If you have not cleansed your alignments file, then you can filter out faces "
|
||||
"by defining a folder here that contains the faces extracted from your input "
|
||||
"files/video. If this folder is defined, then only faces that exist within "
|
||||
"your alignments file and also exist within the specified folder will be "
|
||||
"converted. Leaving this blank will convert all faces that exist within the "
|
||||
"alignments file."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:636
|
||||
msgid ""
|
||||
"Optionally filter out people who you do not wish to process by passing in an "
|
||||
"image of that person. Should be a front portrait with a single person in the "
|
||||
"image. Multiple images can be added space separated. NB: Using face filter "
|
||||
"will significantly decrease extraction speed and its accuracy cannot be "
|
||||
"guaranteed."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:649
|
||||
msgid ""
|
||||
"Optionally select people you wish to process by passing in an image of that "
|
||||
"person. Should be a front portrait with a single person in the image. "
|
||||
"Multiple images can be added space separated. NB: Using face filter will "
|
||||
"significantly decrease extraction speed and its accuracy cannot be "
|
||||
"guaranteed."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:663
|
||||
msgid ""
|
||||
"For use with the optional nfilter/filter files. Threshold for positive face "
|
||||
"recognition. Lower values are stricter. NB: Using face filter will "
|
||||
"significantly decrease extraction speed and its accuracy cannot be "
|
||||
"guaranteed."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:676
|
||||
msgid ""
|
||||
"The maximum number of parallel processes for performing conversion. "
|
||||
"Converting images is system RAM heavy so it is possible to run out of memory "
|
||||
"if you have a lot of processes and not enough RAM to accommodate them all. "
|
||||
"Setting this to 0 will use the maximum available. No matter what you set "
|
||||
"this to, it will never attempt to use more processes than are available on "
|
||||
"your system. If singleprocess is enabled this setting will be ignored."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:688
|
||||
msgid ""
|
||||
"[LEGACY] This only needs to be selected if a legacy model is being loaded or "
|
||||
"if there are multiple models in the model folder"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:697
|
||||
msgid ""
|
||||
"Enable On-The-Fly Conversion. NOT recommended. You should generate a clean "
|
||||
"alignments file for your destination video. However, if you wish you can "
|
||||
"generate the alignments on-the-fly by enabling this option. This will use an "
|
||||
"inferior extraction pipeline and will lead to substandard results. If an "
|
||||
"alignments file is found, this option will be ignored."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:709
|
||||
msgid ""
|
||||
"When used with --frame-ranges outputs the unchanged frames that are not "
|
||||
"processed instead of discarding them."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:717
|
||||
msgid "Swap the model. Instead converting from of A -> B, converts B -> A"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:723
|
||||
msgid "Disable multiprocessing. Slower but less resource intensive."
|
||||
msgstr ""
|
255
locales/lib.cli.args_train.pot
Normal file
255
locales/lib.cli.args_train.pot
Normal file
|
@ -0,0 +1,255 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-03-28 18:04+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: lib/cli/args_train.py:30
|
||||
msgid ""
|
||||
"Train a model on extracted original (A) and swap (B) faces.\n"
|
||||
"Training models can take a long time. Anything from 24hrs to over a week\n"
|
||||
"Model plugins can be configured in the 'Settings' Menu"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_train.py:49 lib/cli/args_train.py:58
|
||||
msgid "faces"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_train.py:51
|
||||
msgid ""
|
||||
"Input directory. A directory containing training images for face A. This is "
|
||||
"the original face, i.e. the face that you want to remove and replace with "
|
||||
"face B."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_train.py:60
|
||||
msgid ""
|
||||
"Input directory. A directory containing training images for face B. This is "
|
||||
"the swap face, i.e. the face that you want to place onto the head of person "
|
||||
"A."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_train.py:67 lib/cli/args_train.py:80 lib/cli/args_train.py:97
|
||||
#: lib/cli/args_train.py:123 lib/cli/args_train.py:133
|
||||
msgid "model"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_train.py:69
|
||||
msgid ""
|
||||
"Model directory. This is where the training data will be stored. You should "
|
||||
"always specify a new folder for new models. If starting a new model, select "
|
||||
"either an empty folder, or a folder which does not exist (which will be "
|
||||
"created). If continuing to train an existing model, specify the location of "
|
||||
"the existing model."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_train.py:82
|
||||
msgid ""
|
||||
"R|Load the weights from a pre-existing model into a newly created model. For "
|
||||
"most models this will load weights from the Encoder of the given model into "
|
||||
"the encoder of the newly created model. Some plugins may have specific "
|
||||
"configuration options allowing you to load weights from other layers. "
|
||||
"Weights will only be loaded when creating a new model. This option will be "
|
||||
"ignored if you are resuming an existing model. Generally you will also want "
|
||||
"to 'freeze-weights' whilst the rest of your model catches up with your "
|
||||
"Encoder.\n"
|
||||
"NB: Weights can only be loaded from models of the same plugin as you intend "
|
||||
"to train."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_train.py:99
|
||||
msgid ""
|
||||
"R|Select which trainer to use. Trainers can be configured from the Settings "
|
||||
"menu or the config folder.\n"
|
||||
"L|original: The original model created by /u/deepfakes.\n"
|
||||
"L|dfaker: 64px in/128px out model from dfaker. Enable 'warp-to-landmarks' "
|
||||
"for full dfaker method.\n"
|
||||
"L|dfl-h128: 128px in/out model from deepfacelab\n"
|
||||
"L|dfl-sae: Adaptable model from deepfacelab\n"
|
||||
"L|dlight: A lightweight, high resolution DFaker variant.\n"
|
||||
"L|iae: A model that uses intermediate layers to try to get better details\n"
|
||||
"L|lightweight: A lightweight model for low-end cards. Don't expect great "
|
||||
"results. Can train as low as 1.6GB with batch size 8.\n"
|
||||
"L|realface: A high detail, dual density model based on DFaker, with "
|
||||
"customizable in/out resolution. The autoencoders are unbalanced so B>A swaps "
|
||||
"won't work so well. By andenixa et al. Very configurable.\n"
|
||||
"L|unbalanced: 128px in/out model from andenixa. The autoencoders are "
|
||||
"unbalanced so B>A swaps won't work so well. Very configurable.\n"
|
||||
"L|villain: 128px in/out model from villainguy. Very resource hungry (You "
|
||||
"will require a GPU with a fair amount of VRAM). Good for details, but more "
|
||||
"susceptible to color differences."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_train.py:125
|
||||
msgid ""
|
||||
"Output a summary of the model and exit. If a model folder is provided then a "
|
||||
"summary of the saved model is displayed. Otherwise a summary of the model "
|
||||
"that would be created by the chosen plugin and configuration settings is "
|
||||
"displayed."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_train.py:135
|
||||
msgid ""
|
||||
"Freeze the weights of the model. Freezing weights means that some of the "
|
||||
"parameters in the model will no longer continue to learn, but those that are "
|
||||
"not frozen will continue to learn. For most models, this will freeze the "
|
||||
"encoder, but some models may have configuration options for freezing other "
|
||||
"layers."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_train.py:147 lib/cli/args_train.py:160
|
||||
#: lib/cli/args_train.py:175 lib/cli/args_train.py:191
|
||||
#: lib/cli/args_train.py:200
|
||||
msgid "training"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_train.py:149
|
||||
msgid ""
|
||||
"Batch size. This is the number of images processed through the model for "
|
||||
"each side per iteration. NB: As the model is fed 2 sides at a time, the "
|
||||
"actual number of images within the model at any one time is double the "
|
||||
"number that you set here. Larger batches require more GPU RAM."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_train.py:162
|
||||
msgid ""
|
||||
"Length of training in iterations. This is only really used for automation. "
|
||||
"There is no 'correct' number of iterations a model should be trained for. "
|
||||
"You should stop training when you are happy with the previews. However, if "
|
||||
"you want the model to stop automatically at a set number of iterations, you "
|
||||
"can set that value here."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_train.py:177
|
||||
msgid ""
|
||||
"R|Select the distribution stategy to use.\n"
|
||||
"L|default: Use Tensorflow's default distribution strategy.\n"
|
||||
"L|central-storage: Centralizes variables on the CPU whilst operations are "
|
||||
"performed on 1 or more local GPUs. This can help save some VRAM at the cost "
|
||||
"of some speed by not storing variables on the GPU. Note: Mixed-Precision is "
|
||||
"not supported on multi-GPU setups.\n"
|
||||
"L|mirrored: Supports synchronous distributed training across multiple local "
|
||||
"GPUs. A copy of the model and all variables are loaded onto each GPU with "
|
||||
"batches distributed to each GPU at each iteration."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_train.py:193
|
||||
msgid ""
|
||||
"Disables TensorBoard logging. NB: Disabling logs means that you will not be "
|
||||
"able to use the graph or analysis for this session in the GUI."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_train.py:202
|
||||
msgid ""
|
||||
"Use the Learning Rate Finder to discover the optimal learning rate for "
|
||||
"training. For new models, this will calculate the optimal learning rate for "
|
||||
"the model. For existing models this will use the optimal learning rate that "
|
||||
"was discovered when initializing the model. Setting this option will ignore "
|
||||
"the manually configured learning rate (configurable in train settings)."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_train.py:215 lib/cli/args_train.py:225
|
||||
msgid "Saving"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_train.py:216
|
||||
msgid "Sets the number of iterations between each model save."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_train.py:227
|
||||
msgid ""
|
||||
"Sets the number of iterations before saving a backup snapshot of the model "
|
||||
"in it's current state. Set to 0 for off."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_train.py:234 lib/cli/args_train.py:246
|
||||
#: lib/cli/args_train.py:258
|
||||
msgid "timelapse"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_train.py:236
|
||||
msgid ""
|
||||
"Optional for creating a timelapse. Timelapse will save an image of your "
|
||||
"selected faces into the timelapse-output folder at every save iteration. "
|
||||
"This should be the input folder of 'A' faces that you would like to use for "
|
||||
"creating the timelapse. You must also supply a --timelapse-output and a --"
|
||||
"timelapse-input-B parameter."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_train.py:248
|
||||
msgid ""
|
||||
"Optional for creating a timelapse. Timelapse will save an image of your "
|
||||
"selected faces into the timelapse-output folder at every save iteration. "
|
||||
"This should be the input folder of 'B' faces that you would like to use for "
|
||||
"creating the timelapse. You must also supply a --timelapse-output and a --"
|
||||
"timelapse-input-A parameter."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_train.py:260
|
||||
msgid ""
|
||||
"Optional for creating a timelapse. Timelapse will save an image of your "
|
||||
"selected faces into the timelapse-output folder at every save iteration. If "
|
||||
"the input folders are supplied but no output folder, it will default to your "
|
||||
"model folder/timelapse/"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_train.py:269 lib/cli/args_train.py:276
|
||||
msgid "preview"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_train.py:270
|
||||
msgid "Show training preview output. in a separate window."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_train.py:278
|
||||
msgid ""
|
||||
"Writes the training result to a file. The image will be stored in the root "
|
||||
"of your FaceSwap folder."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_train.py:285 lib/cli/args_train.py:295
|
||||
#: lib/cli/args_train.py:305 lib/cli/args_train.py:315
|
||||
msgid "augmentation"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_train.py:287
|
||||
msgid ""
|
||||
"Warps training faces to closely matched Landmarks from the opposite face-set "
|
||||
"rather than randomly warping the face. This is the 'dfaker' way of doing "
|
||||
"warping."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_train.py:297
|
||||
msgid ""
|
||||
"To effectively learn, a random set of images are flipped horizontally. "
|
||||
"Sometimes it is desirable for this not to occur. Generally this should be "
|
||||
"left off except for during 'fit training'."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_train.py:307
|
||||
msgid ""
|
||||
"Color augmentation helps make the model less susceptible to color "
|
||||
"differences between the A and B sets, at an increased training time cost. "
|
||||
"Enable this option to disable color augmentation."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cli/args_train.py:317
|
||||
msgid ""
|
||||
"Warping is integral to training the Neural Network. This option should only "
|
||||
"be enabled towards the very end of training to try to bring out more detail. "
|
||||
"Think of it as 'fine-tuning'. Enabling this option from the beginning is "
|
||||
"likely to kill a model and lead to terrible results."
|
||||
msgstr ""
|
BIN
locales/ru/LC_MESSAGES/lib.cli.args.mo
Executable file → Normal file
BIN
locales/ru/LC_MESSAGES/lib.cli.args.mo
Executable file → Normal file
Binary file not shown.
File diff suppressed because it is too large
Load diff
BIN
locales/ru/LC_MESSAGES/lib.cli.args_extract_convert.mo
Normal file
BIN
locales/ru/LC_MESSAGES/lib.cli.args_extract_convert.mo
Normal file
Binary file not shown.
703
locales/ru/LC_MESSAGES/lib.cli.args_extract_convert.po
Executable file
703
locales/ru/LC_MESSAGES/lib.cli.args_extract_convert.po
Executable file
|
@ -0,0 +1,703 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-03-28 18:11+0000\n"
|
||||
"PO-Revision-Date: 2024-03-28 18:22+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: ru\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:46 lib/cli/args_extract_convert.py:56
|
||||
#: lib/cli/args_extract_convert.py:64 lib/cli/args_extract_convert.py:122
|
||||
#: lib/cli/args_extract_convert.py:479 lib/cli/args_extract_convert.py:488
|
||||
msgid "Data"
|
||||
msgstr "Данные"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:48
|
||||
msgid ""
|
||||
"Input directory or video. Either a directory containing the image files you "
|
||||
"wish to process or path to a video file. NB: This should be the source video/"
|
||||
"frames NOT the source faces."
|
||||
msgstr ""
|
||||
"Входная папка или видео. Либо каталог, содержащий файлы изображений, которые "
|
||||
"вы хотите обработать, либо путь к видеофайлу. ПРИМЕЧАНИЕ: Это должно быть "
|
||||
"исходное видео/кадры, а не исходные лица."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:57
|
||||
msgid "Output directory. This is where the converted files will be saved."
|
||||
msgstr "Выходная папка. Здесь будут сохранены преобразованные файлы."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:66
|
||||
msgid ""
|
||||
"Optional path to an alignments file. Leave blank if the alignments file is "
|
||||
"at the default location."
|
||||
msgstr ""
|
||||
"Необязательный путь к файлу выравниваний. Оставьте пустым, если файл "
|
||||
"выравнивания находится в месте по умолчанию."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:97
|
||||
msgid ""
|
||||
"Extract faces from image or video sources.\n"
|
||||
"Extraction plugins can be configured in the 'Settings' Menu"
|
||||
msgstr ""
|
||||
"Извлечение лиц из источников изображений или видео.\n"
|
||||
"Плагины извлечения можно настроить в меню \"Настройки\""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:124
|
||||
msgid ""
|
||||
"R|If selected then the input_dir should be a parent folder containing "
|
||||
"multiple videos and/or folders of images you wish to extract from. The faces "
|
||||
"will be output to separate sub-folders in the output_dir."
|
||||
msgstr ""
|
||||
"R|Если выбрано, то input_dir должен быть родительской папкой, содержащей "
|
||||
"несколько видео и/или папок с изображениями, из которых вы хотите извлечь "
|
||||
"изображение. Лица будут выведены в отдельные вложенные папки в output_dir."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:133 lib/cli/args_extract_convert.py:150
|
||||
#: lib/cli/args_extract_convert.py:163 lib/cli/args_extract_convert.py:202
|
||||
#: lib/cli/args_extract_convert.py:220 lib/cli/args_extract_convert.py:233
|
||||
#: lib/cli/args_extract_convert.py:243 lib/cli/args_extract_convert.py:253
|
||||
#: lib/cli/args_extract_convert.py:499 lib/cli/args_extract_convert.py:525
|
||||
#: lib/cli/args_extract_convert.py:564
|
||||
msgid "Plugins"
|
||||
msgstr "Плагины"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:135
|
||||
msgid ""
|
||||
"R|Detector to use. Some of these have configurable settings in '/config/"
|
||||
"extract.ini' or 'Settings > Configure Extract 'Plugins':\n"
|
||||
"L|cv2-dnn: A CPU only extractor which is the least reliable and least "
|
||||
"resource intensive. Use this if not using a GPU and time is important.\n"
|
||||
"L|mtcnn: Good detector. Fast on CPU, faster on GPU. Uses fewer resources "
|
||||
"than other GPU detectors but can often return more false positives.\n"
|
||||
"L|s3fd: Best detector. Slow on CPU, faster on GPU. Can detect more faces and "
|
||||
"fewer false positives than other GPU detectors, but is a lot more resource "
|
||||
"intensive."
|
||||
msgstr ""
|
||||
"R|Детектор для использования. Некоторые из них имеют настраиваемые параметры "
|
||||
"в '/config/extract.ini' или 'Settings > Configure Extract 'Plugins':\n"
|
||||
"L|cv2-dnn: Экстрактор только для процессора, который является наименее "
|
||||
"надежным и наименее ресурсоемким. Используйте его, если не используется GPU "
|
||||
"и важно время.\n"
|
||||
"L|mtcnn: Хороший детектор. Быстрый на CPU, еще быстрее на GPU. Использует "
|
||||
"меньше ресурсов, чем другие детекторы на GPU, но часто может давать больше "
|
||||
"ложных срабатываний.\n"
|
||||
"L|s3fd: Лучший детектор. Медленный на CPU, более быстрый на GPU. Может "
|
||||
"обнаружить больше лиц и меньше ложных срабатываний, чем другие детекторы на "
|
||||
"GPU, но требует гораздо больше ресурсов."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:152
|
||||
msgid ""
|
||||
"R|Aligner to use.\n"
|
||||
"L|cv2-dnn: A CPU only landmark detector. Faster, less resource intensive, "
|
||||
"but less accurate. Only use this if not using a GPU and time is important.\n"
|
||||
"L|fan: Best aligner. Fast on GPU, slow on CPU."
|
||||
msgstr ""
|
||||
"R|Выравниватель для использования.\n"
|
||||
"L|cv2-dnn: Детектор ориентиров только для процессора. Быстрее, менее "
|
||||
"ресурсоемкий, но менее точный. Используйте его, только если не используется "
|
||||
"GPU и важно время.\n"
|
||||
"L|fan: Лучший выравниватель. Быстрый на GPU, медленный на CPU."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:165
|
||||
msgid ""
|
||||
"R|Additional Masker(s) to use. The masks generated here will all take up GPU "
|
||||
"RAM. You can select none, one or multiple masks, but the extraction may take "
|
||||
"longer the more you select. NB: The Extended and Components (landmark based) "
|
||||
"masks are automatically generated on extraction.\n"
|
||||
"L|bisenet-fp: Relatively lightweight NN based mask that provides more "
|
||||
"refined control over the area to be masked including full head masking "
|
||||
"(configurable in mask settings).\n"
|
||||
"L|custom: A dummy mask that fills the mask area with all 1s or 0s "
|
||||
"(configurable in settings). This is only required if you intend to manually "
|
||||
"edit the custom masks yourself in the manual tool. This mask does not use "
|
||||
"the GPU so will not use any additional VRAM.\n"
|
||||
"L|vgg-clear: Mask designed to provide smart segmentation of mostly frontal "
|
||||
"faces clear of obstructions. Profile faces and obstructions may result in "
|
||||
"sub-par performance.\n"
|
||||
"L|vgg-obstructed: Mask designed to provide smart segmentation of mostly "
|
||||
"frontal faces. The mask model has been specifically trained to recognize "
|
||||
"some facial obstructions (hands and eyeglasses). Profile faces may result in "
|
||||
"sub-par performance.\n"
|
||||
"L|unet-dfl: Mask designed to provide smart segmentation of mostly frontal "
|
||||
"faces. The mask model has been trained by community members and will need "
|
||||
"testing for further description. Profile faces may result in sub-par "
|
||||
"performance.\n"
|
||||
"The auto generated masks are as follows:\n"
|
||||
"L|components: Mask designed to provide facial segmentation based on the "
|
||||
"positioning of landmark locations. A convex hull is constructed around the "
|
||||
"exterior of the landmarks to create a mask.\n"
|
||||
"L|extended: Mask designed to provide facial segmentation based on the "
|
||||
"positioning of landmark locations. A convex hull is constructed around the "
|
||||
"exterior of the landmarks and the mask is extended upwards onto the "
|
||||
"forehead.\n"
|
||||
"(eg: `-M unet-dfl vgg-clear`, `--masker vgg-obstructed`)"
|
||||
msgstr ""
|
||||
"R|Дополнительный маскер(ы) для использования. Все маски, созданные здесь, "
|
||||
"будут занимать видеопамять GPU. Вы можете выбрать ни одной, одну или "
|
||||
"несколько масок, но извлечение может занять больше времени, чем больше масок "
|
||||
"вы выберете. Примечание: Расширенные маски и маски компонентов (на основе "
|
||||
"ориентиров) генерируются автоматически при извлечении.\n"
|
||||
"L|bisenet-fp: Относительно легкая маска на основе NN, которая обеспечивает "
|
||||
"более точный контроль над маскируемой областью, включая полное маскирование "
|
||||
"головы (настраивается в настройках маски).\n"
|
||||
"L|custom: Фиктивная маска, которая заполняет область маски всеми 1 или 0 "
|
||||
"(настраивается в настройках). Она необходима только в том случае, если вы "
|
||||
"собираетесь вручную редактировать пользовательские маски в ручном "
|
||||
"инструменте. Эта маска не задействует GPU, поэтому не будет использовать "
|
||||
"дополнительную память VRAM.\n"
|
||||
"L|vgg-clear: Маска предназначена для интеллектуальной сегментации "
|
||||
"преимущественно фронтальных лиц без препятствий. Профильные лица и "
|
||||
"препятствия могут привести к снижению производительности.\n"
|
||||
"L|vgg-obstructed: Маска, разработанная для интеллектуальной сегментации "
|
||||
"преимущественно фронтальных лиц. Модель маски была специально обучена "
|
||||
"распознавать некоторые препятствия на лице (руки и очки). Лица в профиль "
|
||||
"могут иметь низкую производительность.\n"
|
||||
"L|unet-dfl: Маска, разработанная для интеллектуальной сегментации "
|
||||
"преимущественно фронтальных лиц. Модель маски была обучена членами "
|
||||
"сообщества и для дальнейшего описания нуждается в тестировании. Профильные "
|
||||
"лица могут привести к низкой производительности.\n"
|
||||
"Автоматически сгенерированные маски выглядят следующим образом:\n"
|
||||
"L|components: Маска, разработанная для сегментации лица на основе "
|
||||
"расположения ориентиров. Для создания маски вокруг внешних ориентиров "
|
||||
"строится выпуклая оболочка.\n"
|
||||
"L|extended: Маска, предназначенная для сегментации лица на основе "
|
||||
"расположения ориентиров. Выпуклый корпус строится вокруг внешних ориентиров, "
|
||||
"и маска расширяется вверх на лоб.\n"
|
||||
"(например: `-M unet-dfl vgg-clear`, `--masker vgg-obstructed`)"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:204
|
||||
msgid ""
|
||||
"R|Performing normalization can help the aligner better align faces with "
|
||||
"difficult lighting conditions at an extraction speed cost. Different methods "
|
||||
"will yield different results on different sets. NB: This does not impact the "
|
||||
"output face, just the input to the aligner.\n"
|
||||
"L|none: Don't perform normalization on the face.\n"
|
||||
"L|clahe: Perform Contrast Limited Adaptive Histogram Equalization on the "
|
||||
"face.\n"
|
||||
"L|hist: Equalize the histograms on the RGB channels.\n"
|
||||
"L|mean: Normalize the face colors to the mean."
|
||||
msgstr ""
|
||||
"R|Проведение нормализации может помочь выравнивателю лучше выравнивать лица "
|
||||
"со сложными условиями освещения при затратах на скорость извлечения. "
|
||||
"Различные методы дают разные результаты на разных наборах. NB: Это не влияет "
|
||||
"на выходное лицо, только на вход выравнивателя.\n"
|
||||
"L|none: Не выполнять нормализацию лица.\n"
|
||||
"L|clahe: Выполнить для лица адаптивную гистограммную эквализацию с "
|
||||
"ограничением контраста.\n"
|
||||
"L|hist: Уравнять гистограммы в каналах RGB.\n"
|
||||
"L|mean: Нормализовать цвета лица к среднему значению."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:222
|
||||
msgid ""
|
||||
"The number of times to re-feed the detected face into the aligner. Each time "
|
||||
"the face is re-fed into the aligner the bounding box is adjusted by a small "
|
||||
"amount. The final landmarks are then averaged from each iteration. Helps to "
|
||||
"remove 'micro-jitter' but at the cost of slower extraction speed. The more "
|
||||
"times the face is re-fed into the aligner, the less micro-jitter should "
|
||||
"occur but the longer extraction will take."
|
||||
msgstr ""
|
||||
"Количество повторных подач обнаруженной области лица в выравниватель. При "
|
||||
"каждой повторной подаче лица в выравниватель ограничивающая рамка "
|
||||
"корректируется на небольшую величину. Затем конечные ориентиры усредняются "
|
||||
"по результатам каждой итерации. Это помогает устранить \"микро-дрожание\", "
|
||||
"но ценой снижения скорости извлечения. Чем больше раз лицо повторно подается "
|
||||
"в выравниватель, тем меньше микро-дрожание, но тем больше времени займет "
|
||||
"извлечение."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:235
|
||||
msgid ""
|
||||
"Re-feed the initially found aligned face through the aligner. Can help "
|
||||
"produce better alignments for faces that are rotated beyond 45 degrees in "
|
||||
"the frame or are at extreme angles. Slows down extraction."
|
||||
msgstr ""
|
||||
"Повторная подача первоначально найденной выровненной области лица через "
|
||||
"выравниватель. Может помочь получить лучшее выравнивание для лиц, повернутых "
|
||||
"в кадре более чем на 45 градусов или расположенных под экстремальными "
|
||||
"углами. Замедляет извлечение."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:245
|
||||
msgid ""
|
||||
"If a face isn't found, rotate the images to try to find a face. Can find "
|
||||
"more faces at the cost of extraction speed. Pass in a single number to use "
|
||||
"increments of that size up to 360, or pass in a list of numbers to enumerate "
|
||||
"exactly what angles to check."
|
||||
msgstr ""
|
||||
"Если лицо не найдено, поворачивает изображения, чтобы попытаться найти лицо. "
|
||||
"Может найти больше лиц ценой снижения скорости извлечения. Передайте одно "
|
||||
"число, чтобы использовать приращения этого размера до 360, или передайте "
|
||||
"список чисел, чтобы перечислить, какие именно углы нужно проверить."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:255
|
||||
msgid ""
|
||||
"Obtain and store face identity encodings from VGGFace2. Slows down extract a "
|
||||
"little, but will save time if using 'sort by face'"
|
||||
msgstr ""
|
||||
"Получение и хранение кодировок идентификации лица из VGGFace2. Немного "
|
||||
"замедляет извлечение, но экономит время при использовании \"сортировки по "
|
||||
"лицам\"."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:265 lib/cli/args_extract_convert.py:276
|
||||
#: lib/cli/args_extract_convert.py:289 lib/cli/args_extract_convert.py:303
|
||||
#: lib/cli/args_extract_convert.py:610 lib/cli/args_extract_convert.py:619
|
||||
#: lib/cli/args_extract_convert.py:634 lib/cli/args_extract_convert.py:647
|
||||
#: lib/cli/args_extract_convert.py:661
|
||||
msgid "Face Processing"
|
||||
msgstr "Обработка лиц"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:267
|
||||
msgid ""
|
||||
"Filters out faces detected below this size. Length, in pixels across the "
|
||||
"diagonal of the bounding box. Set to 0 for off"
|
||||
msgstr ""
|
||||
"Отфильтровывает лица, обнаруженные ниже этого размера. Длина в пикселях по "
|
||||
"диагонали ограничивающего поля. Установите значение 0, чтобы выключить"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:278
|
||||
msgid ""
|
||||
"Optionally filter out people who you do not wish to extract by passing in "
|
||||
"images of those people. Should be a small variety of images at different "
|
||||
"angles and in different conditions. A folder containing the required images "
|
||||
"or multiple image files, space separated, can be selected."
|
||||
msgstr ""
|
||||
"По желанию отфильтруйте людей, которых вы не хотите извлекать, передав "
|
||||
"изображения этих людей. Должно быть небольшое разнообразие изображений под "
|
||||
"разными углами и в разных условиях. Можно выбрать папку, содержащую "
|
||||
"необходимые изображения, или несколько файлов изображений, разделенных "
|
||||
"пробелами."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:291
|
||||
msgid ""
|
||||
"Optionally select people you wish to extract by passing in images of that "
|
||||
"person. Should be a small variety of images at different angles and in "
|
||||
"different conditions A folder containing the required images or multiple "
|
||||
"image files, space separated, can be selected."
|
||||
msgstr ""
|
||||
"По желанию выберите людей, которых вы хотите извлечь, передав изображения "
|
||||
"этого человека. Должно быть небольшое разнообразие изображений под разными "
|
||||
"углами и в разных условиях. Можно выбрать папку, содержащую необходимые "
|
||||
"изображения, или несколько файлов изображений, разделенных пробелами."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:305
|
||||
msgid ""
|
||||
"For use with the optional nfilter/filter files. Threshold for positive face "
|
||||
"recognition. Higher values are stricter."
|
||||
msgstr ""
|
||||
"Для использования с дополнительными файлами nfilter/filter. Порог для "
|
||||
"положительного распознавания лица. Более высокие значения являются более "
|
||||
"строгими."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:314 lib/cli/args_extract_convert.py:327
|
||||
#: lib/cli/args_extract_convert.py:340 lib/cli/args_extract_convert.py:352
|
||||
msgid "output"
|
||||
msgstr "вывод"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:316
|
||||
msgid ""
|
||||
"The output size of extracted faces. Make sure that the model you intend to "
|
||||
"train supports your required size. This will only need to be changed for hi-"
|
||||
"res models."
|
||||
msgstr ""
|
||||
"Выходной размер извлеченных лиц. Убедитесь, что модель, которую вы "
|
||||
"собираетесь тренировать, поддерживает требуемый размер. Это необходимо "
|
||||
"изменить только для моделей высокого разрешения."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:329
|
||||
msgid ""
|
||||
"Extract every 'nth' frame. This option will skip frames when extracting "
|
||||
"faces. For example a value of 1 will extract faces from every frame, a value "
|
||||
"of 10 will extract faces from every 10th frame."
|
||||
msgstr ""
|
||||
"Извлекать каждый 'n-й' кадр. Этот параметр пропускает кадры при извлечении "
|
||||
"лиц. Например, значение 1 будет извлекать лица из каждого кадра, значение 10 "
|
||||
"будет извлекать лица из каждого 10-го кадра."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:342
|
||||
msgid ""
|
||||
"Automatically save the alignments file after a set amount of frames. By "
|
||||
"default the alignments file is only saved at the end of the extraction "
|
||||
"process. NB: If extracting in 2 passes then the alignments file will only "
|
||||
"start to be saved out during the second pass. WARNING: Don't interrupt the "
|
||||
"script when writing the file because it might get corrupted. Set to 0 to "
|
||||
"turn off"
|
||||
msgstr ""
|
||||
"Автоматическое сохранение файла выравнивания после заданного количества "
|
||||
"кадров. По умолчанию файл выравнивания сохраняется только в конце процесса "
|
||||
"извлечения. Примечание: Если извлечение выполняется в 2 прохода, то файл "
|
||||
"выравнивания начнет сохраняться только во время второго прохода. "
|
||||
"ПРЕДУПРЕЖДЕНИЕ: Не прерывайте работу скрипта при записи файла, так как он "
|
||||
"может быть поврежден. Установите значение 0, чтобы отключить"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:353
|
||||
msgid "Draw landmarks on the ouput faces for debugging purposes."
|
||||
msgstr "Нарисуйте ориентиры на выходящих гранях для отладки."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:359 lib/cli/args_extract_convert.py:369
|
||||
#: lib/cli/args_extract_convert.py:377 lib/cli/args_extract_convert.py:384
|
||||
#: lib/cli/args_extract_convert.py:674 lib/cli/args_extract_convert.py:686
|
||||
#: lib/cli/args_extract_convert.py:695 lib/cli/args_extract_convert.py:716
|
||||
#: lib/cli/args_extract_convert.py:722
|
||||
msgid "settings"
|
||||
msgstr "настройки"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:361
|
||||
msgid ""
|
||||
"Don't run extraction in parallel. Will run each part of the extraction "
|
||||
"process separately (one after the other) rather than all at the same time. "
|
||||
"Useful if VRAM is at a premium."
|
||||
msgstr ""
|
||||
"Не запускать извлечение параллельно. Каждая часть процесса извлечения будет "
|
||||
"выполняться отдельно (одна за другой), а не одновременно. Полезно, если "
|
||||
"память VRAM ограничена."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:371
|
||||
msgid ""
|
||||
"Skips frames that have already been extracted and exist in the alignments "
|
||||
"file"
|
||||
msgstr ""
|
||||
"Пропускает кадры, которые уже были извлечены и существуют в файле "
|
||||
"выравнивания"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:378
|
||||
msgid "Skip frames that already have detected faces in the alignments file"
|
||||
msgstr ""
|
||||
"Пропустить кадры, в которых уже есть обнаруженные лица в файле выравнивания"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:385
|
||||
msgid "Skip saving the detected faces to disk. Just create an alignments file"
|
||||
msgstr ""
|
||||
"Не сохранять обнаруженные лица на диск. Просто создать файл выравнивания"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:459
|
||||
msgid ""
|
||||
"Swap the original faces in a source video/images to your final faces.\n"
|
||||
"Conversion plugins can be configured in the 'Settings' Menu"
|
||||
msgstr ""
|
||||
"Поменять исходные лица в исходном видео/изображении на ваши конечные лица.\n"
|
||||
"Плагины конвертирования можно настроить в меню \"Настройки\""
|
||||
|
||||
#: lib/cli/args_extract_convert.py:481
|
||||
msgid ""
|
||||
"Only required if converting from images to video. Provide The original video "
|
||||
"that the source frames were extracted from (for extracting the fps and "
|
||||
"audio)."
|
||||
msgstr ""
|
||||
"Требуется только при преобразовании из изображений в видео. Предоставьте "
|
||||
"исходное видео, из которого были извлечены исходные кадры (для извлечения "
|
||||
"кадров в секунду и звука)."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:490
|
||||
msgid ""
|
||||
"Model directory. The directory containing the trained model you wish to use "
|
||||
"for conversion."
|
||||
msgstr ""
|
||||
"Папка модели. Папка, содержащая обученную модель, которую вы хотите "
|
||||
"использовать для преобразования."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:501
|
||||
msgid ""
|
||||
"R|Performs color adjustment to the swapped face. Some of these options have "
|
||||
"configurable settings in '/config/convert.ini' or 'Settings > Configure "
|
||||
"Convert Plugins':\n"
|
||||
"L|avg-color: Adjust the mean of each color channel in the swapped "
|
||||
"reconstruction to equal the mean of the masked area in the original image.\n"
|
||||
"L|color-transfer: Transfers the color distribution from the source to the "
|
||||
"target image using the mean and standard deviations of the L*a*b* color "
|
||||
"space.\n"
|
||||
"L|manual-balance: Manually adjust the balance of the image in a variety of "
|
||||
"color spaces. Best used with the Preview tool to set correct values.\n"
|
||||
"L|match-hist: Adjust the histogram of each color channel in the swapped "
|
||||
"reconstruction to equal the histogram of the masked area in the original "
|
||||
"image.\n"
|
||||
"L|seamless-clone: Use cv2's seamless clone function to remove extreme "
|
||||
"gradients at the mask seam by smoothing colors. Generally does not give very "
|
||||
"satisfactory results.\n"
|
||||
"L|none: Don't perform color adjustment."
|
||||
msgstr ""
|
||||
"R|Производит корректировку цвета поменявшегося лица. Некоторые из этих "
|
||||
"параметров настраиваются в '/config/convert.ini' или 'Настройки > Настроить "
|
||||
"плагины конвертации':\n"
|
||||
"L|avg-color: корректирует среднее значение каждого цветового канала в "
|
||||
"реконструкции, чтобы оно было равно среднему значению маскированной области "
|
||||
"в исходном изображении.\n"
|
||||
"L|color-transfer: Переносит распределение цветов с исходного изображения на "
|
||||
"целевое, используя среднее и стандартные отклонения цветового пространства "
|
||||
"L*a*b*.\n"
|
||||
"L|manual-balance: Ручная настройка баланса изображения в различных цветовых "
|
||||
"пространствах. Лучше всего использовать с инструментом предварительного "
|
||||
"просмотра для установки правильных значений.\n"
|
||||
"L|match-hist: Настроить гистограмму каждого цветового канала в измененном "
|
||||
"восстановлении так, чтобы она соответствовала гистограмме маскированной "
|
||||
"области исходного изображения.\n"
|
||||
"L|seamless-clone: Используйте функцию бесшовного клонирования cv2 для "
|
||||
"удаления экстремальных градиентов на шве маски путем сглаживания цветов. "
|
||||
"Обычно дает не очень удовлетворительные результаты.\n"
|
||||
"L|none: Не выполнять коррекцию цвета."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:527
|
||||
msgid ""
|
||||
"R|Masker to use. NB: The mask you require must exist within the alignments "
|
||||
"file. You can add additional masks with the Mask Tool.\n"
|
||||
"L|none: Don't use a mask.\n"
|
||||
"L|bisenet-fp_face: Relatively lightweight NN based mask that provides more "
|
||||
"refined control over the area to be masked (configurable in mask settings). "
|
||||
"Use this version of bisenet-fp if your model is trained with 'face' or "
|
||||
"'legacy' centering.\n"
|
||||
"L|bisenet-fp_head: Relatively lightweight NN based mask that provides more "
|
||||
"refined control over the area to be masked (configurable in mask settings). "
|
||||
"Use this version of bisenet-fp if your model is trained with 'head' "
|
||||
"centering.\n"
|
||||
"L|custom_face: Custom user created, face centered mask.\n"
|
||||
"L|custom_head: Custom user created, head centered mask.\n"
|
||||
"L|components: Mask designed to provide facial segmentation based on the "
|
||||
"positioning of landmark locations. A convex hull is constructed around the "
|
||||
"exterior of the landmarks to create a mask.\n"
|
||||
"L|extended: Mask designed to provide facial segmentation based on the "
|
||||
"positioning of landmark locations. A convex hull is constructed around the "
|
||||
"exterior of the landmarks and the mask is extended upwards onto the "
|
||||
"forehead.\n"
|
||||
"L|vgg-clear: Mask designed to provide smart segmentation of mostly frontal "
|
||||
"faces clear of obstructions. Profile faces and obstructions may result in "
|
||||
"sub-par performance.\n"
|
||||
"L|vgg-obstructed: Mask designed to provide smart segmentation of mostly "
|
||||
"frontal faces. The mask model has been specifically trained to recognize "
|
||||
"some facial obstructions (hands and eyeglasses). Profile faces may result in "
|
||||
"sub-par performance.\n"
|
||||
"L|unet-dfl: Mask designed to provide smart segmentation of mostly frontal "
|
||||
"faces. The mask model has been trained by community members and will need "
|
||||
"testing for further description. Profile faces may result in sub-par "
|
||||
"performance.\n"
|
||||
"L|predicted: If the 'Learn Mask' option was enabled during training, this "
|
||||
"will use the mask that was created by the trained model."
|
||||
msgstr ""
|
||||
"R|Маскер для использования. Примечание: Нужная маска должна существовать в "
|
||||
"файле выравнивания. Вы можете добавить дополнительные маски с помощью "
|
||||
"инструмента Mask Tool.\n"
|
||||
"L|none: Не использовать маску.\n"
|
||||
"L|bisenet-fp_face: Относительно легкая маска на основе NN, которая "
|
||||
"обеспечивает более точный контроль над маскируемой областью (настраивается в "
|
||||
"настройках маски). Используйте эту версию bisenet-fp, если ваша модель "
|
||||
"обучена с центрированием 'face' или 'legacy'.\n"
|
||||
"L|bisenet-fp_head: Относительно легкая маска на основе NN, которая "
|
||||
"обеспечивает более точный контроль над маскируемой областью (настраивается в "
|
||||
"настройках маски). Используйте эту версию bisenet-fp, если ваша модель "
|
||||
"обучена с центрированием по \"голове\".\n"
|
||||
"L|custom_face: Пользовательская маска, созданная пользователем и "
|
||||
"центрированная по лицу.\n"
|
||||
"L|custom_head: Созданная пользователем маска, центрированная по голове.\n"
|
||||
"L|components: Маска, разработанная для сегментации лица на основе "
|
||||
"расположения ориентиров. Для создания маски вокруг внешних ориентиров "
|
||||
"строится выпуклая оболочка.\n"
|
||||
"L|extended: Маска, предназначенная для сегментации лица на основе "
|
||||
"расположения ориентиров. Выпуклый корпус строится вокруг внешних ориентиров, "
|
||||
"и маска расширяется вверх на лоб.\n"
|
||||
"L|vgg-clear: Маска предназначена для интеллектуальной сегментации "
|
||||
"преимущественно фронтальных лиц без препятствий. Профильные лица и "
|
||||
"препятствия могут привести к снижению производительности.\n"
|
||||
"L|vgg-obstructed: Маска, разработанная для интеллектуальной сегментации "
|
||||
"преимущественно фронтальных лиц. Модель маски была специально обучена "
|
||||
"распознавать некоторые препятствия на лице (руки и очки). Лица в профиль "
|
||||
"могут иметь низкую производительность.\n"
|
||||
"L|unet-dfl: Маска, разработанная для интеллектуальной сегментации "
|
||||
"преимущественно фронтальных лиц. Модель маски была обучена членами "
|
||||
"сообщества и для дальнейшего описания нуждается в тестировании. Профильные "
|
||||
"лица могут привести к низкой производительности.\n"
|
||||
"L|predicted: Если во время обучения была включена опция 'Изучить Маску', то "
|
||||
"будет использоваться маска, созданная обученной моделью."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:566
|
||||
msgid ""
|
||||
"R|The plugin to use to output the converted images. The writers are "
|
||||
"configurable in '/config/convert.ini' or 'Settings > Configure Convert "
|
||||
"Plugins:'\n"
|
||||
"L|ffmpeg: [video] Writes out the convert straight to video. When the input "
|
||||
"is a series of images then the '-ref' (--reference-video) parameter must be "
|
||||
"set.\n"
|
||||
"L|gif: [animated image] Create an animated gif.\n"
|
||||
"L|opencv: [images] The fastest image writer, but less options and formats "
|
||||
"than other plugins.\n"
|
||||
"L|patch: [images] Outputs the raw swapped face patch, along with the "
|
||||
"transformation matrix required to re-insert the face back into the original "
|
||||
"frame. Use this option if you wish to post-process and composite the final "
|
||||
"face within external tools.\n"
|
||||
"L|pillow: [images] Slower than opencv, but has more options and supports "
|
||||
"more formats."
|
||||
msgstr ""
|
||||
"R|Плагин, который нужно использовать для вывода преобразованных изображений. "
|
||||
"Записи настраиваются в '/config/convert.ini' или 'Настройки > Настроить "
|
||||
"плагины конвертации:'\n"
|
||||
"L|ffmpeg: [видео] Записывает конвертацию прямо в видео. Если на вход "
|
||||
"подается серия изображений, необходимо установить параметр '-ref' (--"
|
||||
"reference-video).\n"
|
||||
"L|gif: [анимированное изображение] Создает анимированный gif.\n"
|
||||
"L|opencv: [изображения] Самый быстрый редактор изображений, но имеет меньше "
|
||||
"опций и форматов, чем другие плагины.\n"
|
||||
"L|patch: [изображения] Выводит необработанный фрагмент измененного лица "
|
||||
"вместе с матрицей преобразования, необходимой для повторной вставки лица "
|
||||
"обратно в исходный кадр.\n"
|
||||
"L|pillow: [изображения] Медленнее, чем opencv, но имеет больше опций и "
|
||||
"поддерживает больше форматов."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:587 lib/cli/args_extract_convert.py:596
|
||||
#: lib/cli/args_extract_convert.py:707
|
||||
msgid "Frame Processing"
|
||||
msgstr "Обработка лиц"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:589
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Scale the final output frames by this amount. 100%% will output the frames "
|
||||
"at source dimensions. 50%% at half size 200%% at double size"
|
||||
msgstr ""
|
||||
"Масштабирование конечных выходных кадров на эту величину. 100%% выводит "
|
||||
"кадры в исходном размере. 50%% при половинном размере 200%% при двойном "
|
||||
"размере"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:598
|
||||
msgid ""
|
||||
"Frame ranges to apply transfer to e.g. For frames 10 to 50 and 90 to 100 use "
|
||||
"--frame-ranges 10-50 90-100. Frames falling outside of the selected range "
|
||||
"will be discarded unless '-k' (--keep-unchanged) is selected. NB: If you are "
|
||||
"converting from images, then the filenames must end with the frame-number!"
|
||||
msgstr ""
|
||||
"Диапазоны кадров для применения переноса, например, для кадров с 10 по 50 и "
|
||||
"с 90 по 100 используйте --frame-ranges 10-50 90-100. Кадры, выходящие за "
|
||||
"пределы выбранного диапазона, будут отброшены, если не выбрана опция '-k' (--"
|
||||
"keep-unchanged). Примечание: Если вы конвертируете из изображений, то имена "
|
||||
"файлов должны заканчиваться номером кадра!"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:612
|
||||
msgid ""
|
||||
"Scale the swapped face by this percentage. Positive values will enlarge the "
|
||||
"face, Negative values will shrink the face."
|
||||
msgstr ""
|
||||
"Увеличить масштаб нового лица на этот процент. Положительные значения "
|
||||
"увеличат лицо, в то время как отрицательные значения уменьшат его."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:621
|
||||
msgid ""
|
||||
"If you have not cleansed your alignments file, then you can filter out faces "
|
||||
"by defining a folder here that contains the faces extracted from your input "
|
||||
"files/video. If this folder is defined, then only faces that exist within "
|
||||
"your alignments file and also exist within the specified folder will be "
|
||||
"converted. Leaving this blank will convert all faces that exist within the "
|
||||
"alignments file."
|
||||
msgstr ""
|
||||
"Если вы не очистили свой файл выравнивания, то вы можете отфильтровать лица, "
|
||||
"определив здесь папку, содержащую лица, извлеченные из ваших входных файлов/"
|
||||
"видео. Если эта папка определена, то будут преобразованы только те лица, "
|
||||
"которые существуют в вашем файле выравнивания, а также в указанной папке. "
|
||||
"Если оставить этот параметр пустым, будут преобразованы все лица, "
|
||||
"существующие в файле выравнивания."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:636
|
||||
msgid ""
|
||||
"Optionally filter out people who you do not wish to process by passing in an "
|
||||
"image of that person. Should be a front portrait with a single person in the "
|
||||
"image. Multiple images can be added space separated. NB: Using face filter "
|
||||
"will significantly decrease extraction speed and its accuracy cannot be "
|
||||
"guaranteed."
|
||||
msgstr ""
|
||||
"По желанию отфильтровать людей, которых вы не хотите обрабатывать, передав "
|
||||
"изображение этого человека. Это должен быть фронтальный портрет с "
|
||||
"изображением одного человека. Можно добавить несколько изображений, "
|
||||
"разделенных пробелами. Примечание: Использование фильтра лиц значительно "
|
||||
"снизит скорость извлечения, а его точность не гарантируется."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:649
|
||||
msgid ""
|
||||
"Optionally select people you wish to process by passing in an image of that "
|
||||
"person. Should be a front portrait with a single person in the image. "
|
||||
"Multiple images can be added space separated. NB: Using face filter will "
|
||||
"significantly decrease extraction speed and its accuracy cannot be "
|
||||
"guaranteed."
|
||||
msgstr ""
|
||||
"По желанию выберите людей, которых вы хотите обработать, передав изображение "
|
||||
"этого человека. Это должен быть фронтальный портрет с изображением одного "
|
||||
"человека. Можно добавить несколько изображений, разделенных пробелами. "
|
||||
"Примечание: Использование фильтра лиц значительно снизит скорость "
|
||||
"извлечения, а его точность не гарантируется."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:663
|
||||
msgid ""
|
||||
"For use with the optional nfilter/filter files. Threshold for positive face "
|
||||
"recognition. Lower values are stricter. NB: Using face filter will "
|
||||
"significantly decrease extraction speed and its accuracy cannot be "
|
||||
"guaranteed."
|
||||
msgstr ""
|
||||
"Для использования с дополнительными файлами nfilter/filter. Порог для "
|
||||
"положительного распознавания лиц. Более низкие значения являются более "
|
||||
"строгими. Примечание: Использование фильтра лиц значительно снизит скорость "
|
||||
"извлечения, а его точность не гарантируется."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:676
|
||||
msgid ""
|
||||
"The maximum number of parallel processes for performing conversion. "
|
||||
"Converting images is system RAM heavy so it is possible to run out of memory "
|
||||
"if you have a lot of processes and not enough RAM to accommodate them all. "
|
||||
"Setting this to 0 will use the maximum available. No matter what you set "
|
||||
"this to, it will never attempt to use more processes than are available on "
|
||||
"your system. If singleprocess is enabled this setting will be ignored."
|
||||
msgstr ""
|
||||
"Максимальное количество параллельных процессов для выполнения конвертации. "
|
||||
"Конвертирование изображений занимает много системной оперативной памяти, "
|
||||
"поэтому может закончиться память, если у вас много процессов и недостаточно "
|
||||
"оперативной памяти для их размещения. Если установить значение 0, будет "
|
||||
"использован максимум доступной памяти. Независимо от того, какое значение вы "
|
||||
"установите, программа никогда не будет пытаться использовать больше "
|
||||
"процессов, чем доступно в вашей системе. Если включена однопоточная "
|
||||
"обработка, этот параметр будет проигнорирован."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:688
|
||||
msgid ""
|
||||
"[LEGACY] This only needs to be selected if a legacy model is being loaded or "
|
||||
"if there are multiple models in the model folder"
|
||||
msgstr ""
|
||||
"[ОТБРОШЕН] Этот параметр необходимо выбрать только в том случае, если "
|
||||
"загружается устаревшая модель или если в папке моделей имеется несколько "
|
||||
"моделей"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:697
|
||||
msgid ""
|
||||
"Enable On-The-Fly Conversion. NOT recommended. You should generate a clean "
|
||||
"alignments file for your destination video. However, if you wish you can "
|
||||
"generate the alignments on-the-fly by enabling this option. This will use an "
|
||||
"inferior extraction pipeline and will lead to substandard results. If an "
|
||||
"alignments file is found, this option will be ignored."
|
||||
msgstr ""
|
||||
"Включить преобразование \"на лету\". НЕ рекомендуется. Вы должны "
|
||||
"сгенерировать чистый файл выравнивания для конечного видео. Однако при "
|
||||
"желании вы можете генерировать выравнивания \"на лету\", включив эту опцию. "
|
||||
"При этом будет использоваться некачественный конвейер извлечения, что "
|
||||
"приведет к некачественным результатам. Если файл выравнивания найден, этот "
|
||||
"параметр будет проигнорирован."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:709
|
||||
msgid ""
|
||||
"When used with --frame-ranges outputs the unchanged frames that are not "
|
||||
"processed instead of discarding them."
|
||||
msgstr ""
|
||||
"При использовании с --frame-ranges выводит неизмененные кадры, которые не "
|
||||
"были обработаны, вместо того, чтобы отбрасывать их."
|
||||
|
||||
#: lib/cli/args_extract_convert.py:717
|
||||
msgid "Swap the model. Instead converting from of A -> B, converts B -> A"
|
||||
msgstr ""
|
||||
"Поменять модель местами. Вместо преобразования из A -> B, преобразуется B -> "
|
||||
"A"
|
||||
|
||||
#: lib/cli/args_extract_convert.py:723
|
||||
msgid "Disable multiprocessing. Slower but less resource intensive."
|
||||
msgstr "Отключение многопоточной обработки. Медленнее, но менее ресурсоемко."
|
BIN
locales/ru/LC_MESSAGES/lib.cli.args_train.mo
Normal file
BIN
locales/ru/LC_MESSAGES/lib.cli.args_train.mo
Normal file
Binary file not shown.
1045
locales/ru/LC_MESSAGES/lib.cli.args_train.po
Executable file
1045
locales/ru/LC_MESSAGES/lib.cli.args_train.po
Executable file
File diff suppressed because it is too large
Load diff
Binary file not shown.
|
@ -7,8 +7,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-02-24 00:27+0000\n"
|
||||
"PO-Revision-Date: 2023-04-11 15:11+0700\n"
|
||||
"POT-Creation-Date: 2024-03-28 23:49+0000\n"
|
||||
"PO-Revision-Date: 2024-03-29 00:08+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: ru\n"
|
||||
|
@ -17,16 +17,16 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n"
|
||||
"X-Generator: Poedit 3.2.2\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#: tools/alignments/cli.py:17
|
||||
#: tools/alignments/cli.py:16
|
||||
msgid ""
|
||||
"This command lets you perform various tasks pertaining to an alignments file."
|
||||
msgstr ""
|
||||
"Эта команда позволяет выполнять различные задачи, относящиеся к файлу "
|
||||
"выравнивания."
|
||||
|
||||
#: tools/alignments/cli.py:32
|
||||
#: tools/alignments/cli.py:31
|
||||
msgid ""
|
||||
"Alignments tool\n"
|
||||
"This tool allows you to perform numerous actions on or using an alignments "
|
||||
|
@ -37,15 +37,15 @@ msgstr ""
|
|||
"выравнивания или с его использованием против соответствующего набора лиц/"
|
||||
"кадров."
|
||||
|
||||
#: tools/alignments/cli.py:44
|
||||
#: tools/alignments/cli.py:43
|
||||
msgid " Must Pass in a frames folder/source video file (-fr)."
|
||||
msgstr " Должен проходить в папке с кадрами/исходным видеофайлом (-fr)."
|
||||
|
||||
#: tools/alignments/cli.py:45
|
||||
#: tools/alignments/cli.py:44
|
||||
msgid " Must Pass in a faces folder (-fc)."
|
||||
msgstr " Должен проходить в папке с лицами (-fc)."
|
||||
|
||||
#: tools/alignments/cli.py:46
|
||||
#: tools/alignments/cli.py:45
|
||||
msgid ""
|
||||
" Must Pass in either a frames folder/source video file OR a faces folder (-"
|
||||
"fr or -fc)."
|
||||
|
@ -53,7 +53,7 @@ msgstr ""
|
|||
" Должно передаваться либо в папку с кадрами/исходным видеофайлом, либо в "
|
||||
"папку с лицами (-fr или -fc)."
|
||||
|
||||
#: tools/alignments/cli.py:48
|
||||
#: tools/alignments/cli.py:47
|
||||
msgid ""
|
||||
" Must Pass in a frames folder/source video file AND a faces folder (-fr and -"
|
||||
"fc)."
|
||||
|
@ -61,11 +61,11 @@ msgstr ""
|
|||
" Должно передаваться либо в папку с кадрами/исходным видеофайлом И в папку с "
|
||||
"лицами (-fr и -fc)."
|
||||
|
||||
#: tools/alignments/cli.py:50
|
||||
#: tools/alignments/cli.py:49
|
||||
msgid " Use the output option (-o) to process results."
|
||||
msgstr " Используйте опцию вывода (-o) для обработки результатов."
|
||||
|
||||
#: tools/alignments/cli.py:58 tools/alignments/cli.py:97
|
||||
#: tools/alignments/cli.py:57 tools/alignments/cli.py:97
|
||||
msgid "processing"
|
||||
msgstr "обработка"
|
||||
|
||||
|
@ -139,7 +139,7 @@ msgstr ""
|
|||
"L|'spatial': Выполнить пространственную и временную фильтрацию для "
|
||||
"сглаживания выравниваний (ЭКСПЕРИМЕНТАЛЬНО!)."
|
||||
|
||||
#: tools/alignments/cli.py:99
|
||||
#: tools/alignments/cli.py:100
|
||||
msgid ""
|
||||
"R|How to output discovered items ('faces' and 'frames' only):\n"
|
||||
"L|'console': Print the list of frames to the screen. (DEFAULT)\n"
|
||||
|
@ -154,12 +154,12 @@ msgstr ""
|
|||
"каталоге).\n"
|
||||
"L|'move': Переместить обнаруженные элементы в подпапку в исходном каталоге."
|
||||
|
||||
#: tools/alignments/cli.py:110 tools/alignments/cli.py:123
|
||||
#: tools/alignments/cli.py:130 tools/alignments/cli.py:137
|
||||
#: tools/alignments/cli.py:111 tools/alignments/cli.py:134
|
||||
#: tools/alignments/cli.py:141
|
||||
msgid "data"
|
||||
msgstr "данные"
|
||||
|
||||
#: tools/alignments/cli.py:114
|
||||
#: tools/alignments/cli.py:118
|
||||
msgid ""
|
||||
"Full path to the alignments file to be processed. If you have input a "
|
||||
"'frames_dir' and don't provide this option, the process will try to find the "
|
||||
|
@ -173,15 +173,11 @@ msgstr ""
|
|||
"задания 'from-faces', когда файл выравнивания будет создан в указанной папке "
|
||||
"с лицами."
|
||||
|
||||
#: tools/alignments/cli.py:124
|
||||
msgid "Directory containing extracted faces."
|
||||
msgstr "Папка, содержащая извлеченные лица."
|
||||
|
||||
#: tools/alignments/cli.py:131
|
||||
#: tools/alignments/cli.py:135
|
||||
msgid "Directory containing source frames that faces were extracted from."
|
||||
msgstr "Папка, содержащая исходные кадры, из которых были извлечены лица."
|
||||
|
||||
#: tools/alignments/cli.py:138
|
||||
#: tools/alignments/cli.py:143
|
||||
msgid ""
|
||||
"R|Run the aligmnents tool on multiple sources. The following jobs support "
|
||||
"batch mode:\n"
|
||||
|
@ -224,12 +220,12 @@ msgstr ""
|
|||
"выравнивания должен существовать в месте по умолчанию. Для всех остальных "
|
||||
"заданий этот параметр игнорируется."
|
||||
|
||||
#: tools/alignments/cli.py:164 tools/alignments/cli.py:175
|
||||
#: tools/alignments/cli.py:185
|
||||
#: tools/alignments/cli.py:169 tools/alignments/cli.py:181
|
||||
#: tools/alignments/cli.py:191
|
||||
msgid "extract"
|
||||
msgstr "извлечение"
|
||||
|
||||
#: tools/alignments/cli.py:165
|
||||
#: tools/alignments/cli.py:171
|
||||
msgid ""
|
||||
"[Extract only] Extract every 'nth' frame. This option will skip frames when "
|
||||
"extracting faces. For example a value of 1 will extract faces from every "
|
||||
|
@ -239,11 +235,11 @@ msgstr ""
|
|||
"кадры при извлечении лиц. Например, значение 1 будет извлекать лица из "
|
||||
"каждого кадра, значение 10 будет извлекать лица из каждого 10-го кадра."
|
||||
|
||||
#: tools/alignments/cli.py:176
|
||||
#: tools/alignments/cli.py:182
|
||||
msgid "[Extract only] The output size of extracted faces."
|
||||
msgstr "[Только извлечение] Выходной размер извлеченных лиц."
|
||||
|
||||
#: tools/alignments/cli.py:186
|
||||
#: tools/alignments/cli.py:193
|
||||
msgid ""
|
||||
"[Extract only] Only extract faces that have been resized by this percent or "
|
||||
"more to meet the specified extract size (`-sz`, `--size`). Useful for "
|
||||
|
@ -262,3 +258,6 @@ msgstr ""
|
|||
"значении 100 будут извлечены только лица, размер которых был изменен с 512px "
|
||||
"или выше. При значении 200 будут извлечены только лица, уменьшенные с 1024px "
|
||||
"или выше."
|
||||
|
||||
#~ msgid "Directory containing extracted faces."
|
||||
#~ msgstr "Папка, содержащая извлеченные лица."
|
||||
|
|
Binary file not shown.
|
@ -5,8 +5,9 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"POT-Creation-Date: 2021-02-18 23:34-0000\n"
|
||||
"PO-Revision-Date: 2023-04-11 15:18+0700\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-03-28 23:50+0000\n"
|
||||
"PO-Revision-Date: 2024-03-29 00:08+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: ru\n"
|
||||
|
@ -16,17 +17,17 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
"X-Generator: Poedit 3.2.2\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#: tools/effmpeg/cli.py:15
|
||||
msgid "This command allows you to easily execute common ffmpeg tasks."
|
||||
msgstr "Эта команда позволяет легко выполнять общие задачи ffmpeg."
|
||||
|
||||
#: tools/effmpeg/cli.py:24
|
||||
#: tools/effmpeg/cli.py:52
|
||||
msgid "A wrapper for ffmpeg for performing image <> video converting."
|
||||
msgstr "Обертка для ffmpeg для выполнения конвертации изображений <> видео."
|
||||
|
||||
#: tools/effmpeg/cli.py:51
|
||||
#: tools/effmpeg/cli.py:64
|
||||
msgid ""
|
||||
"R|Choose which action you want ffmpeg ffmpeg to do.\n"
|
||||
"L|'extract': turns videos into images \n"
|
||||
|
@ -48,15 +49,15 @@ msgstr ""
|
|||
"L|'rotate' вращение видео.\n"
|
||||
"L|'slice' вырезает часть видео в отдельный видеофайл."
|
||||
|
||||
#: tools/effmpeg/cli.py:65
|
||||
#: tools/effmpeg/cli.py:78
|
||||
msgid "Input file."
|
||||
msgstr "Входной файл."
|
||||
|
||||
#: tools/effmpeg/cli.py:66 tools/effmpeg/cli.py:73 tools/effmpeg/cli.py:87
|
||||
#: tools/effmpeg/cli.py:79 tools/effmpeg/cli.py:86 tools/effmpeg/cli.py:100
|
||||
msgid "data"
|
||||
msgstr "данные"
|
||||
|
||||
#: tools/effmpeg/cli.py:76
|
||||
#: tools/effmpeg/cli.py:89
|
||||
msgid ""
|
||||
"Output file. If no output is specified then: if the output is meant to be a "
|
||||
"video then a video called 'out.mkv' will be created in the input directory; "
|
||||
|
@ -70,16 +71,16 @@ msgstr ""
|
|||
"создан каталог с именем 'out'. Примечание: выбранное расширение выходного "
|
||||
"файла определяет кодировку файла."
|
||||
|
||||
#: tools/effmpeg/cli.py:89
|
||||
#: tools/effmpeg/cli.py:102
|
||||
msgid "Path to reference video if 'input' was not a video."
|
||||
msgstr "Путь к опорному видео, если 'input' не является видео."
|
||||
|
||||
#: tools/effmpeg/cli.py:95 tools/effmpeg/cli.py:105 tools/effmpeg/cli.py:142
|
||||
#: tools/effmpeg/cli.py:171
|
||||
#: tools/effmpeg/cli.py:108 tools/effmpeg/cli.py:118 tools/effmpeg/cli.py:156
|
||||
#: tools/effmpeg/cli.py:185
|
||||
msgid "output"
|
||||
msgstr "выход"
|
||||
|
||||
#: tools/effmpeg/cli.py:97
|
||||
#: tools/effmpeg/cli.py:110
|
||||
msgid ""
|
||||
"Provide video fps. Can be an integer, float or fraction. Negative values "
|
||||
"will will make the program try to get the fps from the input or reference "
|
||||
|
@ -89,7 +90,7 @@ msgstr ""
|
|||
"плавающей цифрой или дробью. Отрицательные значения заставят программу "
|
||||
"попытаться получить fps из входного или опорного видео."
|
||||
|
||||
#: tools/effmpeg/cli.py:107
|
||||
#: tools/effmpeg/cli.py:120
|
||||
msgid ""
|
||||
"Image format that extracted images should be saved as. '.bmp' will offer the "
|
||||
"fastest extraction speed, but will take the most storage space. '.png' will "
|
||||
|
@ -99,11 +100,11 @@ msgstr ""
|
|||
"'.bmp' обеспечивает самую высокую скорость извлечения, но занимает больше "
|
||||
"всего места в памяти. '.png' будет медленнее, но займет меньше места."
|
||||
|
||||
#: tools/effmpeg/cli.py:114 tools/effmpeg/cli.py:123 tools/effmpeg/cli.py:132
|
||||
#: tools/effmpeg/cli.py:127 tools/effmpeg/cli.py:136 tools/effmpeg/cli.py:145
|
||||
msgid "clip"
|
||||
msgstr "клип"
|
||||
|
||||
#: tools/effmpeg/cli.py:116
|
||||
#: tools/effmpeg/cli.py:129
|
||||
msgid ""
|
||||
"Enter the start time from which an action is to be applied. Default: "
|
||||
"00:00:00, in HH:MM:SS format. You can also enter the time with or without "
|
||||
|
@ -113,7 +114,7 @@ msgstr ""
|
|||
"00:00:00, в формате ЧЧ:ММ:СС. Вы также можете ввести время с двоеточием или "
|
||||
"без него, например, 00:0000 или 026010."
|
||||
|
||||
#: tools/effmpeg/cli.py:125
|
||||
#: tools/effmpeg/cli.py:138
|
||||
msgid ""
|
||||
"Enter the end time to which an action is to be applied. If both an end time "
|
||||
"and duration are set, then the end time will be used and the duration will "
|
||||
|
@ -124,7 +125,7 @@ msgstr ""
|
|||
"окончания, а продолжительность будет игнорироваться. По умолчанию: 00:00:00, "
|
||||
"в формате ЧЧ:ММ:СС."
|
||||
|
||||
#: tools/effmpeg/cli.py:134
|
||||
#: tools/effmpeg/cli.py:147
|
||||
msgid ""
|
||||
"Enter the duration of the chosen action, for example if you enter 00:00:10 "
|
||||
"for slice, then the first 10 seconds after and including the start time will "
|
||||
|
@ -137,7 +138,7 @@ msgstr ""
|
|||
"СС. Вы также можете ввести время с двоеточием или без него, например, "
|
||||
"00:0000 или 026010."
|
||||
|
||||
#: tools/effmpeg/cli.py:144
|
||||
#: tools/effmpeg/cli.py:158
|
||||
msgid ""
|
||||
"Mux the audio from the reference video into the input video. This option is "
|
||||
"only used for the 'gen-vid' action. 'mux-audio' action has this turned on "
|
||||
|
@ -146,11 +147,11 @@ msgstr ""
|
|||
"Mux аудио из опорного видео во входное видео. Эта опция используется только "
|
||||
"для действия 'gen-vid'. Действие 'mux-audio' включает эту опцию неявно."
|
||||
|
||||
#: tools/effmpeg/cli.py:155 tools/effmpeg/cli.py:165
|
||||
#: tools/effmpeg/cli.py:169 tools/effmpeg/cli.py:179
|
||||
msgid "rotate"
|
||||
msgstr "поворот"
|
||||
|
||||
#: tools/effmpeg/cli.py:157
|
||||
#: tools/effmpeg/cli.py:171
|
||||
msgid ""
|
||||
"Transpose the video. If transpose is set, then degrees will be ignored. For "
|
||||
"cli you can enter either the number or the long command name, e.g. to use "
|
||||
|
@ -161,19 +162,19 @@ msgstr ""
|
|||
"длинное имя команды, например, для использования (1, 90 по часовой стрелке) -"
|
||||
"tr 1 или -tr 90 по часовой стрелке"
|
||||
|
||||
#: tools/effmpeg/cli.py:166
|
||||
#: tools/effmpeg/cli.py:180
|
||||
msgid "Rotate the video clockwise by the given number of degrees."
|
||||
msgstr "Поверните видео по часовой стрелке на заданное количество градусов."
|
||||
|
||||
#: tools/effmpeg/cli.py:173
|
||||
#: tools/effmpeg/cli.py:187
|
||||
msgid "Set the new resolution scale if the chosen action is 'rescale'."
|
||||
msgstr "Установите новый масштаб разрешения, если выбрано действие 'rescale'."
|
||||
|
||||
#: tools/effmpeg/cli.py:178 tools/effmpeg/cli.py:186
|
||||
#: tools/effmpeg/cli.py:192 tools/effmpeg/cli.py:200
|
||||
msgid "settings"
|
||||
msgstr "настройки"
|
||||
|
||||
#: tools/effmpeg/cli.py:180
|
||||
#: tools/effmpeg/cli.py:194
|
||||
msgid ""
|
||||
"Reduces output verbosity so that only serious errors are printed. If both "
|
||||
"quiet and verbose are set, verbose will override quiet."
|
||||
|
@ -181,7 +182,7 @@ msgstr ""
|
|||
"Уменьшает многословность вывода, чтобы выводились только серьезные ошибки. "
|
||||
"Если заданы и quiet, и verbose, то verbose будет преобладать над quiet."
|
||||
|
||||
#: tools/effmpeg/cli.py:188
|
||||
#: tools/effmpeg/cli.py:202
|
||||
msgid ""
|
||||
"Increases output verbosity. If both quiet and verbose are set, verbose will "
|
||||
"override quiet."
|
||||
|
|
Binary file not shown.
|
@ -5,8 +5,9 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"POT-Creation-Date: 2022-11-24 14:17+0900\n"
|
||||
"PO-Revision-Date: 2023-04-11 15:30+0700\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-03-28 23:55+0000\n"
|
||||
"PO-Revision-Date: 2024-03-29 00:07+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: ru\n"
|
||||
|
@ -16,9 +17,9 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
"X-Generator: Poedit 3.2.2\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#: tools/manual\cli.py:13
|
||||
#: tools/manual/cli.py:13
|
||||
msgid ""
|
||||
"This command lets you perform various actions on frames, faces and "
|
||||
"alignments files using visual tools."
|
||||
|
@ -26,7 +27,7 @@ msgstr ""
|
|||
"Эта команда позволяет выполнять различные действия с кадрами, гранями и "
|
||||
"файлами выравнивания с помощью визуальных инструментов."
|
||||
|
||||
#: tools/manual\cli.py:23
|
||||
#: tools/manual/cli.py:23
|
||||
msgid ""
|
||||
"A tool to perform various actions on frames, faces and alignments files "
|
||||
"using visual tools"
|
||||
|
@ -34,18 +35,18 @@ msgstr ""
|
|||
"Инструмент для выполнения различных действий с кадрами, лицами и файлами "
|
||||
"выравнивания с помощью визуальных инструментов"
|
||||
|
||||
#: tools/manual\cli.py:35 tools/manual\cli.py:43
|
||||
#: tools/manual/cli.py:35 tools/manual/cli.py:44
|
||||
msgid "data"
|
||||
msgstr "данные"
|
||||
|
||||
#: tools/manual\cli.py:37
|
||||
#: tools/manual/cli.py:38
|
||||
msgid ""
|
||||
"Path to the alignments file for the input, if not at the default location"
|
||||
msgstr ""
|
||||
"Путь к файлу выравниваний для входных данных, если он не находится в месте "
|
||||
"по умолчанию"
|
||||
|
||||
#: tools/manual\cli.py:44
|
||||
#: tools/manual/cli.py:46
|
||||
msgid ""
|
||||
"Video file or directory containing source frames that faces were extracted "
|
||||
"from."
|
||||
|
@ -53,11 +54,11 @@ msgstr ""
|
|||
"Видеофайл или папка, содержащая исходные кадры, из которых были извлечены "
|
||||
"лица."
|
||||
|
||||
#: tools/manual\cli.py:51 tools/manual\cli.py:59
|
||||
#: tools/manual/cli.py:53 tools/manual/cli.py:62
|
||||
msgid "options"
|
||||
msgstr "опции"
|
||||
|
||||
#: tools/manual\cli.py:52
|
||||
#: tools/manual/cli.py:55
|
||||
msgid ""
|
||||
"Force regeneration of the low resolution jpg thumbnails in the alignments "
|
||||
"file."
|
||||
|
@ -65,7 +66,7 @@ msgstr ""
|
|||
"Принудительное восстановление миниатюр jpg низкого разрешения в файле "
|
||||
"выравнивания."
|
||||
|
||||
#: tools/manual\cli.py:60
|
||||
#: tools/manual/cli.py:64
|
||||
msgid ""
|
||||
"The process attempts to speed up generation of thumbnails by extracting from "
|
||||
"the video in parallel threads. For some videos, this causes the caching "
|
||||
|
|
Binary file not shown.
|
@ -7,8 +7,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-03-11 23:45+0000\n"
|
||||
"PO-Revision-Date: 2024-03-11 23:50+0000\n"
|
||||
"POT-Creation-Date: 2024-03-28 23:51+0000\n"
|
||||
"PO-Revision-Date: 2024-03-29 00:07+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: ru\n"
|
||||
|
|
Binary file not shown.
|
@ -7,8 +7,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-06-28 14:05+0100\n"
|
||||
"PO-Revision-Date: 2023-04-11 16:02+0700\n"
|
||||
"POT-Creation-Date: 2024-03-28 23:51+0000\n"
|
||||
"PO-Revision-Date: 2024-03-29 00:07+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: ru\n"
|
||||
|
@ -17,7 +17,7 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n"
|
||||
"X-Generator: Poedit 3.2.2\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#: tools/model/cli.py:13
|
||||
msgid "This tool lets you perform actions on saved Faceswap models."
|
||||
|
@ -30,7 +30,7 @@ msgid "A tool for performing actions on Faceswap trained model files"
|
|||
msgstr ""
|
||||
"Инструмент для выполнения действий над файлами обученных моделей Faceswap"
|
||||
|
||||
#: tools/model/cli.py:33
|
||||
#: tools/model/cli.py:34
|
||||
msgid ""
|
||||
"Model directory. A directory containing the model you wish to perform an "
|
||||
"action on."
|
||||
|
@ -38,7 +38,7 @@ msgstr ""
|
|||
"Папка модели. Папка, содержащая модель, над которой вы хотите выполнить "
|
||||
"действие."
|
||||
|
||||
#: tools/model/cli.py:41
|
||||
#: tools/model/cli.py:43
|
||||
msgid ""
|
||||
"R|Choose which action you want to perform.\n"
|
||||
"L|'inference' - Create an inference only copy of the model. Strips any "
|
||||
|
@ -50,20 +50,20 @@ msgid ""
|
|||
"L|'restore' - Restore a model from backup."
|
||||
msgstr ""
|
||||
"R|Выберите действие, которое вы хотите выполнить.\n"
|
||||
"L|'inference' - Создать копию модели только для проведения расчетов. "
|
||||
"Удаляет из модели все слои, которые нужны только для обучения. Примечание: "
|
||||
"Эта функция предназначена для экспорта модели для использования во внешних "
|
||||
"приложениях. Модели, созданные в режиме вывода, не могут быть использованы "
|
||||
"в Faceswap. См. опцию 'format' для указания формата вывода модели.\n"
|
||||
"L|'inference' - Создать копию модели только для проведения расчетов. Удаляет "
|
||||
"из модели все слои, которые нужны только для обучения. Примечание: Эта "
|
||||
"функция предназначена для экспорта модели для использования во внешних "
|
||||
"приложениях. Модели, созданные в режиме вывода, не могут быть использованы в "
|
||||
"Faceswap. См. опцию 'format' для указания формата вывода модели.\n"
|
||||
"L|'nan-scan' - Проверить файл модели на наличие NaNs или Infs (недопустимых "
|
||||
"данных).\n"
|
||||
"L|'restore' - Восстановить модель из резервной копии."
|
||||
|
||||
#: tools/model/cli.py:55 tools/model/cli.py:66
|
||||
#: tools/model/cli.py:57 tools/model/cli.py:69
|
||||
msgid "inference"
|
||||
msgstr "вывод"
|
||||
|
||||
#: tools/model/cli.py:56
|
||||
#: tools/model/cli.py:59
|
||||
msgid ""
|
||||
"R|The format to save the model as. Note: Only used for 'inference' job.\n"
|
||||
"L|'h5' - Standard Keras H5 format. Does not store any custom layer "
|
||||
|
@ -79,10 +79,14 @@ msgstr ""
|
|||
"L|'saved-model' - формат сохраненной модели Tensorflow. Содержит всю "
|
||||
"информацию, необходимую для загрузки модели вне Faceswap."
|
||||
|
||||
#: tools/model/cli.py:67
|
||||
#: tools/model/cli.py:71
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Only used for 'inference' job. Generate the inference model for B -> A "
|
||||
#| "instead of A -> B."
|
||||
msgid ""
|
||||
"Only used for 'inference' job. Generate the inference model for B -> A "
|
||||
"Only used for 'inference' job. Generate the inference model for B -> A "
|
||||
"instead of A -> B."
|
||||
msgstr ""
|
||||
"Используется только для задания 'inference'. Создайте модель вывода для B -"
|
||||
"> A вместо A -> B."
|
||||
"Используется только для задания 'inference'. Создайте модель вывода для B -> "
|
||||
"A вместо A -> B."
|
||||
|
|
Binary file not shown.
|
@ -7,8 +7,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-01-16 12:27+0000\n"
|
||||
"PO-Revision-Date: 2023-04-11 16:06+0700\n"
|
||||
"POT-Creation-Date: 2024-03-28 23:53+0000\n"
|
||||
"PO-Revision-Date: 2024-03-29 00:06+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: ru\n"
|
||||
|
@ -17,15 +17,15 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n"
|
||||
"X-Generator: Poedit 3.2.2\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#: tools/preview/cli.py:14
|
||||
#: tools/preview/cli.py:15
|
||||
msgid "This command allows you to preview swaps to tweak convert settings."
|
||||
msgstr ""
|
||||
"Эта команда позволяет просматривать замены для настройки параметров "
|
||||
"конвертирования."
|
||||
|
||||
#: tools/preview/cli.py:29
|
||||
#: tools/preview/cli.py:30
|
||||
msgid ""
|
||||
"Preview tool\n"
|
||||
"Allows you to configure your convert settings with a live preview"
|
||||
|
@ -34,11 +34,11 @@ msgstr ""
|
|||
"Позволяет настраивать параметры конвертации с помощью предварительного "
|
||||
"просмотра в реальном времени"
|
||||
|
||||
#: tools/preview/cli.py:46 tools/preview/cli.py:55 tools/preview/cli.py:62
|
||||
#: tools/preview/cli.py:47 tools/preview/cli.py:57 tools/preview/cli.py:65
|
||||
msgid "data"
|
||||
msgstr "данные"
|
||||
|
||||
#: tools/preview/cli.py:48
|
||||
#: tools/preview/cli.py:50
|
||||
msgid ""
|
||||
"Input directory or video. Either a directory containing the image files you "
|
||||
"wish to process or path to a video file."
|
||||
|
@ -46,14 +46,14 @@ msgstr ""
|
|||
"Входная папка или видео. Либо папка, содержащая файлы изображений, которые "
|
||||
"необходимо обработать, либо путь к видеофайлу."
|
||||
|
||||
#: tools/preview/cli.py:57
|
||||
#: tools/preview/cli.py:60
|
||||
msgid ""
|
||||
"Path to the alignments file for the input, if not at the default location"
|
||||
msgstr ""
|
||||
"Путь к файлу выравниваний для входных данных, если он не находится в месте "
|
||||
"по умолчанию"
|
||||
|
||||
#: tools/preview/cli.py:64
|
||||
#: tools/preview/cli.py:68
|
||||
msgid ""
|
||||
"Model directory. A directory containing the trained model you wish to "
|
||||
"process."
|
||||
|
@ -61,33 +61,33 @@ msgstr ""
|
|||
"Папка модели. Папка, содержащая обученную модель, которую вы хотите "
|
||||
"обработать."
|
||||
|
||||
#: tools/preview/cli.py:71
|
||||
#: tools/preview/cli.py:74
|
||||
msgid "Swap the model. Instead of A -> B, swap B -> A"
|
||||
msgstr "Поменять местами модели. Вместо A -> B заменить B -> A"
|
||||
|
||||
#: tools/preview/control_panels.py:496
|
||||
#: tools/preview/control_panels.py:510
|
||||
msgid "Save full config"
|
||||
msgstr "Сохранить полную конфигурацию"
|
||||
|
||||
#: tools/preview/control_panels.py:499
|
||||
#: tools/preview/control_panels.py:513
|
||||
msgid "Reset full config to default values"
|
||||
msgstr "Сбросить полную конфигурацию до заводских значений"
|
||||
|
||||
#: tools/preview/control_panels.py:502
|
||||
#: tools/preview/control_panels.py:516
|
||||
msgid "Reset full config to saved values"
|
||||
msgstr "Сбросить полную конфигурацию до сохраненных значений"
|
||||
|
||||
#: tools/preview/control_panels.py:653
|
||||
#: tools/preview/control_panels.py:667
|
||||
#, python-brace-format
|
||||
msgid "Save {title} config"
|
||||
msgstr "Сохранить конфигурацию {title}"
|
||||
|
||||
#: tools/preview/control_panels.py:656
|
||||
#: tools/preview/control_panels.py:670
|
||||
#, python-brace-format
|
||||
msgid "Reset {title} config to default values"
|
||||
msgstr "Сбросить полную конфигурацию {title} до заводских значений"
|
||||
|
||||
#: tools/preview/control_panels.py:659
|
||||
#: tools/preview/control_panels.py:673
|
||||
#, python-brace-format
|
||||
msgid "Reset {title} config to saved values"
|
||||
msgstr "Сбросить полную конфигурацию {title} до сохраненных значений"
|
||||
|
|
Binary file not shown.
|
@ -7,8 +7,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-11-24 14:19+0900\n"
|
||||
"PO-Revision-Date: 2023-04-11 16:24+0700\n"
|
||||
"POT-Creation-Date: 2024-03-28 23:53+0000\n"
|
||||
"PO-Revision-Date: 2024-03-29 00:06+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: ru\n"
|
||||
|
@ -17,20 +17,20 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n"
|
||||
"X-Generator: Poedit 3.2.2\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#: tools/sort/cli.py:14
|
||||
#: tools/sort/cli.py:15
|
||||
msgid "This command lets you sort images using various methods."
|
||||
msgstr "Эта команда позволяет сортировать изображения различными методами."
|
||||
|
||||
#: tools/sort/cli.py:20
|
||||
#: tools/sort/cli.py:21
|
||||
msgid ""
|
||||
" Adjust the '-t' ('--threshold') parameter to control the strength of "
|
||||
"grouping."
|
||||
msgstr ""
|
||||
" Настройте параметр '-t' ('--threshold') для контроля силы группировки."
|
||||
|
||||
#: tools/sort/cli.py:21
|
||||
#: tools/sort/cli.py:22
|
||||
msgid ""
|
||||
" Adjust the '-b' ('--bins') parameter to control the number of bins for "
|
||||
"grouping. Each image is allocated to a bin by the percentage of color pixels "
|
||||
|
@ -40,7 +40,7 @@ msgstr ""
|
|||
"группировки. Каждое изображение распределяется по корзинкам в зависимости от "
|
||||
"процента цветных пикселей, присутствующих в изображении."
|
||||
|
||||
#: tools/sort/cli.py:24
|
||||
#: tools/sort/cli.py:25
|
||||
msgid ""
|
||||
" Adjust the '-b' ('--bins') parameter to control the number of bins for "
|
||||
"grouping. Each image is allocated to a bin by the number of degrees the face "
|
||||
|
@ -50,7 +50,7 @@ msgstr ""
|
|||
"группировки. Каждое изображение распределяется по корзинам по количеству "
|
||||
"градусов, на которые лицо ориентировано от центра."
|
||||
|
||||
#: tools/sort/cli.py:27
|
||||
#: tools/sort/cli.py:28
|
||||
msgid ""
|
||||
" Adjust the '-b' ('--bins') parameter to control the number of bins for "
|
||||
"grouping. The minimum and maximum values are taken for the chosen sort "
|
||||
|
@ -61,15 +61,15 @@ msgstr ""
|
|||
"максимальное значения. Затем корзины заполняются результатами групповой "
|
||||
"сортировки."
|
||||
|
||||
#: tools/sort/cli.py:31
|
||||
#: tools/sort/cli.py:32
|
||||
msgid "faces by blurriness."
|
||||
msgstr "лица по размытости."
|
||||
|
||||
#: tools/sort/cli.py:32
|
||||
#: tools/sort/cli.py:33
|
||||
msgid "faces by fft filtered blurriness."
|
||||
msgstr "лица по размытости с фильтрацией fft."
|
||||
|
||||
#: tools/sort/cli.py:33
|
||||
#: tools/sort/cli.py:34
|
||||
msgid ""
|
||||
"faces by the estimated distance of the alignments from an 'average' face. "
|
||||
"This can be useful for eliminating misaligned faces. Sorts from most like an "
|
||||
|
@ -79,7 +79,7 @@ msgstr ""
|
|||
"быть полезно для устранения неправильно расположенных лиц. Сортирует от "
|
||||
"наиболее похожего на среднее лицо к наименее похожему на среднее лицо."
|
||||
|
||||
#: tools/sort/cli.py:36
|
||||
#: tools/sort/cli.py:37
|
||||
msgid ""
|
||||
"faces using VGG Face2 by face similarity. This uses a pairwise clustering "
|
||||
"algorithm to check the distances between 512 features on every face in your "
|
||||
|
@ -89,23 +89,23 @@ msgstr ""
|
|||
"парной кластеризации для проверки расстояний между 512 признаками на каждом "
|
||||
"лице в вашем наборе и их упорядочивания соответствующим образом."
|
||||
|
||||
#: tools/sort/cli.py:39
|
||||
#: tools/sort/cli.py:40
|
||||
msgid "faces by their landmarks."
|
||||
msgstr "лица по их ориентирам."
|
||||
|
||||
#: tools/sort/cli.py:40
|
||||
#: tools/sort/cli.py:41
|
||||
msgid "Like 'face-cnn' but sorts by dissimilarity."
|
||||
msgstr "Как 'face-cnn', но сортирует по непохожести."
|
||||
|
||||
#: tools/sort/cli.py:41
|
||||
#: tools/sort/cli.py:42
|
||||
msgid "faces by Yaw (rotation left to right)."
|
||||
msgstr "лица по Yaw (вращение слева направо)."
|
||||
|
||||
#: tools/sort/cli.py:42
|
||||
#: tools/sort/cli.py:43
|
||||
msgid "faces by Pitch (rotation up and down)."
|
||||
msgstr "лица по Pitch (вращение вверх и вниз)."
|
||||
|
||||
#: tools/sort/cli.py:43
|
||||
#: tools/sort/cli.py:44
|
||||
msgid ""
|
||||
"faces by Roll (rotation). Aligned faces should have a roll value close to "
|
||||
"zero. The further the Roll value from zero the higher liklihood the face is "
|
||||
|
@ -115,22 +115,22 @@ msgstr ""
|
|||
"близкое к нулю. Чем дальше значение Roll от нуля, тем выше вероятность того, "
|
||||
"что лицо неправильно выровнено."
|
||||
|
||||
#: tools/sort/cli.py:45
|
||||
#: tools/sort/cli.py:46
|
||||
msgid "faces by their color histogram."
|
||||
msgstr "лица по их цветовой гистограмме."
|
||||
|
||||
#: tools/sort/cli.py:46
|
||||
#: tools/sort/cli.py:47
|
||||
msgid "Like 'hist' but sorts by dissimilarity."
|
||||
msgstr "Как 'hist', но сортирует по непохожести."
|
||||
|
||||
#: tools/sort/cli.py:47
|
||||
#: tools/sort/cli.py:48
|
||||
msgid ""
|
||||
"images by the average intensity of the converted grayscale color channel."
|
||||
msgstr ""
|
||||
"изображения по средней интенсивности преобразованного полутонового цветового "
|
||||
"канала."
|
||||
|
||||
#: tools/sort/cli.py:48
|
||||
#: tools/sort/cli.py:49
|
||||
msgid ""
|
||||
"images by their number of black pixels. Useful when faces are near borders "
|
||||
"and a large part of the image is black."
|
||||
|
@ -138,7 +138,7 @@ msgstr ""
|
|||
"изображения по количеству черных пикселей. Полезно, когда лица находятся "
|
||||
"вблизи границ и большая часть изображения черная."
|
||||
|
||||
#: tools/sort/cli.py:50
|
||||
#: tools/sort/cli.py:51
|
||||
msgid ""
|
||||
"images by the average intensity of the converted Y color channel. Bright "
|
||||
"lighting and oversaturated images will be ranked first."
|
||||
|
@ -147,7 +147,7 @@ msgstr ""
|
|||
"Яркое освещение и перенасыщенные изображения будут ранжироваться в первую "
|
||||
"очередь."
|
||||
|
||||
#: tools/sort/cli.py:52
|
||||
#: tools/sort/cli.py:53
|
||||
msgid ""
|
||||
"images by the average intensity of the converted Cg color channel. Green "
|
||||
"images will be ranked first and red images will be last."
|
||||
|
@ -155,7 +155,7 @@ msgstr ""
|
|||
"изображений по средней интенсивности преобразованного цветового канала Cg. "
|
||||
"Зеленые изображения занимают первое место, а красные - последнее."
|
||||
|
||||
#: tools/sort/cli.py:54
|
||||
#: tools/sort/cli.py:55
|
||||
msgid ""
|
||||
"images by the average intensity of the converted Co color channel. Orange "
|
||||
"images will be ranked first and blue images will be last."
|
||||
|
@ -163,7 +163,7 @@ msgstr ""
|
|||
"изображений по средней интенсивности преобразованного цветового канала Co. "
|
||||
"Оранжевые изображения занимают первое место, а синие - последнее."
|
||||
|
||||
#: tools/sort/cli.py:56
|
||||
#: tools/sort/cli.py:57
|
||||
msgid ""
|
||||
"images by their size in the original frame. Faces further from the camera "
|
||||
"and from lower resolution sources will be sorted first, whilst faces closer "
|
||||
|
@ -174,24 +174,16 @@ msgstr ""
|
|||
"первыми, а лица, расположенные ближе к камере и полученные из источников с "
|
||||
"высоким разрешением, будут отсортированы последними."
|
||||
|
||||
#: tools/sort/cli.py:59
|
||||
msgid " option is deprecated. Use 'yaw'"
|
||||
msgstr " является устаревшей. Используйте 'yaw'"
|
||||
|
||||
#: tools/sort/cli.py:60
|
||||
msgid " option is deprecated. Use 'color-black'"
|
||||
msgstr " является устаревшей. Используйте 'color-black'"
|
||||
|
||||
#: tools/sort/cli.py:82
|
||||
#: tools/sort/cli.py:81
|
||||
msgid "Sort faces using a number of different techniques"
|
||||
msgstr "Сортировка лиц с использованием различных методов"
|
||||
|
||||
#: tools/sort/cli.py:92 tools/sort/cli.py:99 tools/sort/cli.py:110
|
||||
#: tools/sort/cli.py:148
|
||||
#: tools/sort/cli.py:91 tools/sort/cli.py:98 tools/sort/cli.py:110
|
||||
#: tools/sort/cli.py:150
|
||||
msgid "data"
|
||||
msgstr "данные"
|
||||
|
||||
#: tools/sort/cli.py:93
|
||||
#: tools/sort/cli.py:92
|
||||
msgid "Input directory of aligned faces."
|
||||
msgstr "Входная папка соотнесенных лиц."
|
||||
|
||||
|
@ -209,7 +201,7 @@ msgstr ""
|
|||
"'keep', то изображения будут отсортированы на месте, перезаписывая исходное "
|
||||
"содержимое 'input_dir'."
|
||||
|
||||
#: tools/sort/cli.py:111
|
||||
#: tools/sort/cli.py:112
|
||||
msgid ""
|
||||
"R|If selected then the input_dir should be a parent folder containing "
|
||||
"multiple folders of faces you wish to sort. The faces will be output to "
|
||||
|
@ -219,11 +211,11 @@ msgstr ""
|
|||
"несколько папок с лицами, которые вы хотите отсортировать. Лица будут "
|
||||
"выведены в отдельные вложенные папки в output_dir"
|
||||
|
||||
#: tools/sort/cli.py:120
|
||||
#: tools/sort/cli.py:121
|
||||
msgid "sort settings"
|
||||
msgstr "настройки сортировки"
|
||||
|
||||
#: tools/sort/cli.py:122
|
||||
#: tools/sort/cli.py:124
|
||||
msgid ""
|
||||
"R|Choose how images are sorted. Selecting a sort method gives the images a "
|
||||
"new filename based on the order the image appears within the given method.\n"
|
||||
|
@ -240,17 +232,25 @@ msgstr ""
|
|||
"корзины, но файлы сохранят свои оригинальные имена. Выбор значения 'none' "
|
||||
"как для 'sort-by', так и для 'group-by' ничего не даст"
|
||||
|
||||
#: tools/sort/cli.py:135 tools/sort/cli.py:162 tools/sort/cli.py:191
|
||||
#: tools/sort/cli.py:136 tools/sort/cli.py:164 tools/sort/cli.py:184
|
||||
msgid "group settings"
|
||||
msgstr "настройки группировки"
|
||||
|
||||
#: tools/sort/cli.py:137
|
||||
#: tools/sort/cli.py:139
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "R|Selecting a group by method will move/copy files into numbered bins "
|
||||
#| "based on the selected method.\n"
|
||||
#| "L|'none': Don't bin the images. Folders will be sorted by the selected "
|
||||
#| "'sort-by' but will not be binned, instead they will be sorted into a "
|
||||
#| "single folder. Selecting 'none' for both 'sort-by' and 'group-by' will "
|
||||
#| "do nothing"
|
||||
msgid ""
|
||||
"R|Selecting a group by method will move/copy files into numbered bins based "
|
||||
"on the selected method.\n"
|
||||
"L|'none': Don't bin the images. Folders will be sorted by the selected 'sort-"
|
||||
"by' but will not be binned, instead they will be sorted into a single "
|
||||
"folder. Selecting 'none' for both 'sort-by' and 'group-by' will do nothing"
|
||||
"folder. Selecting 'none' for both 'sort-by' and 'group-by' will do nothing"
|
||||
msgstr ""
|
||||
"R|Выбор группы по методу приведет к перемещению/копированию файлов в "
|
||||
"пронумерованные корзины в соответствии с выбранным методом.\n"
|
||||
|
@ -259,7 +259,7 @@ msgstr ""
|
|||
"отсортированы в одну папку. Выбор значения 'none' как для 'sort-by', так и "
|
||||
"для 'group-by' ничего не даст"
|
||||
|
||||
#: tools/sort/cli.py:149
|
||||
#: tools/sort/cli.py:152
|
||||
msgid ""
|
||||
"Whether to keep the original files in their original location. Choosing a "
|
||||
"'sort-by' method means that the files have to be renamed. Selecting 'keep' "
|
||||
|
@ -275,7 +275,7 @@ msgstr ""
|
|||
"что исходные файлы будут перемещены и переименованы в соответствии с "
|
||||
"выбранными критериями сортировки/группировки."
|
||||
|
||||
#: tools/sort/cli.py:164
|
||||
#: tools/sort/cli.py:167
|
||||
msgid ""
|
||||
"R|Float value. Minimum threshold to use for grouping comparison with 'face-"
|
||||
"cnn' 'hist' and 'face' methods.\n"
|
||||
|
@ -303,20 +303,29 @@ msgstr ""
|
|||
"количеством изображений, так как это может привести к созданию большого "
|
||||
"количества папок. По умолчанию: face-cnn 7.2, hist 0.3, face 0.25"
|
||||
|
||||
#: tools/sort/cli.py:181
|
||||
msgid "output"
|
||||
msgstr "вывод"
|
||||
|
||||
#: tools/sort/cli.py:182
|
||||
msgid ""
|
||||
"Deprecated and no longer used. The final processing will be dictated by the "
|
||||
"sort/group by methods and whether 'keep_original' is selected."
|
||||
msgstr ""
|
||||
"Устарело и больше не используется. Окончательная обработка будет диктоваться "
|
||||
"методами sort/group by и тем, выбрана ли опция 'keep_original'."
|
||||
|
||||
#: tools/sort/cli.py:193
|
||||
#, python-format
|
||||
#: tools/sort/cli.py:187
|
||||
#, fuzzy, python-format
|
||||
#| msgid ""
|
||||
#| "R|Integer value. Used to control the number of bins created for grouping "
|
||||
#| "by: any 'blur' methods, 'color' methods or 'face metric' methods "
|
||||
#| "('distance', 'size') and 'orientation; methods ('yaw', 'pitch'). For any "
|
||||
#| "other grouping methods see the '-t' ('--threshold') option.\n"
|
||||
#| "L|For 'face metric' methods the bins are filled, according the the "
|
||||
#| "distribution of faces between the minimum and maximum chosen metric.\n"
|
||||
#| "L|For 'color' methods the number of bins represents the divider of the "
|
||||
#| "percentage of colored pixels. Eg. For a bin number of '5': The first "
|
||||
#| "folder will have the faces with 0%% to 20%% colored pixels, second 21%% "
|
||||
#| "to 40%%, etc. Any empty bins will be deleted, so you may end up with "
|
||||
#| "fewer bins than selected.\n"
|
||||
#| "L|For 'blur' methods folder 0 will be the least blurry, while the last "
|
||||
#| "folder will be the blurriest.\n"
|
||||
#| "L|For 'orientation' methods the number of bins is dictated by how much "
|
||||
#| "180 degrees is divided. Eg. If 18 is selected, then each folder will be a "
|
||||
#| "10 degree increment. Folder 0 will contain faces looking the most to the "
|
||||
#| "left/down whereas the last folder will contain the faces looking the most "
|
||||
#| "to the right/up. NB: Some bins may be empty if faces do not fit the "
|
||||
#| "criteria.\n"
|
||||
#| "Default value: 5"
|
||||
msgid ""
|
||||
"R|Integer value. Used to control the number of bins created for grouping by: "
|
||||
"any 'blur' methods, 'color' methods or 'face metric' methods ('distance', "
|
||||
|
@ -335,7 +344,7 @@ msgid ""
|
|||
"degrees is divided. Eg. If 18 is selected, then each folder will be a 10 "
|
||||
"degree increment. Folder 0 will contain faces looking the most to the left/"
|
||||
"down whereas the last folder will contain the faces looking the most to the "
|
||||
"right/up. NB: Some bins may be empty if faces do not fit the criteria.\n"
|
||||
"right/up. NB: Some bins may be empty if faces do not fit the criteria. \n"
|
||||
"Default value: 5"
|
||||
msgstr ""
|
||||
"R| Целочисленное значение. Используется для управления количеством бинов, "
|
||||
|
@ -360,11 +369,11 @@ msgstr ""
|
|||
"лица не соответствуют критериям.\n"
|
||||
"Значение по умолчанию: 5"
|
||||
|
||||
#: tools/sort/cli.py:215 tools/sort/cli.py:225
|
||||
#: tools/sort/cli.py:207 tools/sort/cli.py:217
|
||||
msgid "settings"
|
||||
msgstr "настройки"
|
||||
|
||||
#: tools/sort/cli.py:217
|
||||
#: tools/sort/cli.py:210
|
||||
msgid ""
|
||||
"Logs file renaming changes if grouping by renaming, or it logs the file "
|
||||
"copying/movement if grouping by folders. If no log file is specified with "
|
||||
|
@ -376,7 +385,7 @@ msgstr ""
|
|||
"папкам. Если файл журнала не указан с помощью '--log-file', то в каталоге "
|
||||
"ввода будет создан файл 'sort_log.json'."
|
||||
|
||||
#: tools/sort/cli.py:228
|
||||
#: tools/sort/cli.py:221
|
||||
msgid ""
|
||||
"Specify a log file to use for saving the renaming or grouping information. "
|
||||
"If specified extension isn't 'json' or 'yaml', then json will be used as the "
|
||||
|
@ -386,3 +395,20 @@ msgstr ""
|
|||
"о переименовании или группировке. Если указанное расширение не 'json' или "
|
||||
"'yaml', то в качестве сериализатора будет использоваться json, с указанным "
|
||||
"именем файла. По умолчанию: sort_log.json"
|
||||
|
||||
#~ msgid " option is deprecated. Use 'yaw'"
|
||||
#~ msgstr " является устаревшей. Используйте 'yaw'"
|
||||
|
||||
#~ msgid " option is deprecated. Use 'color-black'"
|
||||
#~ msgstr " является устаревшей. Используйте 'color-black'"
|
||||
|
||||
#~ msgid "output"
|
||||
#~ msgstr "вывод"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Deprecated and no longer used. The final processing will be dictated by "
|
||||
#~ "the sort/group by methods and whether 'keep_original' is selected."
|
||||
#~ msgstr ""
|
||||
#~ "Устарело и больше не используется. Окончательная обработка будет "
|
||||
#~ "диктоваться методами sort/group by и тем, выбрана ли опция "
|
||||
#~ "'keep_original'."
|
||||
|
|
|
@ -8,7 +8,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-02-24 00:27+0000\n"
|
||||
"POT-Creation-Date: 2024-03-28 23:49+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
@ -17,43 +17,43 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: tools/alignments/cli.py:17
|
||||
#: tools/alignments/cli.py:16
|
||||
msgid ""
|
||||
"This command lets you perform various tasks pertaining to an alignments file."
|
||||
msgstr ""
|
||||
|
||||
#: tools/alignments/cli.py:32
|
||||
#: tools/alignments/cli.py:31
|
||||
msgid ""
|
||||
"Alignments tool\n"
|
||||
"This tool allows you to perform numerous actions on or using an alignments "
|
||||
"file against its corresponding faceset/frame source."
|
||||
msgstr ""
|
||||
|
||||
#: tools/alignments/cli.py:44
|
||||
#: tools/alignments/cli.py:43
|
||||
msgid " Must Pass in a frames folder/source video file (-fr)."
|
||||
msgstr ""
|
||||
|
||||
#: tools/alignments/cli.py:45
|
||||
#: tools/alignments/cli.py:44
|
||||
msgid " Must Pass in a faces folder (-fc)."
|
||||
msgstr ""
|
||||
|
||||
#: tools/alignments/cli.py:46
|
||||
#: tools/alignments/cli.py:45
|
||||
msgid ""
|
||||
" Must Pass in either a frames folder/source video file OR a faces folder (-"
|
||||
"fr or -fc)."
|
||||
msgstr ""
|
||||
|
||||
#: tools/alignments/cli.py:48
|
||||
#: tools/alignments/cli.py:47
|
||||
msgid ""
|
||||
" Must Pass in a frames folder/source video file AND a faces folder (-fr and -"
|
||||
"fc)."
|
||||
msgstr ""
|
||||
|
||||
#: tools/alignments/cli.py:50
|
||||
#: tools/alignments/cli.py:49
|
||||
msgid " Use the output option (-o) to process results."
|
||||
msgstr ""
|
||||
|
||||
#: tools/alignments/cli.py:58 tools/alignments/cli.py:97
|
||||
#: tools/alignments/cli.py:57 tools/alignments/cli.py:97
|
||||
msgid "processing"
|
||||
msgstr ""
|
||||
|
||||
|
@ -94,7 +94,7 @@ msgid ""
|
|||
"(EXPERIMENTAL!)"
|
||||
msgstr ""
|
||||
|
||||
#: tools/alignments/cli.py:99
|
||||
#: tools/alignments/cli.py:100
|
||||
msgid ""
|
||||
"R|How to output discovered items ('faces' and 'frames' only):\n"
|
||||
"L|'console': Print the list of frames to the screen. (DEFAULT)\n"
|
||||
|
@ -104,12 +104,12 @@ msgid ""
|
|||
"directory."
|
||||
msgstr ""
|
||||
|
||||
#: tools/alignments/cli.py:110 tools/alignments/cli.py:123
|
||||
#: tools/alignments/cli.py:130 tools/alignments/cli.py:137
|
||||
#: tools/alignments/cli.py:111 tools/alignments/cli.py:134
|
||||
#: tools/alignments/cli.py:141
|
||||
msgid "data"
|
||||
msgstr ""
|
||||
|
||||
#: tools/alignments/cli.py:114
|
||||
#: tools/alignments/cli.py:118
|
||||
msgid ""
|
||||
"Full path to the alignments file to be processed. If you have input a "
|
||||
"'frames_dir' and don't provide this option, the process will try to find the "
|
||||
|
@ -118,15 +118,11 @@ msgid ""
|
|||
"generated in the specified faces folder."
|
||||
msgstr ""
|
||||
|
||||
#: tools/alignments/cli.py:124
|
||||
msgid "Directory containing extracted faces."
|
||||
msgstr ""
|
||||
|
||||
#: tools/alignments/cli.py:131
|
||||
#: tools/alignments/cli.py:135
|
||||
msgid "Directory containing source frames that faces were extracted from."
|
||||
msgstr ""
|
||||
|
||||
#: tools/alignments/cli.py:138
|
||||
#: tools/alignments/cli.py:143
|
||||
msgid ""
|
||||
"R|Run the aligmnents tool on multiple sources. The following jobs support "
|
||||
"batch mode:\n"
|
||||
|
@ -148,23 +144,23 @@ msgid ""
|
|||
"ignored."
|
||||
msgstr ""
|
||||
|
||||
#: tools/alignments/cli.py:164 tools/alignments/cli.py:175
|
||||
#: tools/alignments/cli.py:185
|
||||
#: tools/alignments/cli.py:169 tools/alignments/cli.py:181
|
||||
#: tools/alignments/cli.py:191
|
||||
msgid "extract"
|
||||
msgstr ""
|
||||
|
||||
#: tools/alignments/cli.py:165
|
||||
#: tools/alignments/cli.py:171
|
||||
msgid ""
|
||||
"[Extract only] Extract every 'nth' frame. This option will skip frames when "
|
||||
"extracting faces. For example a value of 1 will extract faces from every "
|
||||
"frame, a value of 10 will extract faces from every 10th frame."
|
||||
msgstr ""
|
||||
|
||||
#: tools/alignments/cli.py:176
|
||||
#: tools/alignments/cli.py:182
|
||||
msgid "[Extract only] The output size of extracted faces."
|
||||
msgstr ""
|
||||
|
||||
#: tools/alignments/cli.py:186
|
||||
#: tools/alignments/cli.py:193
|
||||
msgid ""
|
||||
"[Extract only] Only extract faces that have been resized by this percent or "
|
||||
"more to meet the specified extract size (`-sz`, `--size`). Useful for "
|
||||
|
|
|
@ -1,29 +1,31 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR ORGANIZATION
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 2021-02-18 23:34-0000\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-03-28 23:50+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=cp1252\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
|
||||
|
||||
#: tools/effmpeg/cli.py:15
|
||||
msgid "This command allows you to easily execute common ffmpeg tasks."
|
||||
msgstr ""
|
||||
|
||||
#: tools/effmpeg/cli.py:24
|
||||
#: tools/effmpeg/cli.py:52
|
||||
msgid "A wrapper for ffmpeg for performing image <> video converting."
|
||||
msgstr ""
|
||||
|
||||
#: tools/effmpeg/cli.py:51
|
||||
#: tools/effmpeg/cli.py:64
|
||||
msgid ""
|
||||
"R|Choose which action you want ffmpeg ffmpeg to do.\n"
|
||||
"L|'extract': turns videos into images \n"
|
||||
|
@ -36,80 +38,110 @@ msgid ""
|
|||
"L|'slice' cuts a portion of the video into a separate video file."
|
||||
msgstr ""
|
||||
|
||||
#: tools/effmpeg/cli.py:65
|
||||
#: tools/effmpeg/cli.py:78
|
||||
msgid "Input file."
|
||||
msgstr ""
|
||||
|
||||
#: tools/effmpeg/cli.py:66 tools/effmpeg/cli.py:73 tools/effmpeg/cli.py:87
|
||||
#: tools/effmpeg/cli.py:79 tools/effmpeg/cli.py:86 tools/effmpeg/cli.py:100
|
||||
msgid "data"
|
||||
msgstr ""
|
||||
|
||||
#: tools/effmpeg/cli.py:76
|
||||
msgid "Output file. If no output is specified then: if the output is meant to be a video then a video called 'out.mkv' will be created in the input directory; if the output is meant to be a directory then a directory called 'out' will be created inside the input directory. Note: the chosen output file extension will determine the file encoding."
|
||||
#: tools/effmpeg/cli.py:89
|
||||
msgid ""
|
||||
"Output file. If no output is specified then: if the output is meant to be a "
|
||||
"video then a video called 'out.mkv' will be created in the input directory; "
|
||||
"if the output is meant to be a directory then a directory called 'out' will "
|
||||
"be created inside the input directory. Note: the chosen output file "
|
||||
"extension will determine the file encoding."
|
||||
msgstr ""
|
||||
|
||||
#: tools/effmpeg/cli.py:89
|
||||
#: tools/effmpeg/cli.py:102
|
||||
msgid "Path to reference video if 'input' was not a video."
|
||||
msgstr ""
|
||||
|
||||
#: tools/effmpeg/cli.py:95 tools/effmpeg/cli.py:105 tools/effmpeg/cli.py:142
|
||||
#: tools/effmpeg/cli.py:171
|
||||
#: tools/effmpeg/cli.py:108 tools/effmpeg/cli.py:118 tools/effmpeg/cli.py:156
|
||||
#: tools/effmpeg/cli.py:185
|
||||
msgid "output"
|
||||
msgstr ""
|
||||
|
||||
#: tools/effmpeg/cli.py:97
|
||||
msgid "Provide video fps. Can be an integer, float or fraction. Negative values will will make the program try to get the fps from the input or reference videos."
|
||||
#: tools/effmpeg/cli.py:110
|
||||
msgid ""
|
||||
"Provide video fps. Can be an integer, float or fraction. Negative values "
|
||||
"will will make the program try to get the fps from the input or reference "
|
||||
"videos."
|
||||
msgstr ""
|
||||
|
||||
#: tools/effmpeg/cli.py:107
|
||||
msgid "Image format that extracted images should be saved as. '.bmp' will offer the fastest extraction speed, but will take the most storage space. '.png' will be slower but will take less storage."
|
||||
#: tools/effmpeg/cli.py:120
|
||||
msgid ""
|
||||
"Image format that extracted images should be saved as. '.bmp' will offer the "
|
||||
"fastest extraction speed, but will take the most storage space. '.png' will "
|
||||
"be slower but will take less storage."
|
||||
msgstr ""
|
||||
|
||||
#: tools/effmpeg/cli.py:114 tools/effmpeg/cli.py:123 tools/effmpeg/cli.py:132
|
||||
#: tools/effmpeg/cli.py:127 tools/effmpeg/cli.py:136 tools/effmpeg/cli.py:145
|
||||
msgid "clip"
|
||||
msgstr ""
|
||||
|
||||
#: tools/effmpeg/cli.py:116
|
||||
msgid "Enter the start time from which an action is to be applied. Default: 00:00:00, in HH:MM:SS format. You can also enter the time with or without the colons, e.g. 00:0000 or 026010."
|
||||
#: tools/effmpeg/cli.py:129
|
||||
msgid ""
|
||||
"Enter the start time from which an action is to be applied. Default: "
|
||||
"00:00:00, in HH:MM:SS format. You can also enter the time with or without "
|
||||
"the colons, e.g. 00:0000 or 026010."
|
||||
msgstr ""
|
||||
|
||||
#: tools/effmpeg/cli.py:125
|
||||
msgid "Enter the end time to which an action is to be applied. If both an end time and duration are set, then the end time will be used and the duration will be ignored. Default: 00:00:00, in HH:MM:SS."
|
||||
#: tools/effmpeg/cli.py:138
|
||||
msgid ""
|
||||
"Enter the end time to which an action is to be applied. If both an end time "
|
||||
"and duration are set, then the end time will be used and the duration will "
|
||||
"be ignored. Default: 00:00:00, in HH:MM:SS."
|
||||
msgstr ""
|
||||
|
||||
#: tools/effmpeg/cli.py:134
|
||||
msgid "Enter the duration of the chosen action, for example if you enter 00:00:10 for slice, then the first 10 seconds after and including the start time will be cut out into a new video. Default: 00:00:00, in HH:MM:SS format. You can also enter the time with or without the colons, e.g. 00:0000 or 026010."
|
||||
#: tools/effmpeg/cli.py:147
|
||||
msgid ""
|
||||
"Enter the duration of the chosen action, for example if you enter 00:00:10 "
|
||||
"for slice, then the first 10 seconds after and including the start time will "
|
||||
"be cut out into a new video. Default: 00:00:00, in HH:MM:SS format. You can "
|
||||
"also enter the time with or without the colons, e.g. 00:0000 or 026010."
|
||||
msgstr ""
|
||||
|
||||
#: tools/effmpeg/cli.py:144
|
||||
msgid "Mux the audio from the reference video into the input video. This option is only used for the 'gen-vid' action. 'mux-audio' action has this turned on implicitly."
|
||||
#: tools/effmpeg/cli.py:158
|
||||
msgid ""
|
||||
"Mux the audio from the reference video into the input video. This option is "
|
||||
"only used for the 'gen-vid' action. 'mux-audio' action has this turned on "
|
||||
"implicitly."
|
||||
msgstr ""
|
||||
|
||||
#: tools/effmpeg/cli.py:155 tools/effmpeg/cli.py:165
|
||||
#: tools/effmpeg/cli.py:169 tools/effmpeg/cli.py:179
|
||||
msgid "rotate"
|
||||
msgstr ""
|
||||
|
||||
#: tools/effmpeg/cli.py:157
|
||||
msgid "Transpose the video. If transpose is set, then degrees will be ignored. For cli you can enter either the number or the long command name, e.g. to use (1, 90Clockwise) -tr 1 or -tr 90Clockwise"
|
||||
msgstr ""
|
||||
|
||||
#: tools/effmpeg/cli.py:166
|
||||
msgid "Rotate the video clockwise by the given number of degrees."
|
||||
msgstr ""
|
||||
|
||||
#: tools/effmpeg/cli.py:173
|
||||
msgid "Set the new resolution scale if the chosen action is 'rescale'."
|
||||
msgstr ""
|
||||
|
||||
#: tools/effmpeg/cli.py:178 tools/effmpeg/cli.py:186
|
||||
msgid "settings"
|
||||
#: tools/effmpeg/cli.py:171
|
||||
msgid ""
|
||||
"Transpose the video. If transpose is set, then degrees will be ignored. For "
|
||||
"cli you can enter either the number or the long command name, e.g. to use "
|
||||
"(1, 90Clockwise) -tr 1 or -tr 90Clockwise"
|
||||
msgstr ""
|
||||
|
||||
#: tools/effmpeg/cli.py:180
|
||||
msgid "Reduces output verbosity so that only serious errors are printed. If both quiet and verbose are set, verbose will override quiet."
|
||||
msgid "Rotate the video clockwise by the given number of degrees."
|
||||
msgstr ""
|
||||
|
||||
#: tools/effmpeg/cli.py:188
|
||||
msgid "Increases output verbosity. If both quiet and verbose are set, verbose will override quiet."
|
||||
#: tools/effmpeg/cli.py:187
|
||||
msgid "Set the new resolution scale if the chosen action is 'rescale'."
|
||||
msgstr ""
|
||||
|
||||
#: tools/effmpeg/cli.py:192 tools/effmpeg/cli.py:200
|
||||
msgid "settings"
|
||||
msgstr ""
|
||||
|
||||
#: tools/effmpeg/cli.py:194
|
||||
msgid ""
|
||||
"Reduces output verbosity so that only serious errors are printed. If both "
|
||||
"quiet and verbose are set, verbose will override quiet."
|
||||
msgstr ""
|
||||
|
||||
#: tools/effmpeg/cli.py:202
|
||||
msgid ""
|
||||
"Increases output verbosity. If both quiet and verbose are set, verbose will "
|
||||
"override quiet."
|
||||
msgstr ""
|
||||
|
|
|
@ -1,51 +1,65 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR ORGANIZATION
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"POT-Creation-Date: 2022-11-24 14:17+0900\n"
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-03-28 23:55+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=cp1252\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
"X-Generator: Poedit 3.2\n"
|
||||
|
||||
#: tools/manual\cli.py:13
|
||||
msgid "This command lets you perform various actions on frames, faces and alignments files using visual tools."
|
||||
#: tools/manual/cli.py:13
|
||||
msgid ""
|
||||
"This command lets you perform various actions on frames, faces and "
|
||||
"alignments files using visual tools."
|
||||
msgstr ""
|
||||
|
||||
#: tools/manual\cli.py:23
|
||||
msgid "A tool to perform various actions on frames, faces and alignments files using visual tools"
|
||||
#: tools/manual/cli.py:23
|
||||
msgid ""
|
||||
"A tool to perform various actions on frames, faces and alignments files "
|
||||
"using visual tools"
|
||||
msgstr ""
|
||||
|
||||
#: tools/manual\cli.py:35 tools/manual\cli.py:43
|
||||
#: tools/manual/cli.py:35 tools/manual/cli.py:44
|
||||
msgid "data"
|
||||
msgstr ""
|
||||
|
||||
#: tools/manual\cli.py:37
|
||||
msgid "Path to the alignments file for the input, if not at the default location"
|
||||
#: tools/manual/cli.py:38
|
||||
msgid ""
|
||||
"Path to the alignments file for the input, if not at the default location"
|
||||
msgstr ""
|
||||
|
||||
#: tools/manual\cli.py:44
|
||||
msgid "Video file or directory containing source frames that faces were extracted from."
|
||||
#: tools/manual/cli.py:46
|
||||
msgid ""
|
||||
"Video file or directory containing source frames that faces were extracted "
|
||||
"from."
|
||||
msgstr ""
|
||||
|
||||
#: tools/manual\cli.py:51 tools/manual\cli.py:59
|
||||
#: tools/manual/cli.py:53 tools/manual/cli.py:62
|
||||
msgid "options"
|
||||
msgstr ""
|
||||
|
||||
#: tools/manual\cli.py:52
|
||||
msgid "Force regeneration of the low resolution jpg thumbnails in the alignments file."
|
||||
#: tools/manual/cli.py:55
|
||||
msgid ""
|
||||
"Force regeneration of the low resolution jpg thumbnails in the alignments "
|
||||
"file."
|
||||
msgstr ""
|
||||
|
||||
#: tools/manual\cli.py:60
|
||||
msgid "The process attempts to speed up generation of thumbnails by extracting from the video in parallel threads. For some videos, this causes the caching process to hang. If this happens, then set this option to generate the thumbnails in a slower, but more stable single thread."
|
||||
#: tools/manual/cli.py:64
|
||||
msgid ""
|
||||
"The process attempts to speed up generation of thumbnails by extracting from "
|
||||
"the video in parallel threads. For some videos, this causes the caching "
|
||||
"process to hang. If this happens, then set this option to generate the "
|
||||
"thumbnails in a slower, but more stable single thread."
|
||||
msgstr ""
|
||||
|
||||
#: tools/manual\faceviewer\frame.py:163
|
||||
|
|
|
@ -8,7 +8,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-03-11 23:45+0000\n"
|
||||
"POT-Creation-Date: 2024-03-28 23:51+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
|
|
@ -8,7 +8,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-06-28 14:05+0100\n"
|
||||
"POT-Creation-Date: 2024-03-28 23:51+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
@ -25,13 +25,13 @@ msgstr ""
|
|||
msgid "A tool for performing actions on Faceswap trained model files"
|
||||
msgstr ""
|
||||
|
||||
#: tools/model/cli.py:33
|
||||
#: tools/model/cli.py:34
|
||||
msgid ""
|
||||
"Model directory. A directory containing the model you wish to perform an "
|
||||
"action on."
|
||||
msgstr ""
|
||||
|
||||
#: tools/model/cli.py:41
|
||||
#: tools/model/cli.py:43
|
||||
msgid ""
|
||||
"R|Choose which action you want to perform.\n"
|
||||
"L|'inference' - Create an inference only copy of the model. Strips any "
|
||||
|
@ -43,11 +43,11 @@ msgid ""
|
|||
"L|'restore' - Restore a model from backup."
|
||||
msgstr ""
|
||||
|
||||
#: tools/model/cli.py:55 tools/model/cli.py:66
|
||||
#: tools/model/cli.py:57 tools/model/cli.py:69
|
||||
msgid "inference"
|
||||
msgstr ""
|
||||
|
||||
#: tools/model/cli.py:56
|
||||
#: tools/model/cli.py:59
|
||||
msgid ""
|
||||
"R|The format to save the model as. Note: Only used for 'inference' job.\n"
|
||||
"L|'h5' - Standard Keras H5 format. Does not store any custom layer "
|
||||
|
@ -56,8 +56,8 @@ msgid ""
|
|||
"required to load the model outside of Faceswap."
|
||||
msgstr ""
|
||||
|
||||
#: tools/model/cli.py:67
|
||||
#: tools/model/cli.py:71
|
||||
msgid ""
|
||||
"Only used for 'inference' job. Generate the inference model for B -> A "
|
||||
"Only used for 'inference' job. Generate the inference model for B -> A "
|
||||
"instead of A -> B."
|
||||
msgstr ""
|
||||
|
|
|
@ -8,7 +8,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-01-16 12:27+0000\n"
|
||||
"POT-Creation-Date: 2024-03-28 23:53+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
@ -17,64 +17,64 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: tools/preview/cli.py:14
|
||||
#: tools/preview/cli.py:15
|
||||
msgid "This command allows you to preview swaps to tweak convert settings."
|
||||
msgstr ""
|
||||
|
||||
#: tools/preview/cli.py:29
|
||||
#: tools/preview/cli.py:30
|
||||
msgid ""
|
||||
"Preview tool\n"
|
||||
"Allows you to configure your convert settings with a live preview"
|
||||
msgstr ""
|
||||
|
||||
#: tools/preview/cli.py:46 tools/preview/cli.py:55 tools/preview/cli.py:62
|
||||
#: tools/preview/cli.py:47 tools/preview/cli.py:57 tools/preview/cli.py:65
|
||||
msgid "data"
|
||||
msgstr ""
|
||||
|
||||
#: tools/preview/cli.py:48
|
||||
#: tools/preview/cli.py:50
|
||||
msgid ""
|
||||
"Input directory or video. Either a directory containing the image files you "
|
||||
"wish to process or path to a video file."
|
||||
msgstr ""
|
||||
|
||||
#: tools/preview/cli.py:57
|
||||
#: tools/preview/cli.py:60
|
||||
msgid ""
|
||||
"Path to the alignments file for the input, if not at the default location"
|
||||
msgstr ""
|
||||
|
||||
#: tools/preview/cli.py:64
|
||||
#: tools/preview/cli.py:68
|
||||
msgid ""
|
||||
"Model directory. A directory containing the trained model you wish to "
|
||||
"process."
|
||||
msgstr ""
|
||||
|
||||
#: tools/preview/cli.py:71
|
||||
#: tools/preview/cli.py:74
|
||||
msgid "Swap the model. Instead of A -> B, swap B -> A"
|
||||
msgstr ""
|
||||
|
||||
#: tools/preview/control_panels.py:496
|
||||
#: tools/preview/control_panels.py:510
|
||||
msgid "Save full config"
|
||||
msgstr ""
|
||||
|
||||
#: tools/preview/control_panels.py:499
|
||||
#: tools/preview/control_panels.py:513
|
||||
msgid "Reset full config to default values"
|
||||
msgstr ""
|
||||
|
||||
#: tools/preview/control_panels.py:502
|
||||
#: tools/preview/control_panels.py:516
|
||||
msgid "Reset full config to saved values"
|
||||
msgstr ""
|
||||
|
||||
#: tools/preview/control_panels.py:653
|
||||
#: tools/preview/control_panels.py:667
|
||||
#, python-brace-format
|
||||
msgid "Save {title} config"
|
||||
msgstr ""
|
||||
|
||||
#: tools/preview/control_panels.py:656
|
||||
#: tools/preview/control_panels.py:670
|
||||
#, python-brace-format
|
||||
msgid "Reset {title} config to default values"
|
||||
msgstr ""
|
||||
|
||||
#: tools/preview/control_panels.py:659
|
||||
#: tools/preview/control_panels.py:673
|
||||
#, python-brace-format
|
||||
msgid "Reset {title} config to saved values"
|
||||
msgstr ""
|
||||
|
|
|
@ -6,155 +6,147 @@
|
|||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-11-24 14:19+0900\n"
|
||||
"POT-Creation-Date: 2024-03-28 23:53+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 3.2\n"
|
||||
|
||||
#: tools/sort/cli.py:14
|
||||
#: tools/sort/cli.py:15
|
||||
msgid "This command lets you sort images using various methods."
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:20
|
||||
#: tools/sort/cli.py:21
|
||||
msgid ""
|
||||
" Adjust the '-t' ('--threshold') parameter to control the strength of "
|
||||
"grouping."
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:21
|
||||
#: tools/sort/cli.py:22
|
||||
msgid ""
|
||||
" Adjust the '-b' ('--bins') parameter to control the number of bins for "
|
||||
"grouping. Each image is allocated to a bin by the percentage of color pixels "
|
||||
"that appear in the image."
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:24
|
||||
#: tools/sort/cli.py:25
|
||||
msgid ""
|
||||
" Adjust the '-b' ('--bins') parameter to control the number of bins for "
|
||||
"grouping. Each image is allocated to a bin by the number of degrees the face "
|
||||
"is orientated from center."
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:27
|
||||
#: tools/sort/cli.py:28
|
||||
msgid ""
|
||||
" Adjust the '-b' ('--bins') parameter to control the number of bins for "
|
||||
"grouping. The minimum and maximum values are taken for the chosen sort "
|
||||
"metric. The bins are then populated with the results from the group sorting."
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:31
|
||||
#: tools/sort/cli.py:32
|
||||
msgid "faces by blurriness."
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:32
|
||||
#: tools/sort/cli.py:33
|
||||
msgid "faces by fft filtered blurriness."
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:33
|
||||
#: tools/sort/cli.py:34
|
||||
msgid ""
|
||||
"faces by the estimated distance of the alignments from an 'average' face. "
|
||||
"This can be useful for eliminating misaligned faces. Sorts from most like an "
|
||||
"average face to least like an average face."
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:36
|
||||
#: tools/sort/cli.py:37
|
||||
msgid ""
|
||||
"faces using VGG Face2 by face similarity. This uses a pairwise clustering "
|
||||
"algorithm to check the distances between 512 features on every face in your "
|
||||
"set and order them appropriately."
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:39
|
||||
#: tools/sort/cli.py:40
|
||||
msgid "faces by their landmarks."
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:40
|
||||
#: tools/sort/cli.py:41
|
||||
msgid "Like 'face-cnn' but sorts by dissimilarity."
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:41
|
||||
#: tools/sort/cli.py:42
|
||||
msgid "faces by Yaw (rotation left to right)."
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:42
|
||||
#: tools/sort/cli.py:43
|
||||
msgid "faces by Pitch (rotation up and down)."
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:43
|
||||
#: tools/sort/cli.py:44
|
||||
msgid ""
|
||||
"faces by Roll (rotation). Aligned faces should have a roll value close to "
|
||||
"zero. The further the Roll value from zero the higher liklihood the face is "
|
||||
"misaligned."
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:45
|
||||
#: tools/sort/cli.py:46
|
||||
msgid "faces by their color histogram."
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:46
|
||||
#: tools/sort/cli.py:47
|
||||
msgid "Like 'hist' but sorts by dissimilarity."
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:47
|
||||
#: tools/sort/cli.py:48
|
||||
msgid ""
|
||||
"images by the average intensity of the converted grayscale color channel."
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:48
|
||||
#: tools/sort/cli.py:49
|
||||
msgid ""
|
||||
"images by their number of black pixels. Useful when faces are near borders "
|
||||
"and a large part of the image is black."
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:50
|
||||
#: tools/sort/cli.py:51
|
||||
msgid ""
|
||||
"images by the average intensity of the converted Y color channel. Bright "
|
||||
"lighting and oversaturated images will be ranked first."
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:52
|
||||
#: tools/sort/cli.py:53
|
||||
msgid ""
|
||||
"images by the average intensity of the converted Cg color channel. Green "
|
||||
"images will be ranked first and red images will be last."
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:54
|
||||
#: tools/sort/cli.py:55
|
||||
msgid ""
|
||||
"images by the average intensity of the converted Co color channel. Orange "
|
||||
"images will be ranked first and blue images will be last."
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:56
|
||||
#: tools/sort/cli.py:57
|
||||
msgid ""
|
||||
"images by their size in the original frame. Faces further from the camera "
|
||||
"and from lower resolution sources will be sorted first, whilst faces closer "
|
||||
"to the camera and from higher resolution sources will be sorted last."
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:59
|
||||
msgid " option is deprecated. Use 'yaw'"
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:60
|
||||
msgid " option is deprecated. Use 'color-black'"
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:82
|
||||
#: tools/sort/cli.py:81
|
||||
msgid "Sort faces using a number of different techniques"
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:92 tools/sort/cli.py:99 tools/sort/cli.py:110
|
||||
#: tools/sort/cli.py:148
|
||||
#: tools/sort/cli.py:91 tools/sort/cli.py:98 tools/sort/cli.py:110
|
||||
#: tools/sort/cli.py:150
|
||||
msgid "data"
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:93
|
||||
#: tools/sort/cli.py:92
|
||||
msgid "Input directory of aligned faces."
|
||||
msgstr ""
|
||||
|
||||
|
@ -167,18 +159,18 @@ msgid ""
|
|||
"'input_dir'"
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:111
|
||||
#: tools/sort/cli.py:112
|
||||
msgid ""
|
||||
"R|If selected then the input_dir should be a parent folder containing "
|
||||
"multiple folders of faces you wish to sort. The faces will be output to "
|
||||
"separate sub-folders in the output_dir"
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:120
|
||||
#: tools/sort/cli.py:121
|
||||
msgid "sort settings"
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:122
|
||||
#: tools/sort/cli.py:124
|
||||
msgid ""
|
||||
"R|Choose how images are sorted. Selecting a sort method gives the images a "
|
||||
"new filename based on the order the image appears within the given method.\n"
|
||||
|
@ -188,20 +180,20 @@ msgid ""
|
|||
"'none' for both 'sort-by' and 'group-by' will do nothing"
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:135 tools/sort/cli.py:162 tools/sort/cli.py:191
|
||||
#: tools/sort/cli.py:136 tools/sort/cli.py:164 tools/sort/cli.py:184
|
||||
msgid "group settings"
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:137
|
||||
#: tools/sort/cli.py:139
|
||||
msgid ""
|
||||
"R|Selecting a group by method will move/copy files into numbered bins based "
|
||||
"on the selected method.\n"
|
||||
"L|'none': Don't bin the images. Folders will be sorted by the selected 'sort-"
|
||||
"by' but will not be binned, instead they will be sorted into a single "
|
||||
"folder. Selecting 'none' for both 'sort-by' and 'group-by' will do nothing"
|
||||
"folder. Selecting 'none' for both 'sort-by' and 'group-by' will do nothing"
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:149
|
||||
#: tools/sort/cli.py:152
|
||||
msgid ""
|
||||
"Whether to keep the original files in their original location. Choosing a "
|
||||
"'sort-by' method means that the files have to be renamed. Selecting 'keep' "
|
||||
|
@ -211,7 +203,7 @@ msgid ""
|
|||
"criteria."
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:164
|
||||
#: tools/sort/cli.py:167
|
||||
msgid ""
|
||||
"R|Float value. Minimum threshold to use for grouping comparison with 'face-"
|
||||
"cnn' 'hist' and 'face' methods.\n"
|
||||
|
@ -226,17 +218,7 @@ msgid ""
|
|||
"face-cnn 7.2, hist 0.3, face 0.25"
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:181
|
||||
msgid "output"
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:182
|
||||
msgid ""
|
||||
"Deprecated and no longer used. The final processing will be dictated by the "
|
||||
"sort/group by methods and whether 'keep_original' is selected."
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:193
|
||||
#: tools/sort/cli.py:187
|
||||
#, python-format
|
||||
msgid ""
|
||||
"R|Integer value. Used to control the number of bins created for grouping by: "
|
||||
|
@ -256,15 +238,15 @@ msgid ""
|
|||
"degrees is divided. Eg. If 18 is selected, then each folder will be a 10 "
|
||||
"degree increment. Folder 0 will contain faces looking the most to the left/"
|
||||
"down whereas the last folder will contain the faces looking the most to the "
|
||||
"right/up. NB: Some bins may be empty if faces do not fit the criteria.\n"
|
||||
"right/up. NB: Some bins may be empty if faces do not fit the criteria. \n"
|
||||
"Default value: 5"
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:215 tools/sort/cli.py:225
|
||||
#: tools/sort/cli.py:207 tools/sort/cli.py:217
|
||||
msgid "settings"
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:217
|
||||
#: tools/sort/cli.py:210
|
||||
msgid ""
|
||||
"Logs file renaming changes if grouping by renaming, or it logs the file "
|
||||
"copying/movement if grouping by folders. If no log file is specified with "
|
||||
|
@ -272,7 +254,7 @@ msgid ""
|
|||
"directory."
|
||||
msgstr ""
|
||||
|
||||
#: tools/sort/cli.py:228
|
||||
#: tools/sort/cli.py:221
|
||||
msgid ""
|
||||
"Specify a log file to use for saving the renaming or grouping information. "
|
||||
"If specified extension isn't 'json' or 'yaml', then json will be used as the "
|
||||
|
|
|
@ -22,7 +22,7 @@ from lib.gpu_stats import GPUStats
|
|||
from lib.image import read_image_meta_batch, ImagesLoader
|
||||
from lib.multithreading import MultiThread, total_cpus
|
||||
from lib.queue_manager import queue_manager
|
||||
from lib.utils import FaceswapError, get_folder, get_image_paths
|
||||
from lib.utils import FaceswapError, get_folder, get_image_paths, handle_deprecated_cliopts
|
||||
from plugins.extract.pipeline import Extractor, ExtractMedia
|
||||
from plugins.plugin_loader import PluginLoader
|
||||
|
||||
|
@ -62,7 +62,7 @@ class ConvertItem:
|
|||
swapped_faces: np.ndarray = np.array([])
|
||||
|
||||
|
||||
class Convert(): # pylint:disable=too-few-public-methods
|
||||
class Convert():
|
||||
""" The Faceswap Face Conversion Process.
|
||||
|
||||
The conversion process is responsible for swapping the faces on source frames with the output
|
||||
|
@ -82,7 +82,7 @@ class Convert(): # pylint:disable=too-few-public-methods
|
|||
"""
|
||||
def __init__(self, arguments: Namespace) -> None:
|
||||
logger.debug("Initializing %s: (args: %s)", self.__class__.__name__, arguments)
|
||||
self._args = arguments
|
||||
self._args = handle_deprecated_cliopts(arguments)
|
||||
|
||||
self._images = ImagesLoader(self._args.input_dir, fast_count=True)
|
||||
self._alignments = Alignments(self._args, False, self._images.is_video)
|
||||
|
@ -847,8 +847,7 @@ class Predict():
|
|||
def _get_model_name(self, model_dir: str) -> str:
|
||||
""" Return the name of the Faceswap model used.
|
||||
|
||||
If a "trainer" option has been selected in the command line arguments, use that value,
|
||||
otherwise retrieve the name of the model from the model's state file.
|
||||
Retrieve the name of the model from the model's state file.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
|
@ -861,24 +860,18 @@ class Predict():
|
|||
The name of the Faceswap model being used.
|
||||
|
||||
"""
|
||||
if hasattr(self._args, "trainer") and self._args.trainer:
|
||||
logger.debug("Trainer name provided: '%s'", self._args.trainer)
|
||||
return self._args.trainer
|
||||
|
||||
statefiles = [fname for fname in os.listdir(str(model_dir))
|
||||
if fname.endswith("_state.json")]
|
||||
if len(statefiles) != 1:
|
||||
raise FaceswapError("There should be 1 state file in your model folder. "
|
||||
f"{len(statefiles)} were found. Specify a trainer with the '-t', "
|
||||
"'--trainer' option.")
|
||||
f"{len(statefiles)} were found.")
|
||||
statefile = os.path.join(str(model_dir), statefiles[0])
|
||||
|
||||
state = self._serializer.load(statefile)
|
||||
trainer = state.get("name", None)
|
||||
|
||||
if not trainer:
|
||||
raise FaceswapError("Trainer name could not be read from state file. "
|
||||
"Specify a trainer with the '-t', '--trainer' option.")
|
||||
raise FaceswapError("Trainer name could not be read from state file.")
|
||||
logger.debug("Trainer from state file: '%s'", trainer)
|
||||
return trainer
|
||||
|
||||
|
@ -1100,7 +1093,7 @@ class Predict():
|
|||
logger.trace("Queued out batch. Batchsize: %s", len(batch)) # type:ignore
|
||||
|
||||
|
||||
class OptionalActions(): # pylint:disable=too-few-public-methods
|
||||
class OptionalActions():
|
||||
""" Process specific optional actions for Convert.
|
||||
|
||||
Currently only handles skip faces. This class should probably be (re)moved.
|
||||
|
|
|
@ -16,7 +16,7 @@ from lib.align.alignments import PNGHeaderDict
|
|||
|
||||
from lib.image import encode_image, generate_thumbnail, ImagesLoader, ImagesSaver, read_image_meta
|
||||
from lib.multithreading import MultiThread
|
||||
from lib.utils import get_folder, IMAGE_EXTENSIONS, VIDEO_EXTENSIONS
|
||||
from lib.utils import get_folder, handle_deprecated_cliopts, IMAGE_EXTENSIONS, VIDEO_EXTENSIONS
|
||||
from plugins.extract.pipeline import Extractor, ExtractMedia
|
||||
from scripts.fsmedia import Alignments, PostProcess, finalize
|
||||
|
||||
|
@ -27,7 +27,7 @@ if T.TYPE_CHECKING:
|
|||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class Extract(): # pylint:disable=too-few-public-methods
|
||||
class Extract():
|
||||
""" The Faceswap Face Extraction Process.
|
||||
|
||||
The extraction process is responsible for detecting faces in a series of images/video, aligning
|
||||
|
@ -47,7 +47,7 @@ class Extract(): # pylint:disable=too-few-public-methods
|
|||
"""
|
||||
def __init__(self, arguments: Namespace) -> None:
|
||||
logger.debug("Initializing %s: (args: %s", self.__class__.__name__, arguments)
|
||||
self._args = arguments
|
||||
self._args = handle_deprecated_cliopts(arguments)
|
||||
self._input_locations = self._get_input_locations()
|
||||
self._validate_batchmode()
|
||||
|
||||
|
@ -616,7 +616,7 @@ class PipelineLoader():
|
|||
logger.debug("Reload Images: Complete")
|
||||
|
||||
|
||||
class _Extract(): # pylint:disable=too-few-public-methods
|
||||
class _Extract():
|
||||
""" The Actual extraction process.
|
||||
|
||||
This class is called by the parent :class:`Extract` process
|
||||
|
|
|
@ -600,6 +600,7 @@ class DebugLandmarks(PostProcessAction):
|
|||
logger.trace("Drawing Landmarks. Frame: '%s'. Face: %s", # type:ignore[attr-defined]
|
||||
frame, idx)
|
||||
# Landmarks
|
||||
assert face.aligned.face is not None
|
||||
for (pos_x, pos_y) in face.aligned.landmarks.astype("int32"):
|
||||
cv2.circle(face.aligned.face, (pos_x, pos_y), 1, (0, 255, 255), -1)
|
||||
# Pose
|
||||
|
|
|
@ -17,7 +17,7 @@ from lib.image import read_image_meta
|
|||
from lib.keypress import KBHit
|
||||
from lib.multithreading import MultiThread, FSThread
|
||||
from lib.training import Preview, PreviewBuffer, TriggerType
|
||||
from lib.utils import (get_folder, get_image_paths,
|
||||
from lib.utils import (get_folder, get_image_paths, handle_deprecated_cliopts,
|
||||
FaceswapError, IMAGE_EXTENSIONS)
|
||||
from plugins.plugin_loader import PluginLoader
|
||||
|
||||
|
@ -48,8 +48,7 @@ class Train():
|
|||
"""
|
||||
def __init__(self, arguments: argparse.Namespace) -> None:
|
||||
logger.debug("Initializing %s: (args: %s", self.__class__.__name__, arguments)
|
||||
self._args = arguments
|
||||
self._handle_deprecations()
|
||||
self._args = handle_deprecated_cliopts(arguments)
|
||||
|
||||
if self._args.summary:
|
||||
# If just outputting summary we don't need to initialize everything
|
||||
|
@ -68,10 +67,6 @@ class Train():
|
|||
|
||||
logger.debug("Initialized %s", self.__class__.__name__)
|
||||
|
||||
def _handle_deprecations(self) -> None:
|
||||
""" Handle the update of deprecated arguments and output warnings. """
|
||||
return
|
||||
|
||||
def _get_images(self) -> dict[T.Literal["a", "b"], list[str]]:
|
||||
""" Check the image folders exist and contains valid extracted faces. Obtain image paths.
|
||||
|
||||
|
@ -381,8 +376,8 @@ class Train():
|
|||
logger.info(" Using live preview")
|
||||
if sys.stdout.isatty():
|
||||
logger.info(" Press '%s' to save and quit",
|
||||
"Stop" if self._args.redirect_gui or self._args.colab else "ENTER")
|
||||
if not self._args.redirect_gui and not self._args.colab and sys.stdout.isatty():
|
||||
"Stop" if self._args.redirect_gui else "ENTER")
|
||||
if not self._args.redirect_gui and sys.stdout.isatty():
|
||||
logger.info(" Press 'S' to save model weights immediately")
|
||||
logger.info("===================================================")
|
||||
|
||||
|
|
|
@ -8,11 +8,11 @@ import typing as T
|
|||
from argparse import Namespace
|
||||
from multiprocessing import Process
|
||||
|
||||
from lib.utils import VIDEO_EXTENSIONS, FaceswapError
|
||||
from lib.utils import FaceswapError, handle_deprecated_cliopts, VIDEO_EXTENSIONS
|
||||
from .media import AlignmentData
|
||||
from .jobs import Check, Sort, Spatial # noqa pylint: disable=unused-import
|
||||
from .jobs_faces import FromFaces, RemoveFaces, Rename # noqa pylint: disable=unused-import
|
||||
from .jobs_frames import Draw, Extract # noqa pylint: disable=unused-import
|
||||
from .jobs import Check, Sort, Spatial # noqa pylint:disable=unused-import
|
||||
from .jobs_faces import FromFaces, RemoveFaces, Rename # noqa pylint:disable=unused-import
|
||||
from .jobs_frames import Draw, Extract # noqa pylint:disable=unused-import
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
@ -42,7 +42,7 @@ class Alignments():
|
|||
"missing-frames",
|
||||
"no-faces"]
|
||||
|
||||
self._args = arguments
|
||||
self._args = handle_deprecated_cliopts(arguments)
|
||||
self._batch_mode = self._validate_batch_mode()
|
||||
self._locations = self._get_locations()
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#!/usr/bin/env python3
|
||||
""" Command Line Arguments for tools """
|
||||
import argparse
|
||||
import sys
|
||||
import gettext
|
||||
import typing as T
|
||||
|
@ -7,7 +8,6 @@ import typing as T
|
|||
from lib.cli.args import FaceSwapArgs
|
||||
from lib.cli.actions import DirOrFileFullPaths, DirFullPaths, FileFullPaths, Radio, Slider
|
||||
|
||||
|
||||
# LOCALES
|
||||
_LANG = gettext.translation("tools.alignments.cli", localedir="locales", fallback=True)
|
||||
_ = _LANG.gettext
|
||||
|
@ -48,145 +48,174 @@ class AlignmentsArgs(FaceSwapArgs):
|
|||
"folder (-fr and -fc).")
|
||||
output_opts = _(" Use the output option (-o) to process results.")
|
||||
argument_list = []
|
||||
argument_list.append(dict(
|
||||
opts=("-j", "--job"),
|
||||
action=Radio,
|
||||
type=str,
|
||||
choices=("draw", "extract", "from-faces", "missing-alignments", "missing-frames",
|
||||
"multi-faces", "no-faces", "remove-faces", "rename", "sort", "spatial"),
|
||||
group=_("processing"),
|
||||
required=True,
|
||||
help=_("R|Choose which action you want to perform. NB: All actions require an "
|
||||
"alignments file (-a) to be passed in."
|
||||
"\nL|'draw': Draw landmarks on frames in the selected folder/video. A "
|
||||
"subfolder will be created within the frames folder to hold the output.{0}"
|
||||
"\nL|'extract': Re-extract faces from the source frames/video based on "
|
||||
"alignment data. This is a lot quicker than re-detecting faces. Can pass in "
|
||||
"the '-een' (--extract-every-n) parameter to only extract every nth frame.{1}"
|
||||
"\nL|'from-faces': Generate alignment file(s) from a folder of extracted "
|
||||
"faces. if the folder of faces comes from multiple sources, then multiple "
|
||||
"alignments files will be created. NB: for faces which have been extracted "
|
||||
"from folders of source images, rather than a video, a single alignments file "
|
||||
"will be created as there is no way for the process to know how many folders "
|
||||
"of images were originally used. You do not need to provide an alignments file "
|
||||
"path to run this job. {3}"
|
||||
"\nL|'missing-alignments': Identify frames that do not exist in the alignments "
|
||||
"file.{2}{0}"
|
||||
"\nL|'missing-frames': Identify frames in the alignments file that do not "
|
||||
"appear within the frames folder/video.{2}{0}"
|
||||
"\nL|'multi-faces': Identify where multiple faces exist within the alignments "
|
||||
"file.{2}{4}"
|
||||
"\nL|'no-faces': Identify frames that exist within the alignment file but no "
|
||||
"faces were detected.{2}{0}"
|
||||
"\nL|'remove-faces': Remove deleted faces from an alignments file. The "
|
||||
"original alignments file will be backed up.{3}"
|
||||
"\nL|'rename' - Rename faces to correspond with their parent frame and "
|
||||
"position index in the alignments file (i.e. how they are named after running "
|
||||
"extract).{3}"
|
||||
"\nL|'sort': Re-index the alignments from left to right. For alignments with "
|
||||
"multiple faces this will ensure that the left-most face is at index 0."
|
||||
"\nL|'spatial': Perform spatial and temporal filtering to smooth alignments "
|
||||
"(EXPERIMENTAL!)").format(frames_dir, frames_and_faces_dir, output_opts,
|
||||
faces_dir, frames_or_faces_dir)))
|
||||
argument_list.append(dict(
|
||||
opts=("-o", "--output"),
|
||||
action=Radio,
|
||||
type=str,
|
||||
choices=("console", "file", "move"),
|
||||
group=_("processing"),
|
||||
default="console",
|
||||
help=_("R|How to output discovered items ('faces' and 'frames' only):"
|
||||
"\nL|'console': Print the list of frames to the screen. (DEFAULT)"
|
||||
"\nL|'file': Output the list of frames to a text file (stored within the "
|
||||
"source directory)."
|
||||
"\nL|'move': Move the discovered items to a sub-folder within the source "
|
||||
"directory.")))
|
||||
argument_list.append(dict(
|
||||
opts=("-a", "--alignments_file"),
|
||||
action=FileFullPaths,
|
||||
dest="alignments_file",
|
||||
type=str,
|
||||
group=_("data"),
|
||||
argument_list.append({
|
||||
"opts": ("-j", "--job"),
|
||||
"action": Radio,
|
||||
"type": str,
|
||||
"choices": ("draw", "extract", "from-faces", "missing-alignments", "missing-frames",
|
||||
"multi-faces", "no-faces", "remove-faces", "rename", "sort", "spatial"),
|
||||
"group": _("processing"),
|
||||
"required": True,
|
||||
"help": _(
|
||||
"R|Choose which action you want to perform. NB: All actions require an "
|
||||
"alignments file (-a) to be passed in."
|
||||
"\nL|'draw': Draw landmarks on frames in the selected folder/video. A "
|
||||
"subfolder will be created within the frames folder to hold the output.{0}"
|
||||
"\nL|'extract': Re-extract faces from the source frames/video based on "
|
||||
"alignment data. This is a lot quicker than re-detecting faces. Can pass in "
|
||||
"the '-een' (--extract-every-n) parameter to only extract every nth frame.{1}"
|
||||
"\nL|'from-faces': Generate alignment file(s) from a folder of extracted "
|
||||
"faces. if the folder of faces comes from multiple sources, then multiple "
|
||||
"alignments files will be created. NB: for faces which have been extracted "
|
||||
"from folders of source images, rather than a video, a single alignments file "
|
||||
"will be created as there is no way for the process to know how many folders "
|
||||
"of images were originally used. You do not need to provide an alignments file "
|
||||
"path to run this job. {3}"
|
||||
"\nL|'missing-alignments': Identify frames that do not exist in the alignments "
|
||||
"file.{2}{0}"
|
||||
"\nL|'missing-frames': Identify frames in the alignments file that do not "
|
||||
"appear within the frames folder/video.{2}{0}"
|
||||
"\nL|'multi-faces': Identify where multiple faces exist within the alignments "
|
||||
"file.{2}{4}"
|
||||
"\nL|'no-faces': Identify frames that exist within the alignment file but no "
|
||||
"faces were detected.{2}{0}"
|
||||
"\nL|'remove-faces': Remove deleted faces from an alignments file. The "
|
||||
"original alignments file will be backed up.{3}"
|
||||
"\nL|'rename' - Rename faces to correspond with their parent frame and "
|
||||
"position index in the alignments file (i.e. how they are named after running "
|
||||
"extract).{3}"
|
||||
"\nL|'sort': Re-index the alignments from left to right. For alignments with "
|
||||
"multiple faces this will ensure that the left-most face is at index 0."
|
||||
"\nL|'spatial': Perform spatial and temporal filtering to smooth alignments "
|
||||
"(EXPERIMENTAL!)").format(frames_dir, frames_and_faces_dir, output_opts,
|
||||
faces_dir, frames_or_faces_dir)})
|
||||
argument_list.append({
|
||||
"opts": ("-o", "--output"),
|
||||
"action": Radio,
|
||||
"type": str,
|
||||
"choices": ("console", "file", "move"),
|
||||
"group": _("processing"),
|
||||
"default": "console",
|
||||
"help": _(
|
||||
"R|How to output discovered items ('faces' and 'frames' only):"
|
||||
"\nL|'console': Print the list of frames to the screen. (DEFAULT)"
|
||||
"\nL|'file': Output the list of frames to a text file (stored within the "
|
||||
"source directory)."
|
||||
"\nL|'move': Move the discovered items to a sub-folder within the source "
|
||||
"directory.")})
|
||||
argument_list.append({
|
||||
"opts": ("-a", "--alignments_file"),
|
||||
"action": FileFullPaths,
|
||||
"dest": "alignments_file",
|
||||
"type": str,
|
||||
"group": _("data"),
|
||||
# hacky solution to not require alignments file if creating alignments from faces:
|
||||
required=not any(val in sys.argv for val in ["from-faces", "-fr", "-frames_folder"]),
|
||||
filetypes="alignments",
|
||||
help=_("Full path to the alignments file to be processed. If you have input a "
|
||||
"'frames_dir' and don't provide this option, the process will try to find the "
|
||||
"alignments file at the default location. All jobs require an alignments file "
|
||||
"with the exception of 'from-faces' when the alignments file will be generated "
|
||||
"in the specified faces folder.")))
|
||||
argument_list.append(dict(
|
||||
opts=("-fc", "-faces_folder"),
|
||||
action=DirFullPaths,
|
||||
dest="faces_dir",
|
||||
group=_("data"),
|
||||
help=_("Directory containing extracted faces.")))
|
||||
argument_list.append(dict(
|
||||
opts=("-fr", "-frames_folder"),
|
||||
action=DirOrFileFullPaths,
|
||||
dest="frames_dir",
|
||||
filetypes="video",
|
||||
group=_("data"),
|
||||
help=_("Directory containing source frames that faces were extracted from.")))
|
||||
argument_list.append(dict(
|
||||
opts=("-B", "--batch-mode"),
|
||||
action="store_true",
|
||||
dest="batch_mode",
|
||||
default=False,
|
||||
group=_("data"),
|
||||
help=_("R|Run the aligmnents tool on multiple sources. The following jobs support "
|
||||
"batch mode:"
|
||||
"\nL|draw, extract, from-faces, missing-alignments, missing-frames, no-faces, "
|
||||
"sort, spatial."
|
||||
"\nIf batch mode is selected then the other options should be set as follows:"
|
||||
"\nL|alignments_file: For 'sort' and 'spatial' this should point to the parent "
|
||||
"folder containing the alignments files to be processed. For all other jobs "
|
||||
"this option is ignored, and the alignments files must exist at their default "
|
||||
"location relative to the original frames folder/video."
|
||||
"\nL|faces_dir: For 'from-faces' this should be a parent folder, containing "
|
||||
"sub-folders of extracted faces from which to generate alignments files. For "
|
||||
"'extract' this should be a parent folder where sub-folders will be created "
|
||||
"for each extraction to be run. For all other jobs this option is ignored."
|
||||
"\nL|frames_dir: For 'draw', 'extract', 'missing-alignments', 'missing-frames' "
|
||||
"and 'no-faces' this should be a parent folder containing video files or sub-"
|
||||
"folders of images to perform the alignments job on. The alignments file "
|
||||
"should exist at the default location. For all other jobs this option is "
|
||||
"ignored.")))
|
||||
argument_list.append(dict(
|
||||
opts=("-een", "--extract-every-n"),
|
||||
type=int,
|
||||
action=Slider,
|
||||
dest="extract_every_n",
|
||||
min_max=(1, 100),
|
||||
default=1,
|
||||
rounding=1,
|
||||
group=_("extract"),
|
||||
help=_("[Extract only] Extract every 'nth' frame. This option will skip frames when "
|
||||
"extracting faces. For example a value of 1 will extract faces from every "
|
||||
"frame, a value of 10 will extract faces from every 10th frame.")))
|
||||
argument_list.append(dict(
|
||||
opts=("-sz", "--size"),
|
||||
type=int,
|
||||
action=Slider,
|
||||
min_max=(256, 1024),
|
||||
rounding=64,
|
||||
default=512,
|
||||
group=_("extract"),
|
||||
help=_("[Extract only] The output size of extracted faces.")))
|
||||
argument_list.append(dict(
|
||||
opts=("-m", "--min-size"),
|
||||
type=int,
|
||||
action=Slider,
|
||||
min_max=(0, 200),
|
||||
rounding=1,
|
||||
default=0,
|
||||
dest="min_size",
|
||||
group=_("extract"),
|
||||
help=_("[Extract only] Only extract faces that have been resized by this percent or "
|
||||
"more to meet the specified extract size (`-sz`, `--size`). Useful for "
|
||||
"excluding low-res images from a training set. Set to 0 to extract all faces. "
|
||||
"Eg: For an extract size of 512px, A setting of 50 will only include faces "
|
||||
"that have been resized from 256px or above. Setting to 100 will only extract "
|
||||
"faces that have been resized from 512px or above. A setting of 200 will only "
|
||||
"extract faces that have been downscaled from 1024px or above.")))
|
||||
"required": not any(val in sys.argv for val in ["from-faces",
|
||||
"-fr",
|
||||
"-frames_folder"]),
|
||||
"filetypes": "alignments",
|
||||
"help": _(
|
||||
"Full path to the alignments file to be processed. If you have input a "
|
||||
"'frames_dir' and don't provide this option, the process will try to find the "
|
||||
"alignments file at the default location. All jobs require an alignments file "
|
||||
"with the exception of 'from-faces' when the alignments file will be generated "
|
||||
"in the specified faces folder.")})
|
||||
argument_list.append({
|
||||
"opts": ("-c", "-faces_folder"),
|
||||
"action": DirFullPaths,
|
||||
"dest": "faces_dir",
|
||||
"group": ("data"),
|
||||
"help": ("Directory containing extracted faces.")})
|
||||
argument_list.append({
|
||||
"opts": ("-r", "-frames_folder"),
|
||||
"action": DirOrFileFullPaths,
|
||||
"dest": "frames_dir",
|
||||
"filetypes": "video",
|
||||
"group": _("data"),
|
||||
"help": _("Directory containing source frames that faces were extracted from.")})
|
||||
argument_list.append({
|
||||
"opts": ("-B", "--batch-mode"),
|
||||
"action": "store_true",
|
||||
"dest": "batch_mode",
|
||||
"default": False,
|
||||
"group": _("data"),
|
||||
"help": _(
|
||||
"R|Run the aligmnents tool on multiple sources. The following jobs support "
|
||||
"batch mode:"
|
||||
"\nL|draw, extract, from-faces, missing-alignments, missing-frames, no-faces, "
|
||||
"sort, spatial."
|
||||
"\nIf batch mode is selected then the other options should be set as follows:"
|
||||
"\nL|alignments_file: For 'sort' and 'spatial' this should point to the parent "
|
||||
"folder containing the alignments files to be processed. For all other jobs "
|
||||
"this option is ignored, and the alignments files must exist at their default "
|
||||
"location relative to the original frames folder/video."
|
||||
"\nL|faces_dir: For 'from-faces' this should be a parent folder, containing "
|
||||
"sub-folders of extracted faces from which to generate alignments files. For "
|
||||
"'extract' this should be a parent folder where sub-folders will be created "
|
||||
"for each extraction to be run. For all other jobs this option is ignored."
|
||||
"\nL|frames_dir: For 'draw', 'extract', 'missing-alignments', 'missing-frames' "
|
||||
"and 'no-faces' this should be a parent folder containing video files or sub-"
|
||||
"folders of images to perform the alignments job on. The alignments file "
|
||||
"should exist at the default location. For all other jobs this option is "
|
||||
"ignored.")})
|
||||
argument_list.append({
|
||||
"opts": ("-N", "--extract-every-n"),
|
||||
"type": int,
|
||||
"action": Slider,
|
||||
"dest": "extract_every_n",
|
||||
"min_max": (1, 100),
|
||||
"default": 1,
|
||||
"rounding": 1,
|
||||
"group": _("extract"),
|
||||
"help": _(
|
||||
"[Extract only] Extract every 'nth' frame. This option will skip frames when "
|
||||
"extracting faces. For example a value of 1 will extract faces from every frame, "
|
||||
"a value of 10 will extract faces from every 10th frame.")})
|
||||
argument_list.append({
|
||||
"opts": ("-z", "--size"),
|
||||
"type": int,
|
||||
"action": Slider,
|
||||
"min_max": (256, 1024),
|
||||
"rounding": 64,
|
||||
"default": 512,
|
||||
"group": _("extract"),
|
||||
"help": _("[Extract only] The output size of extracted faces.")})
|
||||
argument_list.append({
|
||||
"opts": ("-m", "--min-size"),
|
||||
"type": int,
|
||||
"action": Slider,
|
||||
"min_max": (0, 200),
|
||||
"rounding": 1,
|
||||
"default": 0,
|
||||
"dest": "min_size",
|
||||
"group": _("extract"),
|
||||
"help": _(
|
||||
"[Extract only] Only extract faces that have been resized by this percent or "
|
||||
"more to meet the specified extract size (`-sz`, `--size`). Useful for "
|
||||
"excluding low-res images from a training set. Set to 0 to extract all faces. "
|
||||
"Eg: For an extract size of 512px, A setting of 50 will only include faces "
|
||||
"that have been resized from 256px or above. Setting to 100 will only extract "
|
||||
"faces that have been resized from 512px or above. A setting of 200 will only "
|
||||
"extract faces that have been downscaled from 1024px or above.")})
|
||||
# Deprecated multi-character switches
|
||||
argument_list.append({
|
||||
"opts": ("-fc", ),
|
||||
"type": str,
|
||||
"dest": "depr_faces_dir_fc_c",
|
||||
"help": argparse.SUPPRESS})
|
||||
argument_list.append({
|
||||
"opts": ("-fr", ),
|
||||
"type": str,
|
||||
"dest": "depr_extract_every_n_een_N",
|
||||
"help": argparse.SUPPRESS})
|
||||
argument_list.append({
|
||||
"opts": ("-een", ),
|
||||
"type": int,
|
||||
"dest": "depr_frames_dir_fr_r",
|
||||
"help": argparse.SUPPRESS})
|
||||
argument_list.append({
|
||||
"opts": ("-sz", ),
|
||||
"type": int,
|
||||
"dest": "depr_size_sz_z",
|
||||
"help": argparse.SUPPRESS})
|
||||
return argument_list
|
||||
|
|
|
@ -104,6 +104,8 @@ class Draw():
|
|||
face = DetectedFace()
|
||||
face.from_alignment(alignment, image=image)
|
||||
# Bounding Box
|
||||
assert face.left is not None
|
||||
assert face.top is not None
|
||||
cv2.rectangle(image, (face.left, face.top), (face.right, face.bottom), (255, 0, 0), 1)
|
||||
self._annotate_landmarks(image, np.rint(face.landmarks_xy).astype("int32"))
|
||||
self._annotate_extract_boxes(image, face, idx)
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#!/usr/bin/env python3
|
||||
""" Command Line Arguments for tools """
|
||||
import argparse
|
||||
import gettext
|
||||
|
||||
from lib.cli.args import FaceSwapArgs
|
||||
|
@ -11,10 +12,37 @@ from lib.utils import IMAGE_EXTENSIONS
|
|||
_LANG = gettext.translation("tools.effmpeg.cli", localedir="locales", fallback=True)
|
||||
_ = _LANG.gettext
|
||||
|
||||
|
||||
_HELPTEXT = _("This command allows you to easily execute common ffmpeg tasks.")
|
||||
|
||||
|
||||
def __parse_transpose(value: str) -> str:
|
||||
""" Parse transpose option
|
||||
|
||||
Parameters
|
||||
----------
|
||||
value: str
|
||||
The value to parse
|
||||
|
||||
Returns
|
||||
-------
|
||||
str
|
||||
The option item for the given value
|
||||
"""
|
||||
index = 0
|
||||
opts = ["(0, 90CounterClockwise&VerticalFlip)",
|
||||
"(1, 90Clockwise)",
|
||||
"(2, 90CounterClockwise)",
|
||||
"(3, 90Clockwise&VerticalFlip)"]
|
||||
if len(value) == 1:
|
||||
index = int(value)
|
||||
else:
|
||||
for i in range(5):
|
||||
if value in opts[i]:
|
||||
index = i
|
||||
break
|
||||
return opts[index]
|
||||
|
||||
|
||||
class EffmpegArgs(FaceSwapArgs):
|
||||
""" Class to parse the command line arguments for EFFMPEG tool """
|
||||
|
||||
|
@ -24,167 +52,184 @@ class EffmpegArgs(FaceSwapArgs):
|
|||
return _("A wrapper for ffmpeg for performing image <> video converting.")
|
||||
|
||||
@staticmethod
|
||||
def __parse_transpose(value):
|
||||
index = 0
|
||||
opts = ["(0, 90CounterClockwise&VerticalFlip)",
|
||||
"(1, 90Clockwise)",
|
||||
"(2, 90CounterClockwise)",
|
||||
"(3, 90Clockwise&VerticalFlip)"]
|
||||
if len(value) == 1:
|
||||
index = int(value)
|
||||
else:
|
||||
for i in range(5):
|
||||
if value in opts[i]:
|
||||
index = i
|
||||
break
|
||||
return opts[index]
|
||||
|
||||
def get_argument_list(self):
|
||||
argument_list = list()
|
||||
argument_list.append(dict(
|
||||
opts=('-a', '--action'),
|
||||
action=Radio,
|
||||
dest="action",
|
||||
choices=("extract", "gen-vid", "get-fps", "get-info", "mux-audio", "rescale", "rotate",
|
||||
"slice"),
|
||||
default="extract",
|
||||
help=_("R|Choose which action you want ffmpeg ffmpeg to do."
|
||||
"\nL|'extract': turns videos into images "
|
||||
"\nL|'gen-vid': turns images into videos "
|
||||
"\nL|'get-fps' returns the chosen video's fps."
|
||||
"\nL|'get-info' returns information about a video."
|
||||
"\nL|'mux-audio' add audio from one video to another."
|
||||
"\nL|'rescale' resize video."
|
||||
"\nL|'rotate' rotate video."
|
||||
"\nL|'slice' cuts a portion of the video into a separate video file.")))
|
||||
argument_list.append(dict(
|
||||
opts=('-i', '--input'),
|
||||
action=ContextFullPaths,
|
||||
dest="input",
|
||||
default="input",
|
||||
help=_("Input file."),
|
||||
group=_("data"),
|
||||
required=True,
|
||||
action_option="-a",
|
||||
filetypes="video"))
|
||||
argument_list.append(dict(
|
||||
opts=('-o', '--output'),
|
||||
action=ContextFullPaths,
|
||||
group=_("data"),
|
||||
default="",
|
||||
dest="output",
|
||||
help=_("Output file. If no output is specified then: if the output is meant to be a "
|
||||
"video then a video called 'out.mkv' will be created in the input directory; "
|
||||
"if the output is meant to be a directory then a directory called 'out' will "
|
||||
"be created inside the input directory. Note: the chosen output file extension "
|
||||
"will determine the file encoding."),
|
||||
action_option="-a",
|
||||
filetypes="video"))
|
||||
argument_list.append(dict(
|
||||
opts=('-r', '--reference-video'),
|
||||
action=FileFullPaths,
|
||||
dest="ref_vid",
|
||||
group=_("data"),
|
||||
default=None,
|
||||
help=_("Path to reference video if 'input' was not a video."),
|
||||
filetypes="video"))
|
||||
argument_list.append(dict(
|
||||
opts=('-fps', '--fps'),
|
||||
type=str,
|
||||
dest="fps",
|
||||
group=_("output"),
|
||||
default="-1.0",
|
||||
help=_("Provide video fps. Can be an integer, float or fraction. Negative values will "
|
||||
"will make the program try to get the fps from the input or reference "
|
||||
"videos.")))
|
||||
argument_list.append(dict(
|
||||
opts=("-ef", "--extract-filetype"),
|
||||
action=Radio,
|
||||
choices=IMAGE_EXTENSIONS,
|
||||
dest="extract_ext",
|
||||
group=_("output"),
|
||||
default=".png",
|
||||
help=_("Image format that extracted images should be saved as. '.bmp' will offer the "
|
||||
"fastest extraction speed, but will take the most storage space. '.png' will "
|
||||
"be slower but will take less storage.")))
|
||||
argument_list.append(dict(
|
||||
opts=('-s', '--start'),
|
||||
type=str,
|
||||
dest="start",
|
||||
group=_("clip"),
|
||||
default="00:00:00",
|
||||
help=_("Enter the start time from which an action is to be applied. Default: "
|
||||
"00:00:00, in HH:MM:SS format. You can also enter the time with or without the "
|
||||
"colons, e.g. 00:0000 or 026010.")))
|
||||
argument_list.append(dict(
|
||||
opts=('-e', '--end'),
|
||||
type=str,
|
||||
dest="end",
|
||||
group=_("clip"),
|
||||
default="00:00:00",
|
||||
help=_("Enter the end time to which an action is to be applied. If both an end time "
|
||||
"and duration are set, then the end time will be used and the duration will be "
|
||||
"ignored. Default: 00:00:00, in HH:MM:SS.")))
|
||||
argument_list.append(dict(
|
||||
opts=('-d', '--duration'),
|
||||
type=str,
|
||||
dest="duration",
|
||||
group=_("clip"),
|
||||
default="00:00:00",
|
||||
help=_("Enter the duration of the chosen action, for example if you enter 00:00:10 "
|
||||
"for slice, then the first 10 seconds after and including the start time will "
|
||||
"be cut out into a new video. Default: 00:00:00, in HH:MM:SS format. You can "
|
||||
"also enter the time with or without the colons, e.g. 00:0000 or 026010.")))
|
||||
argument_list.append(dict(
|
||||
opts=('-m', '--mux-audio'),
|
||||
action="store_true",
|
||||
dest="mux_audio",
|
||||
group=_("output"),
|
||||
default=False,
|
||||
help=_("Mux the audio from the reference video into the input video. This option is "
|
||||
"only used for the 'gen-vid' action. 'mux-audio' action has this turned on "
|
||||
"implicitly.")))
|
||||
argument_list.append(dict(
|
||||
opts=('-tr', '--transpose'),
|
||||
choices=("(0, 90CounterClockwise&VerticalFlip)",
|
||||
"(1, 90Clockwise)",
|
||||
"(2, 90CounterClockwise)",
|
||||
"(3, 90Clockwise&VerticalFlip)"),
|
||||
type=lambda v: self.__parse_transpose(v), # pylint:disable=unnecessary-lambda
|
||||
dest="transpose",
|
||||
group=_("rotate"),
|
||||
default=None,
|
||||
help=_("Transpose the video. If transpose is set, then degrees will be ignored. For "
|
||||
"cli you can enter either the number or the long command name, e.g. to use (1, "
|
||||
"90Clockwise) -tr 1 or -tr 90Clockwise")))
|
||||
argument_list.append(dict(
|
||||
opts=('-de', '--degrees'),
|
||||
type=str,
|
||||
dest="degrees",
|
||||
default=None,
|
||||
group=_("rotate"),
|
||||
help=_("Rotate the video clockwise by the given number of degrees.")))
|
||||
argument_list.append(dict(
|
||||
opts=('-sc', '--scale'),
|
||||
type=str,
|
||||
dest="scale",
|
||||
group=_("output"),
|
||||
default="1920x1080",
|
||||
help=_("Set the new resolution scale if the chosen action is 'rescale'.")))
|
||||
argument_list.append(dict(
|
||||
opts=('-q', '--quiet'),
|
||||
action="store_true",
|
||||
dest="quiet",
|
||||
group=_("settings"),
|
||||
default=False,
|
||||
help=_("Reduces output verbosity so that only serious errors are printed. If both "
|
||||
"quiet and verbose are set, verbose will override quiet.")))
|
||||
argument_list.append(dict(
|
||||
opts=('-v', '--verbose'),
|
||||
action="store_true",
|
||||
dest="verbose",
|
||||
group=_("settings"),
|
||||
default=False,
|
||||
help=_("Increases output verbosity. If both quiet and verbose are set, verbose will "
|
||||
"override quiet.")))
|
||||
def get_argument_list():
|
||||
argument_list = []
|
||||
argument_list.append({
|
||||
"opts": ('-a', '--action'),
|
||||
"action": Radio,
|
||||
"dest": "action",
|
||||
"choices": ("extract", "gen-vid", "get-fps", "get-info", "mux-audio", "rescale",
|
||||
"rotate", "slice"),
|
||||
"default": "extract",
|
||||
"help": _("R|Choose which action you want ffmpeg ffmpeg to do."
|
||||
"\nL|'extract': turns videos into images "
|
||||
"\nL|'gen-vid': turns images into videos "
|
||||
"\nL|'get-fps' returns the chosen video's fps."
|
||||
"\nL|'get-info' returns information about a video."
|
||||
"\nL|'mux-audio' add audio from one video to another."
|
||||
"\nL|'rescale' resize video."
|
||||
"\nL|'rotate' rotate video."
|
||||
"\nL|'slice' cuts a portion of the video into a separate video file.")})
|
||||
argument_list.append({
|
||||
"opts": ('-i', '--input'),
|
||||
"action": ContextFullPaths,
|
||||
"dest": "input",
|
||||
"default": "input",
|
||||
"help": _("Input file."),
|
||||
"group": _("data"),
|
||||
"required": True,
|
||||
"action_option": "-a",
|
||||
"filetypes": "video"})
|
||||
argument_list.append({
|
||||
"opts": ('-o', '--output'),
|
||||
"action": ContextFullPaths,
|
||||
"group": _("data"),
|
||||
"default": "",
|
||||
"dest": "output",
|
||||
"help": _("Output file. If no output is specified then: if the output is meant to be "
|
||||
"a video then a video called 'out.mkv' will be created in the input "
|
||||
"directory; if the output is meant to be a directory then a directory "
|
||||
"called 'out' will be created inside the input directory. Note: the chosen "
|
||||
"output file extension will determine the file encoding."),
|
||||
"action_option": "-a",
|
||||
"filetypes": "video"})
|
||||
argument_list.append({
|
||||
"opts": ('-r', '--reference-video'),
|
||||
"action": FileFullPaths,
|
||||
"dest": "ref_vid",
|
||||
"group": _("data"),
|
||||
"default": None,
|
||||
"help": _("Path to reference video if 'input' was not a video."),
|
||||
"filetypes": "video"})
|
||||
argument_list.append({
|
||||
"opts": ('-R', '--fps'),
|
||||
"type": str,
|
||||
"dest": "fps",
|
||||
"group": _("output"),
|
||||
"default": "-1.0",
|
||||
"help": _("Provide video fps. Can be an integer, float or fraction. Negative values "
|
||||
"will will make the program try to get the fps from the input or reference "
|
||||
"videos.")})
|
||||
argument_list.append({
|
||||
"opts": ("-E", "--extract-filetype"),
|
||||
"action": Radio,
|
||||
"choices": IMAGE_EXTENSIONS,
|
||||
"dest": "extract_ext",
|
||||
"group": _("output"),
|
||||
"default": ".png",
|
||||
"help": _("Image format that extracted images should be saved as. '.bmp' will offer "
|
||||
"the fastest extraction speed, but will take the most storage space. '.png' "
|
||||
"will be slower but will take less storage.")})
|
||||
argument_list.append({
|
||||
"opts": ('-s', '--start'),
|
||||
"type": str,
|
||||
"dest": "start",
|
||||
"group": _("clip"),
|
||||
"default": "00:00:00",
|
||||
"help": _("Enter the start time from which an action is to be applied. Default: "
|
||||
"00:00:00, in HH:MM:SS format. You can also enter the time with or without "
|
||||
"the colons, e.g. 00:0000 or 026010.")})
|
||||
argument_list.append({
|
||||
"opts": ('-e', '--end'),
|
||||
"type": str,
|
||||
"dest": "end",
|
||||
"group": _("clip"),
|
||||
"default": "00:00:00",
|
||||
"help": _("Enter the end time to which an action is to be applied. If both an end "
|
||||
"time and duration are set, then the end time will be used and the duration "
|
||||
"will be ignored. Default: 00:00:00, in HH:MM:SS.")})
|
||||
argument_list.append({
|
||||
"opts": ('-d', '--duration'),
|
||||
"type": str,
|
||||
"dest": "duration",
|
||||
"group": _("clip"),
|
||||
"default": "00:00:00",
|
||||
"help": _("Enter the duration of the chosen action, for example if you enter 00:00:10 "
|
||||
"for slice, then the first 10 seconds after and including the start time "
|
||||
"will be cut out into a new video. Default: 00:00:00, in HH:MM:SS format. "
|
||||
"You can also enter the time with or without the colons, e.g. 00:0000 or "
|
||||
"026010.")})
|
||||
argument_list.append({
|
||||
"opts": ('-m', '--mux-audio'),
|
||||
"action": "store_true",
|
||||
"dest": "mux_audio",
|
||||
"group": _("output"),
|
||||
"default": False,
|
||||
"help": _("Mux the audio from the reference video into the input video. This option "
|
||||
"is only used for the 'gen-vid' action. 'mux-audio' action has this turned "
|
||||
"on implicitly.")})
|
||||
argument_list.append({
|
||||
"opts": ('-T', '--transpose'),
|
||||
"choices": ("(0, 90CounterClockwise&VerticalFlip)",
|
||||
"(1, 90Clockwise)",
|
||||
"(2, 90CounterClockwise)",
|
||||
"(3, 90Clockwise&VerticalFlip)"),
|
||||
"type": lambda v: __parse_transpose(v), # pylint:disable=unnecessary-lambda
|
||||
"dest": "transpose",
|
||||
"group": _("rotate"),
|
||||
"default": None,
|
||||
"help": _("Transpose the video. If transpose is set, then degrees will be ignored. "
|
||||
"For cli you can enter either the number or the long command name, e.g. to "
|
||||
"use (1, 90Clockwise) -tr 1 or -tr 90Clockwise")})
|
||||
argument_list.append({
|
||||
"opts": ('-D', '--degrees'),
|
||||
"type": str,
|
||||
"dest": "degrees",
|
||||
"default": None,
|
||||
"group": _("rotate"),
|
||||
"help": _("Rotate the video clockwise by the given number of degrees.")})
|
||||
argument_list.append({
|
||||
"opts": ('-S', '--scale'),
|
||||
"type": str,
|
||||
"dest": "scale",
|
||||
"group": _("output"),
|
||||
"default": "1920x1080",
|
||||
"help": _("Set the new resolution scale if the chosen action is 'rescale'.")})
|
||||
argument_list.append({
|
||||
"opts": ('-q', '--quiet'),
|
||||
"action": "store_true",
|
||||
"dest": "quiet",
|
||||
"group": _("settings"),
|
||||
"default": False,
|
||||
"help": _("Reduces output verbosity so that only serious errors are printed. If both "
|
||||
"quiet and verbose are set, verbose will override quiet.")})
|
||||
argument_list.append({
|
||||
"opts": ('-v', '--verbose'),
|
||||
"action": "store_true",
|
||||
"dest": "verbose",
|
||||
"group": _("settings"),
|
||||
"default": False,
|
||||
"help": _("Increases output verbosity. If both quiet and verbose are set, verbose "
|
||||
"will override quiet.")})
|
||||
# Deprecated multi-character switches
|
||||
argument_list.append({
|
||||
"opts": ('-fps', ),
|
||||
"type": str,
|
||||
"dest": "depr_fps_fps_R",
|
||||
"help": argparse.SUPPRESS})
|
||||
argument_list.append({
|
||||
"opts": ("-ef", ),
|
||||
"type": str,
|
||||
"choices": IMAGE_EXTENSIONS,
|
||||
"dest": "depr_extract_ext_et_E",
|
||||
"help": argparse.SUPPRESS})
|
||||
argument_list.append({
|
||||
"opts": ('-tr', ),
|
||||
"choices": ("(0, 90CounterClockwise&VerticalFlip)",
|
||||
"(1, 90Clockwise)",
|
||||
"(2, 90CounterClockwise)",
|
||||
"(3, 90Clockwise&VerticalFlip)"),
|
||||
"type": lambda v: __parse_transpose(v), # pylint:disable=unnecessary-lambda
|
||||
"dest": "depr_transpose_tr_T",
|
||||
"help": argparse.SUPPRESS})
|
||||
argument_list.append({
|
||||
"opts": ('-de', ),
|
||||
"type": str,
|
||||
"dest": "depr_degrees_de_D",
|
||||
"help": argparse.SUPPRESS})
|
||||
argument_list.append({
|
||||
"opts": ('-sc', ),
|
||||
"type": str,
|
||||
"dest": "depr_scale_sc_S",
|
||||
"help": argparse.SUPPRESS})
|
||||
return argument_list
|
||||
|
|
|
@ -17,7 +17,7 @@ import imageio_ffmpeg as im_ffm
|
|||
from ffmpy import FFmpeg, FFRuntimeError
|
||||
|
||||
# faceswap imports
|
||||
from lib.utils import IMAGE_EXTENSIONS, VIDEO_EXTENSIONS
|
||||
from lib.utils import handle_deprecated_cliopts, IMAGE_EXTENSIONS, VIDEO_EXTENSIONS
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
@ -29,7 +29,7 @@ class DataItem():
|
|||
"""
|
||||
vid_ext = VIDEO_EXTENSIONS
|
||||
# future option in effmpeg to use audio file for muxing
|
||||
audio_ext = ['.aiff', '.flac', '.mp3', '.wav']
|
||||
audio_ext = [".aiff", ".flac", ".mp3", ".wav"]
|
||||
img_ext = IMAGE_EXTENSIONS
|
||||
|
||||
def __init__(self, path=None, name=None, item_type=None, ext=None,
|
||||
|
@ -68,11 +68,11 @@ class DataItem():
|
|||
if self.path is not None:
|
||||
item_ext = os.path.splitext(self.path)[1].lower()
|
||||
if item_ext in DataItem.vid_ext:
|
||||
item_type = 'vid'
|
||||
item_type = "vid"
|
||||
elif item_ext in DataItem.audio_ext:
|
||||
item_type = 'audio'
|
||||
item_type = "audio"
|
||||
else:
|
||||
item_type = 'dir'
|
||||
item_type = "dir"
|
||||
self.type = item_type
|
||||
self.ext = item_ext
|
||||
logger.debug("path: '%s', type: '%s', ext: '%s'", self.path, self.type, self.ext)
|
||||
|
@ -140,16 +140,16 @@ class Effmpeg():
|
|||
# Class variable that stores the common ffmpeg arguments based on verbosity
|
||||
__common_ffmpeg_args_dict = {"normal": "-hide_banner ",
|
||||
"quiet": "-loglevel panic -hide_banner ",
|
||||
"verbose": ''}
|
||||
"verbose": ""}
|
||||
|
||||
# _common_ffmpeg_args is the class variable that will get used by various
|
||||
# actions and it will be set by the process_arguments() method based on
|
||||
# passed verbosity
|
||||
_common_ffmpeg_args = ''
|
||||
_common_ffmpeg_args = ""
|
||||
|
||||
def __init__(self, arguments):
|
||||
logger.debug("Initializing %s: (arguments: %s)", self.__class__.__name__, arguments)
|
||||
self.args = arguments
|
||||
self.args = handle_deprecated_cliopts(arguments)
|
||||
self.exe = im_ffm.get_ffmpeg_exe()
|
||||
self.input = DataItem()
|
||||
self.output = DataItem()
|
||||
|
@ -160,17 +160,8 @@ class Effmpeg():
|
|||
self.print_ = False
|
||||
logger.debug("Initialized %s", self.__class__.__name__)
|
||||
|
||||
def process(self):
|
||||
""" EFFMPEG Process """
|
||||
logger.debug("Running Effmpeg")
|
||||
# Format action to match the method name
|
||||
self.args.action = self.args.action.replace('-', '_')
|
||||
logger.debug("action: '%s", self.args.action)
|
||||
|
||||
# Instantiate input DataItem object
|
||||
self.input = DataItem(path=self.args.input)
|
||||
|
||||
# Instantiate output DataItem object
|
||||
def _set_output(self) -> None:
|
||||
""" Set :attr:`output` based on input arguments """
|
||||
if self.args.action in self._actions_have_dir_output:
|
||||
self.output = DataItem(path=self.__get_default_output())
|
||||
elif self.args.action in self._actions_have_vid_output:
|
||||
|
@ -180,70 +171,101 @@ class Effmpeg():
|
|||
else:
|
||||
self.output = DataItem(path=self.__get_default_output())
|
||||
|
||||
if self.args.ref_vid is None \
|
||||
or self.args.ref_vid == '':
|
||||
def _set_ref_video(self) -> None:
|
||||
""" Set :attr:`ref_vid` based on input arguments """
|
||||
if self.args.ref_vid is None or self.args.ref_vid == "":
|
||||
self.args.ref_vid = None
|
||||
|
||||
# Instantiate ref_vid DataItem object
|
||||
self.ref_vid = DataItem(path=self.args.ref_vid)
|
||||
|
||||
# Check that correct input and output arguments were provided
|
||||
def _check_inputs(self) -> None:
|
||||
""" Validate provided arguments are valid
|
||||
|
||||
Raises
|
||||
------
|
||||
ValueError
|
||||
If provided arguments are not valid
|
||||
"""
|
||||
|
||||
if self.args.action in self._actions_have_dir_input and not self.input.is_type("dir"):
|
||||
raise ValueError("The chosen action requires a directory as its "
|
||||
"input, but you entered: "
|
||||
"{}".format(self.input.path))
|
||||
raise ValueError("The chosen action requires a directory as its input, but you "
|
||||
f"entered: {self.input.path}")
|
||||
if self.args.action in self._actions_have_vid_input and not self.input.is_type("vid"):
|
||||
raise ValueError("The chosen action requires a video as its "
|
||||
"input, but you entered: "
|
||||
"{}".format(self.input.path))
|
||||
raise ValueError("The chosen action requires a video as its input, but you entered: "
|
||||
f"{self.input.path}")
|
||||
if self.args.action in self._actions_have_dir_output and not self.output.is_type("dir"):
|
||||
raise ValueError("The chosen action requires a directory as its "
|
||||
"output, but you entered: "
|
||||
"{}".format(self.output.path))
|
||||
raise ValueError("The chosen action requires a directory as its output, but you "
|
||||
f"entered: {self.output.path}")
|
||||
if self.args.action in self._actions_have_vid_output and not self.output.is_type("vid"):
|
||||
raise ValueError("The chosen action requires a video as its "
|
||||
"output, but you entered: "
|
||||
"{}".format(self.output.path))
|
||||
raise ValueError("The chosen action requires a video as its output, but you entered: "
|
||||
f"{self.output.path}")
|
||||
|
||||
# Check that ref_vid is a video when it needs to be
|
||||
if self.args.action in self._actions_req_ref_video:
|
||||
if self.ref_vid.is_type("none"):
|
||||
raise ValueError("The file chosen as the reference video is "
|
||||
"not a video, either leave the field blank "
|
||||
"or type 'None': "
|
||||
"{}".format(self.ref_vid.path))
|
||||
raise ValueError("The file chosen as the reference video is not a video, either "
|
||||
f"leave the field blank or type 'None': {self.ref_vid.path}")
|
||||
elif self.args.action in self._actions_can_use_ref_video:
|
||||
if self.ref_vid.is_type("none"):
|
||||
logger.warning("Warning: no reference video was supplied, even though "
|
||||
"one may be used with the chosen action. If this is "
|
||||
"intentional then ignore this warning.")
|
||||
|
||||
# Process start and duration arguments
|
||||
def _set_times(self) -> None:
|
||||
"""Set start, end and duration attributes """
|
||||
self.start = self.parse_time(self.args.start)
|
||||
self.end = self.parse_time(self.args.end)
|
||||
if not self.__check_equals_time(self.args.end, "00:00:00"):
|
||||
self.duration = self.__get_duration(self.start, self.end)
|
||||
else:
|
||||
self.duration = self.parse_time(str(self.args.duration))
|
||||
|
||||
def _set_fps(self) -> None:
|
||||
""" Set :attr:`arguments.fps` based on input arguments"""
|
||||
# If fps was left blank in gui, set it to default -1.0 value
|
||||
if self.args.fps == '':
|
||||
if self.args.fps == "":
|
||||
self.args.fps = str(-1.0)
|
||||
|
||||
# Try to set fps automatically if needed and not supplied by user
|
||||
if self.args.action in self._actions_req_fps \
|
||||
and self.__convert_fps(self.args.fps) <= 0:
|
||||
if self.__check_have_fps(['r', 'i']):
|
||||
if self.__check_have_fps(["r", "i"]):
|
||||
_error_str = "No fps, input or reference video was supplied, "
|
||||
_error_str += "hence it's not possible to "
|
||||
_error_str += "'{}'.".format(self.args.action)
|
||||
_error_str += f"'{self.args.action}'."
|
||||
raise ValueError(_error_str)
|
||||
if self.output.fps is not None and self.__check_have_fps(['r', 'i']):
|
||||
if self.output.fps is not None and self.__check_have_fps(["r", "i"]):
|
||||
self.args.fps = self.output.fps
|
||||
elif self.ref_vid.fps is not None and self.__check_have_fps(['i']):
|
||||
elif self.ref_vid.fps is not None and self.__check_have_fps(["i"]):
|
||||
self.args.fps = self.ref_vid.fps
|
||||
elif self.input.fps is not None and self.__check_have_fps(['r']):
|
||||
elif self.input.fps is not None and self.__check_have_fps(["r"]):
|
||||
self.args.fps = self.input.fps
|
||||
|
||||
def process(self):
|
||||
""" EFFMPEG Process """
|
||||
logger.debug("Running Effmpeg")
|
||||
# Format action to match the method name
|
||||
self.args.action = self.args.action.replace("-", "_")
|
||||
logger.debug("action: '%s'", self.args.action)
|
||||
|
||||
# Instantiate input DataItem object
|
||||
self.input = DataItem(path=self.args.input)
|
||||
|
||||
# Instantiate output DataItem object
|
||||
self._set_output()
|
||||
|
||||
# Instantiate ref_vid DataItem object
|
||||
self._set_ref_video()
|
||||
|
||||
# Check that correct input and output arguments were provided
|
||||
self._check_inputs()
|
||||
|
||||
# Process start and duration arguments
|
||||
self._set_times()
|
||||
|
||||
# Set fps
|
||||
self._set_fps()
|
||||
|
||||
# Processing transpose
|
||||
if self.args.transpose is None or \
|
||||
self.args.transpose.lower() == "none":
|
||||
|
@ -254,7 +276,7 @@ class Effmpeg():
|
|||
# Processing degrees
|
||||
if self.args.degrees is None \
|
||||
or self.args.degrees.lower() == "none" \
|
||||
or self.args.degrees == '':
|
||||
or self.args.degrees == "":
|
||||
self.args.degrees = None
|
||||
elif self.args.transpose is None:
|
||||
try:
|
||||
|
@ -300,7 +322,7 @@ class Effmpeg():
|
|||
input_, output, fps, extract_ext, start, duration)
|
||||
_input_opts = Effmpeg._common_ffmpeg_args[:]
|
||||
if start is not None and duration is not None:
|
||||
_input_opts += '-ss {} -t {}'.format(start, duration)
|
||||
_input_opts += f"-ss {start} -t {duration}"
|
||||
_input = {input_.path: _input_opts}
|
||||
_output_opts = '-y -vf fps="' + str(fps) + '" -q:v 1'
|
||||
_output_path = output.path + "/" + input_.name + "_%05d" + extract_ext
|
||||
|
@ -318,12 +340,12 @@ class Effmpeg():
|
|||
filename = Effmpeg.__get_extracted_filename(input_.path)
|
||||
_input_opts = Effmpeg._common_ffmpeg_args[:]
|
||||
_input_path = os.path.join(input_.path, filename)
|
||||
_fps_arg = '-r ' + str(fps) + ' '
|
||||
_fps_arg = "-r " + str(fps) + " "
|
||||
_input_opts += _fps_arg + "-f image2 "
|
||||
_output_opts = '-y ' + _fps_arg + ' -c:v libx264'
|
||||
_output_opts = "-y " + _fps_arg + " -c:v libx264"
|
||||
if mux_audio:
|
||||
_ref_vid_opts = '-c copy -map 0:0 -map 1:1'
|
||||
_output_opts = _ref_vid_opts + ' ' + _output_opts
|
||||
_ref_vid_opts = "-c copy -map 0:0 -map 1:1"
|
||||
_output_opts = _ref_vid_opts + " " + _output_opts
|
||||
_inputs = OrderedDict([(_input_path, _input_opts), (ref_vid.path, None)])
|
||||
else:
|
||||
_inputs = {_input_path: _input_opts}
|
||||
|
@ -377,13 +399,12 @@ class Effmpeg():
|
|||
transpose=None, exe=None, **kwargs):
|
||||
""" Rotate Video """
|
||||
if transpose is None and degrees is None:
|
||||
raise ValueError("You have not supplied a valid transpose or "
|
||||
"degrees value:\ntranspose: {}\ndegrees: "
|
||||
"{}".format(transpose, degrees))
|
||||
raise ValueError("You have not supplied a valid transpose or degrees value:\n"
|
||||
f"transpose: {transpose}\ndegrees: {degrees}")
|
||||
|
||||
_input_opts = Effmpeg._common_ffmpeg_args[:]
|
||||
_output_opts = '-y -c:a copy -vf '
|
||||
_bilinear = ''
|
||||
_output_opts = "-y -c:a copy -vf "
|
||||
_bilinear = ""
|
||||
if transpose is not None:
|
||||
_output_opts += 'transpose="' + str(transpose) + '"'
|
||||
elif int(degrees) != 0:
|
||||
|
@ -402,7 +423,7 @@ class Effmpeg():
|
|||
""" Mux Audio """
|
||||
_input_opts = Effmpeg._common_ffmpeg_args[:]
|
||||
_ref_vid_opts = None
|
||||
_output_opts = '-y -c copy -map 0:0 -map 1:1 -shortest'
|
||||
_output_opts = "-y -c copy -map 0:0 -map 1:1 -shortest"
|
||||
_inputs = OrderedDict([(input_.path, _input_opts), (ref_vid.path, _ref_vid_opts)])
|
||||
_outputs = {output.path: _output_opts}
|
||||
Effmpeg.__run_ffmpeg(exe=exe, inputs=_inputs, outputs=_outputs)
|
||||
|
@ -433,28 +454,28 @@ class Effmpeg():
|
|||
if the user didn't specify it. """
|
||||
if self.args.output == "":
|
||||
if self.args.action in self._actions_have_dir_output:
|
||||
retval = os.path.join(self.input.dirname, 'out')
|
||||
retval = os.path.join(self.input.dirname, "out")
|
||||
elif self.args.action in self._actions_have_vid_output:
|
||||
if self.input.is_type("media"):
|
||||
# Using the same extension as input leads to very poor
|
||||
# output quality, hence the default is mkv for now
|
||||
retval = os.path.join(self.input.dirname, "out.mkv") # + self.input.ext)
|
||||
else: # case if input was a directory
|
||||
retval = os.path.join(self.input.dirname, 'out.mkv')
|
||||
retval = os.path.join(self.input.dirname, "out.mkv")
|
||||
else:
|
||||
retval = self.args.output
|
||||
logger.debug(retval)
|
||||
return retval
|
||||
|
||||
def __check_have_fps(self, items):
|
||||
items_to_check = list()
|
||||
items_to_check = []
|
||||
for i in items:
|
||||
if i == 'r':
|
||||
items_to_check.append('ref_vid')
|
||||
elif i == 'i':
|
||||
items_to_check.append('input')
|
||||
elif i == 'o':
|
||||
items_to_check.append('output')
|
||||
if i == "r":
|
||||
items_to_check.append("ref_vid")
|
||||
elif i == "i":
|
||||
items_to_check.append("input")
|
||||
elif i == "o":
|
||||
items_to_check.append("output")
|
||||
|
||||
return all(getattr(self, i).fps is None for i in items_to_check)
|
||||
|
||||
|
@ -470,8 +491,7 @@ class Effmpeg():
|
|||
if ffe.exit_code == 255:
|
||||
pass
|
||||
else:
|
||||
raise ValueError("An unexpected FFRuntimeError occurred: "
|
||||
"{}".format(ffe))
|
||||
raise ValueError(f"An unexpected FFRuntimeError occurred: {ffe}") from ffe
|
||||
except KeyboardInterrupt:
|
||||
pass # Do nothing if voluntary interruption
|
||||
logger.debug("ffmpeg finished")
|
||||
|
@ -479,8 +499,8 @@ class Effmpeg():
|
|||
@staticmethod
|
||||
def __convert_fps(fps):
|
||||
""" Convert to Frames per Second """
|
||||
if '/' in fps:
|
||||
_fps = fps.split('/')
|
||||
if "/" in fps:
|
||||
_fps = fps.split("/")
|
||||
retval = float(_fps[0]) / float(_fps[1])
|
||||
else:
|
||||
retval = float(fps)
|
||||
|
@ -490,15 +510,13 @@ class Effmpeg():
|
|||
@staticmethod
|
||||
def __get_duration(start_time, end_time):
|
||||
""" Get the duration """
|
||||
start = [int(i) for i in start_time.split(':')]
|
||||
end = [int(i) for i in end_time.split(':')]
|
||||
start = [int(i) for i in start_time.split(":")]
|
||||
end = [int(i) for i in end_time.split(":")]
|
||||
start = datetime.timedelta(hours=start[0], minutes=start[1], seconds=start[2])
|
||||
end = datetime.timedelta(hours=end[0], minutes=end[1], seconds=end[2])
|
||||
delta = end - start
|
||||
secs = delta.total_seconds()
|
||||
retval = '{:02}:{:02}:{:02}'.format(int(secs // 3600),
|
||||
int(secs % 3600 // 60),
|
||||
int(secs % 60))
|
||||
retval = f"{int(secs // 3600):02}:{int(secs % 3600 // 60):02}:{int(secs % 60):02}"
|
||||
logger.debug(retval)
|
||||
return retval
|
||||
|
||||
|
@ -506,7 +524,7 @@ class Effmpeg():
|
|||
def __get_extracted_filename(path):
|
||||
""" Get the extracted filename """
|
||||
logger.debug("path: '%s'", path)
|
||||
filename = ''
|
||||
filename = ""
|
||||
for file in os.listdir(path):
|
||||
if any(i in file for i in DataItem.img_ext):
|
||||
filename = file
|
||||
|
@ -515,7 +533,7 @@ class Effmpeg():
|
|||
filename, img_ext = os.path.splitext(filename)
|
||||
zero_pad = Effmpeg.__get_zero_pad(filename)
|
||||
name = filename[:-zero_pad]
|
||||
retval = "{}%{}d{}".format(name, zero_pad, img_ext)
|
||||
retval = f"{name}%{zero_pad}d{img_ext}"
|
||||
logger.debug("filename: %s, img_ext: '%s', zero_pad: %s, name: '%s'",
|
||||
filename, img_ext, zero_pad, name)
|
||||
logger.debug(retval)
|
||||
|
@ -527,25 +545,17 @@ class Effmpeg():
|
|||
chkstring = filename[::-1]
|
||||
logger.trace("filename: %s, chkstring: %s", filename, chkstring)
|
||||
pos = 0
|
||||
for pos in range(len(chkstring)):
|
||||
if not chkstring[pos].isdigit():
|
||||
for char in chkstring:
|
||||
if not char.isdigit():
|
||||
break
|
||||
logger.debug("filename: '%s', pos: %s", filename, pos)
|
||||
return pos
|
||||
|
||||
@staticmethod
|
||||
def __check_is_valid_time(value):
|
||||
""" Check valid time """
|
||||
val = value.replace(':', '')
|
||||
retval = val.isdigit()
|
||||
logger.debug("value: '%s', retval: %s", value, retval)
|
||||
return retval
|
||||
|
||||
@staticmethod
|
||||
def __check_equals_time(value, time):
|
||||
""" Check equals time """
|
||||
val = value.replace(':', '')
|
||||
tme = time.replace(':', '')
|
||||
val = value.replace(":", "")
|
||||
tme = time.replace(":", "")
|
||||
retval = val.zfill(6) == tme.zfill(6)
|
||||
logger.debug("value: '%s', time: %s, retval: %s", value, time, retval)
|
||||
return retval
|
||||
|
@ -553,10 +563,10 @@ class Effmpeg():
|
|||
@staticmethod
|
||||
def parse_time(txt):
|
||||
""" Parse Time """
|
||||
clean_txt = txt.replace(':', '')
|
||||
clean_txt = txt.replace(":", "")
|
||||
hours = clean_txt[0:2]
|
||||
minutes = clean_txt[2:4]
|
||||
seconds = clean_txt[4:6]
|
||||
retval = hours + ':' + minutes + ':' + seconds
|
||||
retval = hours + ":" + minutes + ":" + seconds
|
||||
logger.debug("txt: '%s', retval: %s", txt, retval)
|
||||
return retval
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
#!/usr/bin/env python3
|
||||
""" The Command Line Arguments for the Manual Editor tool. """
|
||||
import argparse
|
||||
import gettext
|
||||
|
||||
from lib.cli.args import FaceSwapArgs, DirOrFileFullPaths, FileFullPaths
|
||||
|
||||
from lib.cli.args import FaceSwapArgs
|
||||
from lib.cli.actions import DirOrFileFullPaths, FileFullPaths
|
||||
|
||||
# LOCALES
|
||||
_LANG = gettext.translation("tools.manual", localedir="locales", fallback=True)
|
||||
_ = _LANG.gettext
|
||||
|
||||
|
||||
_HELPTEXT = _("This command lets you perform various actions on frames, "
|
||||
"faces and alignments files using visual tools.")
|
||||
|
||||
|
@ -26,39 +26,54 @@ class ManualArgs(FaceSwapArgs):
|
|||
@staticmethod
|
||||
def get_argument_list():
|
||||
""" Generate the command line argument list for the Manual Tool. """
|
||||
argument_list = list()
|
||||
argument_list.append(dict(
|
||||
opts=("-al", "--alignments"),
|
||||
action=FileFullPaths,
|
||||
filetypes="alignments",
|
||||
type=str,
|
||||
group=_("data"),
|
||||
dest="alignments_path",
|
||||
help=_("Path to the alignments file for the input, if not at the default location")))
|
||||
argument_list.append(dict(
|
||||
opts=("-fr", "--frames"),
|
||||
action=DirOrFileFullPaths,
|
||||
filetypes="video",
|
||||
required=True,
|
||||
group=_("data"),
|
||||
help=_("Video file or directory containing source frames that faces were extracted "
|
||||
"from.")))
|
||||
argument_list.append(dict(
|
||||
opts=("-t", "--thumb-regen"),
|
||||
action="store_true",
|
||||
dest="thumb_regen",
|
||||
default=False,
|
||||
group=_("options"),
|
||||
help=_("Force regeneration of the low resolution jpg thumbnails in the alignments "
|
||||
"file.")))
|
||||
argument_list.append(dict(
|
||||
opts=("-s", "--single-process"),
|
||||
action="store_true",
|
||||
dest="single_process",
|
||||
default=False,
|
||||
group=_("options"),
|
||||
help=_("The process attempts to speed up generation of thumbnails by extracting from "
|
||||
"the video in parallel threads. For some videos, this causes the caching "
|
||||
"process to hang. If this happens, then set this option to generate the "
|
||||
"thumbnails in a slower, but more stable single thread.")))
|
||||
argument_list = []
|
||||
argument_list.append({
|
||||
"opts": ("-a", "--alignments"),
|
||||
"action": FileFullPaths,
|
||||
"filetypes": "alignments",
|
||||
"type": str,
|
||||
"group": _("data"),
|
||||
"dest": "alignments_path",
|
||||
"help": _(
|
||||
"Path to the alignments file for the input, if not at the default location")})
|
||||
argument_list.append({
|
||||
"opts": ("-f", "--frames"),
|
||||
"action": DirOrFileFullPaths,
|
||||
"filetypes": "video",
|
||||
"required": True,
|
||||
"group": _("data"),
|
||||
"help": _(
|
||||
"Video file or directory containing source frames that faces were extracted "
|
||||
"from.")})
|
||||
argument_list.append({
|
||||
"opts": ("-t", "--thumb-regen"),
|
||||
"action": "store_true",
|
||||
"dest": "thumb_regen",
|
||||
"default": False,
|
||||
"group": _("options"),
|
||||
"help": _(
|
||||
"Force regeneration of the low resolution jpg thumbnails in the alignments "
|
||||
"file.")})
|
||||
argument_list.append({
|
||||
"opts": ("-s", "--single-process"),
|
||||
"action": "store_true",
|
||||
"dest": "single_process",
|
||||
"default": False,
|
||||
"group": _("options"),
|
||||
"help": _(
|
||||
"The process attempts to speed up generation of thumbnails by extracting from the "
|
||||
"video in parallel threads. For some videos, this causes the caching process to "
|
||||
"hang. If this happens, then set this option to generate the thumbnails in a "
|
||||
"slower, but more stable single thread.")})
|
||||
# Deprecated multi-character switches
|
||||
argument_list.append({
|
||||
"opts": ("-al", ),
|
||||
"type": str,
|
||||
"dest": "depr_alignments_path_al_a",
|
||||
"help": argparse.SUPPRESS})
|
||||
argument_list.append({
|
||||
"opts": ("-fr", ),
|
||||
"type": str,
|
||||
"dest": "depr_frames_fr_f",
|
||||
"help": argparse.SUPPRESS})
|
||||
return argument_list
|
||||
|
|
|
@ -18,7 +18,7 @@ from lib.gui.control_helper import ControlPanel
|
|||
from lib.gui.utils import get_images, get_config, initialize_config, initialize_images
|
||||
from lib.image import SingleFrameLoader, read_image_meta
|
||||
from lib.multithreading import MultiThread
|
||||
from lib.utils import VIDEO_EXTENSIONS
|
||||
from lib.utils import handle_deprecated_cliopts, VIDEO_EXTENSIONS
|
||||
from plugins.extract.pipeline import Extractor, ExtractMedia
|
||||
|
||||
from .detected_faces import DetectedFaces
|
||||
|
@ -52,6 +52,7 @@ class Manual(tk.Tk):
|
|||
def __init__(self, arguments):
|
||||
logger.debug("Initializing %s: (arguments: '%s')", self.__class__.__name__, arguments)
|
||||
super().__init__()
|
||||
arguments = handle_deprecated_cliopts(arguments)
|
||||
self._validate_non_faces(arguments.frames)
|
||||
|
||||
self._initialize_tkinter()
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#!/usr/bin/env python3
|
||||
""" Command Line Arguments for tools """
|
||||
import argparse
|
||||
import gettext
|
||||
|
||||
from lib.cli.args import FaceSwapArgs
|
||||
|
@ -11,7 +12,6 @@ from plugins.plugin_loader import PluginLoader
|
|||
_LANG = gettext.translation("tools.mask.cli", localedir="locales", fallback=True)
|
||||
_ = _LANG.gettext
|
||||
|
||||
|
||||
_HELPTEXT = _("This tool allows you to generate, import, export or preview masks for existing "
|
||||
"alignments.")
|
||||
|
||||
|
@ -50,7 +50,7 @@ class MaskArgs(FaceSwapArgs):
|
|||
"help": _(
|
||||
"Directory containing extracted faces, source frames, or a video file.")})
|
||||
argument_list.append({
|
||||
"opts": ("-it", "--input-type"),
|
||||
"opts": ("-I", "--input-type"),
|
||||
"action": Radio,
|
||||
"type": str.lower,
|
||||
"choices": ("faces", "frames"),
|
||||
|
@ -234,5 +234,10 @@ class MaskArgs(FaceSwapArgs):
|
|||
"help": _(
|
||||
"R|Whether to output the whole frame or only the face box when using "
|
||||
"output processing. Only has an effect when using frames as input.")})
|
||||
|
||||
# Deprecated multi-character switches
|
||||
argument_list.append({
|
||||
"opts": ("-it", ),
|
||||
"type": str,
|
||||
"dest": "depr_input_type_it_I",
|
||||
"help": argparse.SUPPRESS})
|
||||
return argument_list
|
||||
|
|
|
@ -10,7 +10,7 @@ from multiprocessing import Process
|
|||
|
||||
from lib.align import Alignments
|
||||
|
||||
from lib.utils import VIDEO_EXTENSIONS
|
||||
from lib.utils import handle_deprecated_cliopts, VIDEO_EXTENSIONS
|
||||
from plugins.extract.pipeline import ExtractMedia
|
||||
|
||||
from .loader import Loader
|
||||
|
@ -22,7 +22,7 @@ from .mask_output import Output
|
|||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class Mask: # pylint:disable=too-few-public-methods
|
||||
class Mask:
|
||||
""" This tool is part of the Faceswap Tools suite and should be called from
|
||||
``python tools.py mask`` command.
|
||||
|
||||
|
@ -128,7 +128,7 @@ class Mask: # pylint:disable=too-few-public-methods
|
|||
self._run_mask_process(arguments)
|
||||
|
||||
|
||||
class _Mask: # pylint:disable=too-few-public-methods
|
||||
class _Mask:
|
||||
""" This tool is part of the Faceswap Tools suite and should be called from
|
||||
``python tools.py mask`` command.
|
||||
|
||||
|
@ -142,7 +142,7 @@ class _Mask: # pylint:disable=too-few-public-methods
|
|||
"""
|
||||
def __init__(self, arguments: Namespace) -> None:
|
||||
logger.debug("Initializing %s: (arguments: %s)", self.__class__.__name__, arguments)
|
||||
|
||||
arguments = handle_deprecated_cliopts(arguments)
|
||||
self._update_type = arguments.processing
|
||||
self._input_is_faces = arguments.input_type == "faces"
|
||||
self._check_input(arguments.input)
|
||||
|
|
|
@ -25,45 +25,49 @@ class ModelArgs(FaceSwapArgs):
|
|||
def get_argument_list() -> list[dict[str, T.Any]]:
|
||||
""" Put the arguments in a list so that they are accessible from both argparse and gui """
|
||||
argument_list = []
|
||||
argument_list.append(dict(
|
||||
opts=("-m", "--model-dir"),
|
||||
action=DirFullPaths,
|
||||
dest="model_dir",
|
||||
required=True,
|
||||
help=_("Model directory. A directory containing the model you wish to perform an "
|
||||
"action on.")))
|
||||
argument_list.append(dict(
|
||||
opts=("-j", "--job"),
|
||||
action=Radio,
|
||||
type=str,
|
||||
choices=("inference", "nan-scan", "restore"),
|
||||
required=True,
|
||||
help=_("R|Choose which action you want to perform."
|
||||
"\nL|'inference' - Create an inference only copy of the model. Strips any "
|
||||
"layers from the model which are only required for training. NB: This is for "
|
||||
"exporting the model for use in external applications. Inference generated "
|
||||
"models cannot be used within Faceswap. See the 'format' option for specifying "
|
||||
"the model output format."
|
||||
"\nL|'nan-scan' - Scan the model file for NaNs or Infs (invalid data)."
|
||||
"\nL|'restore' - Restore a model from backup.")))
|
||||
argument_list.append(dict(
|
||||
opts=("-f", "--format"),
|
||||
action=Radio,
|
||||
type=str,
|
||||
choices=("h5", "saved-model"),
|
||||
default="h5",
|
||||
group=_("inference"),
|
||||
help=_("R|The format to save the model as. Note: Only used for 'inference' job."
|
||||
"\nL|'h5' - Standard Keras H5 format. Does not store any custom layer "
|
||||
"information. Layers will need to be loaded from Faceswap to use."
|
||||
"\nL|'saved-model' - Tensorflow's Saved Model format. Contains all information "
|
||||
"required to load the model outside of Faceswap.")))
|
||||
argument_list.append(dict(
|
||||
opts=("-s", "--swap-model"),
|
||||
action="store_true",
|
||||
dest="swap_model",
|
||||
default=False,
|
||||
group=_("inference"),
|
||||
help=_("Only used for 'inference' job. Generate the inference model for B -> A "
|
||||
"instead of A -> B.")))
|
||||
argument_list.append({
|
||||
"opts": ("-m", "--model-dir"),
|
||||
"action": DirFullPaths,
|
||||
"dest": "model_dir",
|
||||
"required": True,
|
||||
"help": _(
|
||||
"Model directory. A directory containing the model you wish to perform an action "
|
||||
"on.")})
|
||||
argument_list.append({
|
||||
"opts": ("-j", "--job"),
|
||||
"action": Radio,
|
||||
"type": str,
|
||||
"choices": ("inference", "nan-scan", "restore"),
|
||||
"required": True,
|
||||
"help": _(
|
||||
"R|Choose which action you want to perform."
|
||||
"\nL|'inference' - Create an inference only copy of the model. Strips any layers "
|
||||
"from the model which are only required for training. NB: This is for exporting "
|
||||
"the model for use in external applications. Inference generated models cannot be "
|
||||
"used within Faceswap. See the 'format' option for specifying the model output "
|
||||
"format."
|
||||
"\nL|'nan-scan' - Scan the model file for NaNs or Infs (invalid data)."
|
||||
"\nL|'restore' - Restore a model from backup.")})
|
||||
argument_list.append({
|
||||
"opts": ("-f", "--format"),
|
||||
"action": Radio,
|
||||
"type": str,
|
||||
"choices": ("h5", "saved-model"),
|
||||
"default": "h5",
|
||||
"group": _("inference"),
|
||||
"help": _(
|
||||
"R|The format to save the model as. Note: Only used for 'inference' job."
|
||||
"\nL|'h5' - Standard Keras H5 format. Does not store any custom layer "
|
||||
"information. Layers will need to be loaded from Faceswap to use."
|
||||
"\nL|'saved-model' - Tensorflow's Saved Model format. Contains all information "
|
||||
"required to load the model outside of Faceswap.")})
|
||||
argument_list.append({
|
||||
"opts": ("-s", "--swap-model"),
|
||||
"action": "store_true",
|
||||
"dest": "swap_model",
|
||||
"default": False,
|
||||
"group": _("inference"),
|
||||
"help": _(
|
||||
"Only used for 'inference' job. Generate the inference model for B -> A instead "
|
||||
"of A -> B.")})
|
||||
return argument_list
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#!/usr/bin/env python3
|
||||
""" Command Line Arguments for tools """
|
||||
import argparse
|
||||
import gettext
|
||||
import typing as T
|
||||
|
||||
|
@ -38,35 +39,43 @@ class PreviewArgs(FaceSwapArgs):
|
|||
Top command line options for the preview tool
|
||||
"""
|
||||
argument_list = []
|
||||
argument_list.append(dict(
|
||||
opts=("-i", "--input-dir"),
|
||||
action=DirOrFileFullPaths,
|
||||
filetypes="video",
|
||||
dest="input_dir",
|
||||
group=_("data"),
|
||||
required=True,
|
||||
help=_("Input directory or video. Either a directory containing the image files you "
|
||||
"wish to process or path to a video file.")))
|
||||
argument_list.append(dict(
|
||||
opts=("-al", "--alignments"),
|
||||
action=FileFullPaths,
|
||||
filetypes="alignments",
|
||||
type=str,
|
||||
group=_("data"),
|
||||
dest="alignments_path",
|
||||
help=_("Path to the alignments file for the input, if not at the default location")))
|
||||
argument_list.append(dict(
|
||||
opts=("-m", "--model-dir"),
|
||||
action=DirFullPaths,
|
||||
dest="model_dir",
|
||||
group=_("data"),
|
||||
required=True,
|
||||
help=_("Model directory. A directory containing the trained model you wish to "
|
||||
"process.")))
|
||||
argument_list.append(dict(
|
||||
opts=("-s", "--swap-model"),
|
||||
action="store_true",
|
||||
dest="swap_model",
|
||||
default=False,
|
||||
help=_("Swap the model. Instead of A -> B, swap B -> A")))
|
||||
argument_list.append({
|
||||
"opts": ("-i", "--input-dir"),
|
||||
"action": DirOrFileFullPaths,
|
||||
"filetypes": "video",
|
||||
"dest": "input_dir",
|
||||
"group": _("data"),
|
||||
"required": True,
|
||||
"help": _(
|
||||
"Input directory or video. Either a directory containing the image files you wish "
|
||||
"to process or path to a video file.")})
|
||||
argument_list.append({
|
||||
"opts": ("-a", "--alignments"),
|
||||
"action": FileFullPaths,
|
||||
"filetypes": "alignments",
|
||||
"type": str,
|
||||
"group": _("data"),
|
||||
"dest": "alignments_path",
|
||||
"help": _(
|
||||
"Path to the alignments file for the input, if not at the default location")})
|
||||
argument_list.append({
|
||||
"opts": ("-m", "--model-dir"),
|
||||
"action": DirFullPaths,
|
||||
"dest": "model_dir",
|
||||
"group": _("data"),
|
||||
"required": True,
|
||||
"help": _(
|
||||
"Model directory. A directory containing the trained model you wish to process.")})
|
||||
argument_list.append({
|
||||
"opts": ("-s", "--swap-model"),
|
||||
"action": "store_true",
|
||||
"dest": "swap_model",
|
||||
"default": False,
|
||||
"help": _("Swap the model. Instead of A -> B, swap B -> A")})
|
||||
# Deprecated multi-character switches
|
||||
argument_list.append({
|
||||
"opts": ("-al", ),
|
||||
"type": str,
|
||||
"dest": "depr_alignments_path_al_a",
|
||||
"help": argparse.SUPPRESS})
|
||||
return argument_list
|
||||
|
|
|
@ -16,10 +16,10 @@ from threading import Event, Lock, Thread
|
|||
import numpy as np
|
||||
|
||||
from lib.align import DetectedFace
|
||||
from lib.cli.args import ConvertArgs
|
||||
from lib.cli.args_extract_convert import ConvertArgs
|
||||
from lib.gui.utils import get_images, get_config, initialize_config, initialize_images
|
||||
from lib.convert import Converter
|
||||
from lib.utils import FaceswapError
|
||||
from lib.utils import FaceswapError, handle_deprecated_cliopts
|
||||
from lib.queue_manager import queue_manager
|
||||
from scripts.fsmedia import Alignments, Images
|
||||
from scripts.convert import Predict, ConvertItem
|
||||
|
@ -41,7 +41,7 @@ _LANG = gettext.translation("tools.preview", localedir="locales", fallback=True)
|
|||
_ = _LANG.gettext
|
||||
|
||||
|
||||
class Preview(tk.Tk): # pylint:disable=too-few-public-methods
|
||||
class Preview(tk.Tk):
|
||||
""" This tool is part of the Faceswap Tools suite and should be called from
|
||||
``python tools.py preview`` command.
|
||||
|
||||
|
@ -59,6 +59,7 @@ class Preview(tk.Tk): # pylint:disable=too-few-public-methods
|
|||
def __init__(self, arguments: Namespace) -> None:
|
||||
logger.debug("Initializing %s: (arguments: '%s'", self.__class__.__name__, arguments)
|
||||
super().__init__()
|
||||
arguments = handle_deprecated_cliopts(arguments)
|
||||
self._config_tools = ConfigTools()
|
||||
self._lock = Lock()
|
||||
self._dispatcher = Dispatcher(self)
|
||||
|
@ -455,7 +456,7 @@ class Samples():
|
|||
logger.debug("Predicted faces")
|
||||
|
||||
|
||||
class Patch(): # pylint:disable=too-few-public-methods
|
||||
class Patch():
|
||||
""" The Patch pipeline
|
||||
|
||||
Runs in it's own thread. Takes the output from the Faceswap model predictor and runs the faces
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#!/usr/bin/env python3
|
||||
""" Command Line Arguments for tools """
|
||||
import argparse
|
||||
import gettext
|
||||
|
||||
from lib.cli.args import FaceSwapArgs
|
||||
|
@ -15,7 +16,7 @@ _HELPTEXT = _("This command lets you sort images using various methods.")
|
|||
_SORT_METHODS = (
|
||||
"none", "blur", "blur-fft", "distance", "face", "face-cnn", "face-cnn-dissim",
|
||||
"yaw", "pitch", "roll", "hist", "hist-dissim", "color-black", "color-gray", "color-luma",
|
||||
"color-green", "color-orange", "size", "face-yaw", "black-pixels")
|
||||
"color-green", "color-orange", "size")
|
||||
|
||||
_GPTHRESHOLD = _(" Adjust the '-t' ('--threshold') parameter to control the strength of grouping.")
|
||||
_GPCOLOR = _(" Adjust the '-b' ('--bins') parameter to control the number of bins for grouping. "
|
||||
|
@ -55,9 +56,7 @@ _METHOD_TEXT = {
|
|||
"images will be ranked first and blue images will be last."),
|
||||
"size": _("images by their size in the original frame. Faces further from the camera and from "
|
||||
"lower resolution sources will be sorted first, whilst faces closer to the camera "
|
||||
"and from higher resolution sources will be sorted last."),
|
||||
"face-yaw": _(" option is deprecated. Use 'yaw'"),
|
||||
"black-pixels": _(" option is deprecated. Use 'color-black'")}
|
||||
"and from higher resolution sources will be sorted last.")}
|
||||
|
||||
_BIN_TYPES = [
|
||||
(("face", "face-cnn", "face-cnn-dissim", "hist", "hist-dissim"), _GPTHRESHOLD),
|
||||
|
@ -85,148 +84,147 @@ class SortArgs(FaceSwapArgs):
|
|||
def get_argument_list():
|
||||
""" Put the arguments in a list so that they are accessible from both argparse and gui """
|
||||
argument_list = []
|
||||
argument_list.append(dict(
|
||||
opts=('-i', '--input'),
|
||||
action=DirFullPaths,
|
||||
dest="input_dir",
|
||||
group=_("data"),
|
||||
help=_("Input directory of aligned faces."),
|
||||
required=True))
|
||||
argument_list.append(dict(
|
||||
opts=('-o', '--output'),
|
||||
action=DirFullPaths,
|
||||
dest="output_dir",
|
||||
group=_("data"),
|
||||
help=_("Output directory for sorted aligned faces. If not provided and 'keep' is "
|
||||
"selected then a new folder called 'sorted' will be created within the input "
|
||||
"folder to house the output. If not provided and 'keep' is not selected then "
|
||||
"the images will be sorted in-place, overwriting the original contents of the "
|
||||
"'input_dir'")))
|
||||
argument_list.append(dict(
|
||||
opts=("-B", "--batch-mode"),
|
||||
action="store_true",
|
||||
dest="batch_mode",
|
||||
default=False,
|
||||
group=_("data"),
|
||||
help=_("R|If selected then the input_dir should be a parent folder containing "
|
||||
"multiple folders of faces you wish to sort. The faces "
|
||||
"will be output to separate sub-folders in the output_dir")))
|
||||
argument_list.append(dict(
|
||||
opts=('-s', '--sort-by'),
|
||||
action=Radio,
|
||||
type=str,
|
||||
choices=_SORT_METHODS,
|
||||
dest='sort_method',
|
||||
group=_("sort settings"),
|
||||
default="face",
|
||||
help=_("R|Choose how images are sorted. Selecting a sort method gives the images a "
|
||||
"new filename based on the order the image appears within the given method."
|
||||
"\nL|'none': Don't sort the images. When a 'group-by' method is selected, "
|
||||
"selecting 'none' means that the files will be moved/copied into their "
|
||||
"respective bins, but the files will keep their original filenames. Selecting "
|
||||
"'none' for both 'sort-by' and 'group-by' will do nothing" + _SORT_HELP +
|
||||
"\nDefault: face")))
|
||||
argument_list.append(dict(
|
||||
opts=('-g', '--group-by'),
|
||||
action=Radio,
|
||||
type=str,
|
||||
choices=_SORT_METHODS,
|
||||
dest='group_method',
|
||||
group=_("group settings"),
|
||||
default="none",
|
||||
help=_("R|Selecting a group by method will move/copy files into numbered bins based "
|
||||
"on the selected method."
|
||||
"\nL|'none': Don't bin the images. Folders will be sorted by the selected "
|
||||
"'sort-by' but will not be binned, instead they will be sorted into a single "
|
||||
"folder. Selecting 'none' for both 'sort-by' and 'group-by' will do nothing" +
|
||||
_GROUP_HELP + "\nDefault: none")))
|
||||
argument_list.append(dict(
|
||||
opts=('-k', '--keep'),
|
||||
action='store_true',
|
||||
dest='keep_original',
|
||||
default=False,
|
||||
group=_("data"),
|
||||
help=_("Whether to keep the original files in their original location. Choosing a "
|
||||
"'sort-by' method means that the files have to be renamed. Selecting 'keep' "
|
||||
"means that the original files will be kept, and the renamed files will be "
|
||||
"created in the specified output folder. Unselecting keep means that the "
|
||||
"original files will be moved and renamed based on the selected sort/group "
|
||||
"criteria.")))
|
||||
argument_list.append(dict(
|
||||
opts=('-t', '--threshold'),
|
||||
action=Slider,
|
||||
min_max=(-1.0, 10.0),
|
||||
rounding=2,
|
||||
type=float,
|
||||
dest='threshold',
|
||||
group=_("group settings"),
|
||||
default=-1.0,
|
||||
help=_("R|Float value. Minimum threshold to use for grouping comparison with "
|
||||
"'face-cnn' 'hist' and 'face' methods."
|
||||
"\nThe lower the value the more discriminating the grouping is. Leaving "
|
||||
"-1.0 will allow Faceswap to choose the default value."
|
||||
"\nL|For 'face-cnn' 7.2 should be enough, with 4 being very discriminating. "
|
||||
"\nL|For 'hist' 0.3 should be enough, with 0.2 being very discriminating. "
|
||||
"\nL|For 'face' between 0.1 (more bins) to 0.5 (fewer bins) should "
|
||||
"be about right."
|
||||
"\nBe careful setting a value that's too extrene in a directory "
|
||||
"with many images, as this could result in a lot of folders being created. "
|
||||
"Defaults: face-cnn 7.2, hist 0.3, face 0.25")))
|
||||
argument_list.append(dict(
|
||||
opts=('-fp', '--final-process'),
|
||||
action=Radio,
|
||||
type=str,
|
||||
choices=("folders", "rename"),
|
||||
dest='final_process',
|
||||
group=_("output"),
|
||||
help=_("Deprecated and no longer used. The final processing will be dictated by the "
|
||||
"sort/group by methods and whether 'keep_original' is selected.")))
|
||||
argument_list.append(dict(
|
||||
opts=('-b', '--bins'),
|
||||
action=Slider,
|
||||
min_max=(1, 100),
|
||||
rounding=1,
|
||||
type=int,
|
||||
dest='num_bins',
|
||||
group=_("group settings"),
|
||||
default=5,
|
||||
help=_("R|Integer value. Used to control the number of bins created for grouping by: "
|
||||
"any 'blur' methods, 'color' methods or 'face metric' methods ('distance', "
|
||||
"'size') and 'orientation; methods ('yaw', 'pitch'). For any other grouping "
|
||||
"methods see the '-t' ('--threshold') option."
|
||||
"\nL|For 'face metric' methods the bins are filled, according the the "
|
||||
"distribution of faces between the minimum and maximum chosen metric."
|
||||
"\nL|For 'color' methods the number of bins represents the divider of the "
|
||||
"percentage of colored pixels. Eg. For a bin number of '5': The first folder "
|
||||
"will have the faces with 0%% to 20%% colored pixels, second 21%% to 40%%, "
|
||||
"etc. Any empty bins will be deleted, so you may end up with fewer bins than "
|
||||
"selected."
|
||||
"\nL|For 'blur' methods folder 0 will be the least blurry, while "
|
||||
"the last folder will be the blurriest."
|
||||
"\nL|For 'orientation' methods the number of bins is dictated by how much 180 "
|
||||
"degrees is divided. Eg. If 18 is selected, then each folder will be a 10 "
|
||||
"degree increment. Folder 0 will contain faces looking the most to the "
|
||||
"left/down whereas the last folder will contain the faces looking the most to "
|
||||
"the right/up. NB: Some bins may be empty if faces do not fit the criteria."
|
||||
"\nDefault value: 5")))
|
||||
argument_list.append(dict(
|
||||
opts=('-l', '--log-changes'),
|
||||
action='store_true',
|
||||
group=_("settings"),
|
||||
default=False,
|
||||
help=_("Logs file renaming changes if grouping by renaming, or it logs the file "
|
||||
"copying/movement if grouping by folders. If no log file is specified with "
|
||||
"'--log-file', then a 'sort_log.json' file will be created in the input "
|
||||
"directory.")))
|
||||
argument_list.append(dict(
|
||||
opts=('-lf', '--log-file'),
|
||||
action=SaveFileFullPaths,
|
||||
filetypes="alignments",
|
||||
group=_("settings"),
|
||||
dest='log_file_path',
|
||||
default='sort_log.json',
|
||||
help=_("Specify a log file to use for saving the renaming or grouping information. If "
|
||||
"specified extension isn't 'json' or 'yaml', then json will be used as the "
|
||||
"serializer, with the supplied filename. Default: sort_log.json")))
|
||||
|
||||
argument_list.append({
|
||||
"opts": ('-i', '--input'),
|
||||
"action": DirFullPaths,
|
||||
"dest": "input_dir",
|
||||
"group": _("data"),
|
||||
"help": _("Input directory of aligned faces."),
|
||||
"required": True})
|
||||
argument_list.append({
|
||||
"opts": ('-o', '--output'),
|
||||
"action": DirFullPaths,
|
||||
"dest": "output_dir",
|
||||
"group": _("data"),
|
||||
"help": _(
|
||||
"Output directory for sorted aligned faces. If not provided and 'keep' is "
|
||||
"selected then a new folder called 'sorted' will be created within the input "
|
||||
"folder to house the output. If not provided and 'keep' is not selected then the "
|
||||
"images will be sorted in-place, overwriting the original contents of the "
|
||||
"'input_dir'")})
|
||||
argument_list.append({
|
||||
"opts": ("-B", "--batch-mode"),
|
||||
"action": "store_true",
|
||||
"dest": "batch_mode",
|
||||
"default": False,
|
||||
"group": _("data"),
|
||||
"help": _(
|
||||
"R|If selected then the input_dir should be a parent folder containing multiple "
|
||||
"folders of faces you wish to sort. The faces will be output to separate sub-"
|
||||
"folders in the output_dir")})
|
||||
argument_list.append({
|
||||
"opts": ('-s', '--sort-by'),
|
||||
"action": Radio,
|
||||
"type": str,
|
||||
"choices": _SORT_METHODS,
|
||||
"dest": 'sort_method',
|
||||
"group": _("sort settings"),
|
||||
"default": "face",
|
||||
"help": _(
|
||||
"R|Choose how images are sorted. Selecting a sort method gives the images a new "
|
||||
"filename based on the order the image appears within the given method."
|
||||
"\nL|'none': Don't sort the images. When a 'group-by' method is selected, "
|
||||
"selecting 'none' means that the files will be moved/copied into their respective "
|
||||
"bins, but the files will keep their original filenames. Selecting 'none' for "
|
||||
"both 'sort-by' and 'group-by' will do nothing" + _SORT_HELP + "\nDefault: face")})
|
||||
argument_list.append({
|
||||
"opts": ('-g', '--group-by'),
|
||||
"action": Radio,
|
||||
"type": str,
|
||||
"choices": _SORT_METHODS,
|
||||
"dest": 'group_method',
|
||||
"group": _("group settings"),
|
||||
"default": "none",
|
||||
"help": _(
|
||||
"R|Selecting a group by method will move/copy files into numbered bins based on "
|
||||
"the selected method."
|
||||
"\nL|'none': Don't bin the images. Folders will be sorted by the selected 'sort-"
|
||||
"by' but will not be binned, instead they will be sorted into a single folder. "
|
||||
"Selecting 'none' for both 'sort-by' and 'group-by' will do nothing" +
|
||||
_GROUP_HELP + "\nDefault: none")})
|
||||
argument_list.append({
|
||||
"opts": ('-k', '--keep'),
|
||||
"action": 'store_true',
|
||||
"dest": 'keep_original',
|
||||
"default": False,
|
||||
"group": _("data"),
|
||||
"help": _(
|
||||
"Whether to keep the original files in their original location. Choosing a 'sort-"
|
||||
"by' method means that the files have to be renamed. Selecting 'keep' means that "
|
||||
"the original files will be kept, and the renamed files will be created in the "
|
||||
"specified output folder. Unselecting keep means that the original files will be "
|
||||
"moved and renamed based on the selected sort/group criteria.")})
|
||||
argument_list.append({
|
||||
"opts": ('-t', '--threshold'),
|
||||
"action": Slider,
|
||||
"min_max": (-1.0, 10.0),
|
||||
"rounding": 2,
|
||||
"type": float,
|
||||
"dest": 'threshold',
|
||||
"group": _("group settings"),
|
||||
"default": -1.0,
|
||||
"help": _(
|
||||
"R|Float value. Minimum threshold to use for grouping comparison with 'face-cnn' "
|
||||
"'hist' and 'face' methods."
|
||||
"\nThe lower the value the more discriminating the grouping is. Leaving -1.0 will "
|
||||
"allow Faceswap to choose the default value."
|
||||
"\nL|For 'face-cnn' 7.2 should be enough, with 4 being very discriminating. "
|
||||
"\nL|For 'hist' 0.3 should be enough, with 0.2 being very discriminating. "
|
||||
"\nL|For 'face' between 0.1 (more bins) to 0.5 (fewer bins) should be about right."
|
||||
"\nBe careful setting a value that's too extrene in a directory with many images, "
|
||||
"as this could result in a lot of folders being created. Defaults: face-cnn 7.2, "
|
||||
"hist 0.3, face 0.25")})
|
||||
argument_list.append({
|
||||
"opts": ('-b', '--bins'),
|
||||
"action": Slider,
|
||||
"min_max": (1, 100),
|
||||
"rounding": 1,
|
||||
"type": int,
|
||||
"dest": 'num_bins',
|
||||
"group": _("group settings"),
|
||||
"default": 5,
|
||||
"help": _(
|
||||
"R|Integer value. Used to control the number of bins created for grouping by: any "
|
||||
"'blur' methods, 'color' methods or 'face metric' methods ('distance', 'size') "
|
||||
"and 'orientation; methods ('yaw', 'pitch'). For any other grouping "
|
||||
"methods see the '-t' ('--threshold') option."
|
||||
"\nL|For 'face metric' methods the bins are filled, according the the "
|
||||
"distribution of faces between the minimum and maximum chosen metric."
|
||||
"\nL|For 'color' methods the number of bins represents the divider of the "
|
||||
"percentage of colored pixels. Eg. For a bin number of '5': The first folder will "
|
||||
"have the faces with 0%% to 20%% colored pixels, second 21%% to 40%%, etc. Any "
|
||||
"empty bins will be deleted, so you may end up with fewer bins than selected."
|
||||
"\nL|For 'blur' methods folder 0 will be the least blurry, while the last folder "
|
||||
"will be the blurriest."
|
||||
"\nL|For 'orientation' methods the number of bins is dictated by how much 180 "
|
||||
"degrees is divided. Eg. If 18 is selected, then each folder will be a 10 degree "
|
||||
"increment. Folder 0 will contain faces looking the most to the left/down whereas "
|
||||
"the last folder will contain the faces looking the most to the right/up. NB: "
|
||||
"Some bins may be empty if faces do not fit the criteria. \nDefault value: 5")})
|
||||
argument_list.append({
|
||||
"opts": ('-l', '--log-changes'),
|
||||
"action": 'store_true',
|
||||
"group": _("settings"),
|
||||
"default": False,
|
||||
"help": _(
|
||||
"Logs file renaming changes if grouping by renaming, or it logs the file copying/"
|
||||
"movement if grouping by folders. If no log file is specified with '--log-file', "
|
||||
"then a 'sort_log.json' file will be created in the input directory.")})
|
||||
argument_list.append({
|
||||
"opts": ('-f', '--log-file'),
|
||||
"action": SaveFileFullPaths,
|
||||
"filetypes": "alignments",
|
||||
"group": _("settings"),
|
||||
"dest": 'log_file_path',
|
||||
"default": 'sort_log.json',
|
||||
"help": _(
|
||||
"Specify a log file to use for saving the renaming or grouping information. If "
|
||||
"specified extension isn't 'json' or 'yaml', then json will be used as the "
|
||||
"serializer, with the supplied filename. Default: sort_log.json")})
|
||||
# Deprecated multi-character switches
|
||||
argument_list.append({
|
||||
"opts": ("-lf", ),
|
||||
"type": str,
|
||||
"dest": "depr_log_file_path_lf_f",
|
||||
"help": argparse.SUPPRESS})
|
||||
return argument_list
|
||||
|
|
|
@ -15,7 +15,7 @@ from tqdm import tqdm
|
|||
|
||||
# faceswap imports
|
||||
from lib.serializer import Serializer, get_serializer_from_filename
|
||||
from lib.utils import deprecation_warning
|
||||
from lib.utils import handle_deprecated_cliopts
|
||||
|
||||
from .sort_methods import SortBlur, SortColor, SortFace, SortHistogram, SortMultiMethod
|
||||
from .sort_methods_aligned import SortDistance, SortFaceCNN, SortPitch, SortSize, SortYaw, SortRoll
|
||||
|
@ -26,7 +26,7 @@ if T.TYPE_CHECKING:
|
|||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class Sort(): # pylint:disable=too-few-public-methods
|
||||
class Sort():
|
||||
""" Sorts folders of faces based on input criteria
|
||||
|
||||
Wrapper for the sort process to run in either batch mode or single use mode
|
||||
|
@ -39,32 +39,10 @@ class Sort(): # pylint:disable=too-few-public-methods
|
|||
"""
|
||||
def __init__(self, arguments: Namespace) -> None:
|
||||
logger.debug("Initializing: %s (args: %s)", self.__class__.__name__, arguments)
|
||||
self._args = arguments
|
||||
self._handle_deprecations()
|
||||
self._args = handle_deprecated_cliopts(arguments)
|
||||
self._input_locations = self._get_input_locations()
|
||||
logger.debug("Initialized: %s", self.__class__.__name__)
|
||||
|
||||
def _handle_deprecations(self):
|
||||
""" Warn that 'final_process' is deprecated and remove from arguments """
|
||||
if self._args.final_process:
|
||||
deprecation_warning("`-fp`, `--final-process`", "This option will be ignored")
|
||||
logger.warning("Final processing is dictated by your choice of 'sort-by' and "
|
||||
"'group-by' options and whether 'keep' has been selected.")
|
||||
del self._args.final_process
|
||||
if "face-yaw" in (self._args.sort_method, self._args.group_method):
|
||||
deprecation_warning("`face-yaw` sort option", "Please use option 'yaw' going forward.")
|
||||
sort_ = self._args.sort_method
|
||||
group_ = self._args.group_method
|
||||
self._args.sort_method = "yaw" if sort_ == "face-yaw" else sort_
|
||||
self._args.group_method = "yaw" if group_ == "face-yaw" else group_
|
||||
if "black-pixels" in (self._args.sort_method, self._args.group_method):
|
||||
deprecation_warning("`black-pixels` sort option",
|
||||
"Please use option 'color-black' going forward.")
|
||||
sort_ = self._args.sort_method
|
||||
group_ = self._args.group_method
|
||||
self._args.sort_method = "color-black" if sort_ == "black-pixels" else sort_
|
||||
self._args.group_method = "color-black" if group_ == "black-pixels" else group_
|
||||
|
||||
def _get_input_locations(self) -> list[str]:
|
||||
""" Obtain the full path to input locations. Will be a list of locations if batch mode is
|
||||
selected, or a containing a single location if batch mode is not selected.
|
||||
|
@ -123,7 +101,7 @@ class Sort(): # pylint:disable=too-few-public-methods
|
|||
sort.process()
|
||||
|
||||
|
||||
class _Sort(): # pylint:disable=too-few-public-methods
|
||||
class _Sort():
|
||||
""" Sorts folders of faces based on input criteria """
|
||||
def __init__(self, arguments: Namespace) -> None:
|
||||
logger.debug("Initializing %s: arguments: %s", self.__class__.__name__, arguments)
|
||||
|
|
Loading…
Add table
Reference in a new issue