Deep-Live-Cam icon indicating copy to clipboard operation
Deep-Live-Cam copied to clipboard

face_enhancer isn't found.

Open Uniqbank opened this issue 10 months ago • 8 comments

Hi @hacksider,

Great to e-meet you! I came across your project, and I must say it stands out among many others—it's incredibly clean and well-structured. Well done!

I have a quick question for anyone who may have encountered this issue.

When running python run.py, I’m getting the error:
Frame processor face_enhancer not found
However, face_swapper loads without any issues.

If anyone has faced this before, I’d appreciate any insights on what I might be missing.

Setup:
MacBook (Intel)

Thanks in advance!

Uniqbank avatar Feb 15 '25 17:02 Uniqbank

I managed to resolve this, but getting another issue now:

With following settings: Image

After click on 'Live' it does pop up a screen with source image as starting point with following issues:

  1. face part has a black square and its not rendering the target image's face properly in live mode as expected. 2 fps rate is just 0.5.

I have followed the instruction steps but I am on a Macbook (Intel). Is there's something missing for mac setup? Thanks

Uniqbank avatar Feb 15 '25 19:02 Uniqbank

Hi @Uniqbank How did u solve an issue with Frame processor face_enhancer not found ?

kirillbush91 avatar Feb 16 '25 17:02 kirillbush91

Hi @Uniqbank How did u solve an issue with Frame processor face_enhancer not found ?

Try out this from the pinned https://github.com/hacksider/Deep-Live-Cam/issues/266# issue and see f that resolves your issue.

luna-nightbyte avatar Feb 17 '25 22:02 luna-nightbyte

@kirillbush91 , sorry for delay. I also updated global constants and added list of frame processors in the list. Hope this helps, if not, let me know will send the code snippet.

Uniqbank avatar Feb 18 '25 04:02 Uniqbank

@Uniqbank please send the code

Alinus6 avatar Feb 20 '25 23:02 Alinus6

pip uninstall basicsr -y
install basicsr directly from its GitHub repository:
pip uninstall gfpgan -y
pip install git+https://github.com/TencentARC/GFPGAN.git@master

x011 avatar Feb 23 '25 00:02 x011

@Uniqbank please send the code

modules/globals.py


frame_processors: List[str] = ["face_swapper", "face_enhancer"]

modules/processors/frame add init.py

from .face_enhancer import *
from .face_swapper import *

modules/processors/frame/core.py

import sys
import importlib
from concurrent.futures import ThreadPoolExecutor
from types import ModuleType
from typing import Any, List, Callable
from tqdm import tqdm

import modules
import modules.globals                   

FRAME_PROCESSORS_MODULES: List[ModuleType] = []
FRAME_PROCESSORS_INTERFACE = [
    'pre_check',
    'pre_start',
    'process_frame',
    'process_image',
    'process_video'
]


def load_frame_processor_module(frame_processor: str) -> Any:
    try:
        frame_processor_module = importlib.import_module(f'modules.processors.frame.{frame_processor}')
        for method_name in FRAME_PROCESSORS_INTERFACE:
            if not hasattr(frame_processor_module, method_name):
                sys.exit()
    except ImportError:
        print(f"Frame processor {frame_processor} not found")
        sys.exit()
    return frame_processor_module


def get_frame_processors_modules(frame_processors: List[str]) -> List[ModuleType]:
    global FRAME_PROCESSORS_MODULES

    if not FRAME_PROCESSORS_MODULES:
        for frame_processor in frame_processors:
            frame_processor_module = load_frame_processor_module(frame_processor)
            FRAME_PROCESSORS_MODULES.append(frame_processor_module)
    set_frame_processors_modules_from_ui(frame_processors)
    return FRAME_PROCESSORS_MODULES

def set_frame_processors_modules_from_ui(frame_processors: List[str]) -> None:
    global FRAME_PROCESSORS_MODULES
    for frame_processor, state in modules.globals.fp_ui.items():
        if state == True and frame_processor not in frame_processors:
            frame_processor_module = load_frame_processor_module(frame_processor)
            FRAME_PROCESSORS_MODULES.append(frame_processor_module)
            modules.globals.frame_processors.append(frame_processor)
        if state == False:
            try:
                frame_processor_module = load_frame_processor_module(frame_processor)
                FRAME_PROCESSORS_MODULES.remove(frame_processor_module)
                modules.globals.frame_processors.remove(frame_processor)
            except:
                pass

def multi_process_frame(source_path: str, temp_frame_paths: List[str], process_frames: Callable[[str, List[str], Any], None], progress: Any = None) -> None:
    with ThreadPoolExecutor(max_workers=modules.globals.execution_threads) as executor:
        futures = []
        for path in temp_frame_paths:
            future = executor.submit(process_frames, source_path, [path], progress)
            futures.append(future)
        for future in futures:
            future.result()


def process_video(source_path: str, frame_paths: list[str], process_frames: Callable[[str, List[str], Any], None]) -> None:
    progress_bar_format = '{l_bar}{bar}| {n_fmt}/{total_fmt} [{elapsed}<{remaining}, {rate_fmt}{postfix}]'
    total = len(frame_paths)
    with tqdm(total=total, desc='Processing', unit='frame', dynamic_ncols=True, bar_format=progress_bar_format) as progress:
        progress.set_postfix({'execution_providers': modules.globals.execution_providers, 'execution_threads': modules.globals.execution_threads, 'max_memory': modules.globals.max_memory})
        multi_process_frame(source_path, frame_paths, process_frames, progress)


hope it helps.

Uniqbank avatar Feb 23 '25 03:02 Uniqbank

in my case, I needed torchvision==0.15.2

kniahnitskyi avatar Feb 27 '25 09:02 kniahnitskyi