mirror of
https://github.com/facefusion/facefusion.git
synced 2026-06-13 07:47:48 +02:00
Develop (#73)
* Cosmetic changes * Cosmetic changes * Run single warm up for the benchmark suite * Use latest version of Gradio * More testing * Introduce basic installer * Fix typo * Move more to installer file * Fix the installer with the uninstall all trick * Adjust wording * Fix coreml in installer * Allow Pyhton 3.9 * Add VENV to installer * Just some cosmetics * Just some cosmetics * Dedicated headless mode, Refine API of UI layouts * Use --headless for pytest * Fix testing for Windows * Normalize output path that lacks extension * Fix CI for Windows * Fix CI for Windows * UI to change output path * Add conda support for the installer * Improve installer quite a bit * Drop conda support * Install community wheels for coreml silicon * Improve output video component * Fix silicon wheel downloading * Remove venv from installer as we cannot activate via subprocess * Use join to create wheel name * Refine the output path normalization * Refine the output path normalization * Introduce ProcessMode and rename some methods * Introduce ProcessMode and rename some methods * Basic webcam integration and open_ffmpeg() * Basic webcam integration part2 * Benchmark resolutions now selectable * Rename benchmark resolution back to benchmark runs * Fix repeating output path in UI * Keep output_path untouched if not resolvable * Add more cases to normalize output path * None for those tests that don't take source path into account * Finish basic webcam integration, UI layout now with custom run() * Fix CI and hide link in webcam UI * Cosmetics on webcam UI * Move get_device to utilities * Fix CI * Introduce output-image-quality, Show and hide UI according to target media type * Benchmark with partial result updates * fix: trim frame sliders not appearing after draggin video * fix: output and temp frame setting inputs not appearing * Fix: set increased update delay to 250ms to let Gradio update conditional inputs properly * Reverted .gitignore * Adjust timings * Remove timeout hacks and get fully event driven * Update dependencies * Update dependencies * Revert NSFW library, Conditional unset trim args * Face selector works better on preview slider release * Add limit resources to UI * Introduce vision.py for all CV2 operations, Rename some methods * Add restoring audio failed * Decouple updates for preview image and preview frame slider, Move reduce_preview_frame to vision * Refactor detect_fps based on JSON output * Only webcam when open * More conditions to vision.py * Add udp and v4l2 streaming to webcam UI * Detect v4l2 device to be used * Refactor code a bit * Use static max memory for UI * Fix CI * Looks stable to me * Update preview * Update preview --------- Co-authored-by: Sumit <vizsumit@gmail.com>
This commit is contained in:
@@ -70,7 +70,7 @@ def multi_process_frame(source_path : str, temp_frame_paths : List[str], process
|
||||
|
||||
|
||||
def create_queue(temp_frame_paths : List[str]) -> Queue[str]:
|
||||
queue: Queue[str] = Queue()
|
||||
queue : Queue[str] = Queue()
|
||||
for frame_path in temp_frame_paths:
|
||||
queue.put(frame_path)
|
||||
return queue
|
||||
@@ -103,11 +103,3 @@ def update_progress(progress : Any = None) -> None:
|
||||
})
|
||||
progress.refresh()
|
||||
progress.update(1)
|
||||
|
||||
|
||||
def get_device() -> str:
|
||||
if 'CUDAExecutionProvider' in facefusion.globals.execution_providers:
|
||||
return 'cuda'
|
||||
if 'CoreMLExecutionProvider' in facefusion.globals.execution_providers:
|
||||
return 'mps'
|
||||
return 'cpu'
|
||||
|
||||
@@ -4,11 +4,10 @@ import threading
|
||||
from gfpgan.utils import GFPGANer
|
||||
|
||||
import facefusion.globals
|
||||
import facefusion.processors.frame.core as frame_processors
|
||||
from facefusion import wording
|
||||
from facefusion import wording, utilities
|
||||
from facefusion.core import update_status
|
||||
from facefusion.face_analyser import get_many_faces
|
||||
from facefusion.typing import Frame, Face
|
||||
from facefusion.typing import Frame, Face, ProcessMode
|
||||
from facefusion.utilities import conditional_download, resolve_relative_path, is_image, is_video
|
||||
|
||||
FRAME_PROCESSOR = None
|
||||
@@ -26,7 +25,7 @@ def get_frame_processor() -> Any:
|
||||
FRAME_PROCESSOR = GFPGANer(
|
||||
model_path = model_path,
|
||||
upscale = 1,
|
||||
device = frame_processors.get_device()
|
||||
device = utilities.get_device(facefusion.globals.execution_providers)
|
||||
)
|
||||
return FRAME_PROCESSOR
|
||||
|
||||
@@ -39,14 +38,17 @@ def clear_frame_processor() -> None:
|
||||
|
||||
def pre_check() -> bool:
|
||||
download_directory_path = resolve_relative_path('../.assets/models')
|
||||
conditional_download(download_directory_path, ['https://github.com/facefusion/facefusion-assets/releases/download/models/GFPGANv1.4.pth'])
|
||||
conditional_download(download_directory_path, [ 'https://github.com/facefusion/facefusion-assets/releases/download/models/GFPGANv1.4.pth' ])
|
||||
return True
|
||||
|
||||
|
||||
def pre_process() -> bool:
|
||||
if not is_image(facefusion.globals.target_path) and not is_video(facefusion.globals.target_path):
|
||||
def pre_process(mode : ProcessMode) -> bool:
|
||||
if mode in [ 'output', 'preview' ] and not is_image(facefusion.globals.target_path) and not is_video(facefusion.globals.target_path):
|
||||
update_status(wording.get('select_image_or_video_target') + wording.get('exclamation_mark'), NAME)
|
||||
return False
|
||||
if mode == 'output' and not facefusion.globals.output_path:
|
||||
update_status(wording.get('select_file_or_directory_output') + wording.get('exclamation_mark'), NAME)
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ from facefusion import wording
|
||||
from facefusion.core import update_status
|
||||
from facefusion.face_analyser import get_one_face, get_many_faces, find_similar_faces
|
||||
from facefusion.face_reference import get_face_reference, set_face_reference
|
||||
from facefusion.typing import Face, Frame
|
||||
from facefusion.typing import Face, Frame, ProcessMode
|
||||
from facefusion.utilities import conditional_download, resolve_relative_path, is_image, is_video
|
||||
|
||||
FRAME_PROCESSOR = None
|
||||
@@ -35,19 +35,21 @@ def clear_frame_processor() -> None:
|
||||
|
||||
def pre_check() -> bool:
|
||||
download_directory_path = resolve_relative_path('../.assets/models')
|
||||
conditional_download(download_directory_path, ['https://github.com/facefusion/facefusion-assets/releases/download/models/inswapper_128.onnx'])
|
||||
conditional_download(download_directory_path, [ 'https://github.com/facefusion/facefusion-assets/releases/download/models/inswapper_128.onnx' ])
|
||||
return True
|
||||
|
||||
|
||||
def pre_process() -> bool:
|
||||
def pre_process(mode : ProcessMode) -> bool:
|
||||
if not is_image(facefusion.globals.source_path):
|
||||
update_status(wording.get('select_image_source') + wording.get('exclamation_mark'), NAME)
|
||||
return False
|
||||
elif not get_one_face(cv2.imread(facefusion.globals.source_path)):
|
||||
update_status(wording.get('no_source_face_detected') + wording.get('exclamation_mark'), NAME)
|
||||
return False
|
||||
if not is_image(facefusion.globals.target_path) and not is_video(facefusion.globals.target_path):
|
||||
if mode in [ 'output', 'preview' ] and not is_image(facefusion.globals.target_path) and not is_video(facefusion.globals.target_path):
|
||||
update_status(wording.get('select_image_or_video_target') + wording.get('exclamation_mark'), NAME)
|
||||
if mode == 'output' and not facefusion.globals.output_path:
|
||||
update_status(wording.get('select_file_or_directory_output') + wording.get('exclamation_mark'), NAME)
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
@@ -4,8 +4,11 @@ import threading
|
||||
from basicsr.archs.rrdbnet_arch import RRDBNet
|
||||
from realesrgan import RealESRGANer
|
||||
|
||||
import facefusion
|
||||
import facefusion.processors.frame.core as frame_processors
|
||||
from facefusion.typing import Frame, Face
|
||||
from facefusion import wording, utilities
|
||||
from facefusion.core import update_status
|
||||
from facefusion.typing import Frame, Face, ProcessMode
|
||||
from facefusion.utilities import conditional_download, resolve_relative_path
|
||||
|
||||
FRAME_PROCESSOR = None
|
||||
@@ -30,7 +33,7 @@ def get_frame_processor() -> Any:
|
||||
num_grow_ch = 32,
|
||||
scale = 4
|
||||
),
|
||||
device = frame_processors.get_device(),
|
||||
device = utilities.get_device(facefusion.globals.execution_providers),
|
||||
tile = 512,
|
||||
tile_pad = 32,
|
||||
pre_pad = 0,
|
||||
@@ -47,11 +50,14 @@ def clear_frame_processor() -> None:
|
||||
|
||||
def pre_check() -> bool:
|
||||
download_directory_path = resolve_relative_path('../.assets/models')
|
||||
conditional_download(download_directory_path, ['https://github.com/facefusion/facefusion-assets/releases/download/models/RealESRGAN_x4plus.pth'])
|
||||
conditional_download(download_directory_path, [ 'https://github.com/facefusion/facefusion-assets/releases/download/models/RealESRGAN_x4plus.pth' ])
|
||||
return True
|
||||
|
||||
|
||||
def pre_process() -> bool:
|
||||
def pre_process(mode : ProcessMode) -> bool:
|
||||
if mode == 'output' and not facefusion.globals.output_path:
|
||||
update_status(wording.get('select_file_or_directory_output') + wording.get('exclamation_mark'), NAME)
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user