|
|
|
@ -3,7 +3,7 @@ import os
|
|
|
|
|
from dataclasses import dataclass
|
|
|
|
|
from pprint import pformat
|
|
|
|
|
import traceback
|
|
|
|
|
from typing import Any, Dict, Generator, List, Set, Tuple, Optional
|
|
|
|
|
from typing import Any, Dict, Generator, List, Set, Tuple, Optional, Union
|
|
|
|
|
import tempfile
|
|
|
|
|
from tqdm import tqdm
|
|
|
|
|
import sys
|
|
|
|
@ -110,7 +110,7 @@ def compare_faces(img1: PILImage, img2: PILImage) -> float:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def batch_process(
|
|
|
|
|
src_images: List[PILImage],
|
|
|
|
|
src_images: List[Union[PILImage, str]], # image or filename
|
|
|
|
|
save_path: Optional[str],
|
|
|
|
|
units: List[FaceSwapUnitSettings],
|
|
|
|
|
postprocess_options: PostProcessingOptions,
|
|
|
|
@ -119,7 +119,7 @@ def batch_process(
|
|
|
|
|
Process a batch of images, apply face swapping according to the given settings, and optionally save the resulting images to a specified path.
|
|
|
|
|
|
|
|
|
|
Args:
|
|
|
|
|
src_images (List[PILImage]): List of source PIL Images to process.
|
|
|
|
|
src_images (List[Union[PILImage, str]]): List of source PIL Images to process or list of images file names
|
|
|
|
|
save_path (Optional[str]): Destination path where the processed images will be saved. If None, no images are saved.
|
|
|
|
|
units (List[FaceSwapUnitSettings]): List of FaceSwapUnitSettings to apply to the images.
|
|
|
|
|
postprocess_options (PostProcessingOptions): Post-processing settings to be applied to the images.
|
|
|
|
@ -138,6 +138,18 @@ def batch_process(
|
|
|
|
|
if src_images is not None and len(units) > 0:
|
|
|
|
|
result_images = []
|
|
|
|
|
for src_image in src_images:
|
|
|
|
|
if isinstance(src_image, str):
|
|
|
|
|
if save_path:
|
|
|
|
|
path = os.path.join(
|
|
|
|
|
save_path, "swapped_" + os.path.basename(src_image)
|
|
|
|
|
)
|
|
|
|
|
src_image = Image.open(src_image)
|
|
|
|
|
elif save_path:
|
|
|
|
|
path = tempfile.NamedTemporaryFile(
|
|
|
|
|
delete=False, suffix=".png", dir=save_path
|
|
|
|
|
).name
|
|
|
|
|
assert isinstance(src_image, Image.Image)
|
|
|
|
|
|
|
|
|
|
current_images = []
|
|
|
|
|
swapped_images = process_images_units(
|
|
|
|
|
get_current_model(), images=[(src_image, None)], units=units
|
|
|
|
@ -153,9 +165,6 @@ def batch_process(
|
|
|
|
|
|
|
|
|
|
if save_path:
|
|
|
|
|
for img in current_images:
|
|
|
|
|
path = tempfile.NamedTemporaryFile(
|
|
|
|
|
delete=False, suffix=".png", dir=save_path
|
|
|
|
|
).name
|
|
|
|
|
img.save(path)
|
|
|
|
|
|
|
|
|
|
result_images += current_images
|
|
|
|
|