commit
9e5446582e
|
@ -1,18 +1,8 @@
|
||||||
[Remove this]The issue would most likely be diagnosed if you follow the template and give all the info.
|
***[Remove this]The issue would be closed without notice and be considered spam if the template is not followed.***
|
||||||
|
|
||||||
**Describe the bug**
|
**Describe the bug**
|
||||||
A clear and concise description of what the bug is.
|
A clear and concise description of what the bug is.
|
||||||
|
|
||||||
**To Reproduce**
|
|
||||||
Steps to reproduce the behavior:
|
|
||||||
1. Go to '...'
|
|
||||||
2. Click on '....'
|
|
||||||
3. Scroll down to '....'
|
|
||||||
4. See error
|
|
||||||
|
|
||||||
**Expected behavior**
|
|
||||||
A clear and concise description of what you expected to happen.
|
|
||||||
|
|
||||||
**Screenshots**
|
**Screenshots**
|
||||||
If applicable, add screenshots to help explain your problem.
|
If applicable, add screenshots to help explain your problem.
|
||||||
|
|
||||||
|
|
|
@ -4,11 +4,16 @@
|
||||||
Real-time face swap and video deepfake with a single click and only a single image.
|
Real-time face swap and video deepfake with a single click and only a single image.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<a href="https://trendshift.io/repositories/11395" target="_blank"><img src="https://trendshift.io/api/badge/repositories/11395" alt="hacksider%2FDeep-Live-Cam | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
|
||||||
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="media/demo.gif" alt="Demo GIF">
|
<img src="media/demo.gif" alt="Demo GIF">
|
||||||
<img src="media/avgpcperformancedemo.gif" alt="Performance Demo GIF">
|
<img src="media/avgpcperformancedemo.gif" alt="Performance Demo GIF">
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
## Disclaimer
|
## Disclaimer
|
||||||
|
|
||||||
This software is intended as a productive contribution to the AI-generated media industry. It aims to assist artists with tasks like animating custom characters or using them as models for clothing, etc.
|
This software is intended as a productive contribution to the AI-generated media industry. It aims to assist artists with tasks like animating custom characters or using them as models for clothing, etc.
|
||||||
|
|
|
@ -11,7 +11,6 @@ from modules.face_analyser import get_one_face
|
||||||
from modules.typing import Frame, Face
|
from modules.typing import Frame, Face
|
||||||
from modules.utilities import (
|
from modules.utilities import (
|
||||||
conditional_download,
|
conditional_download,
|
||||||
resolve_relative_path,
|
|
||||||
is_image,
|
is_image,
|
||||||
is_video,
|
is_video,
|
||||||
)
|
)
|
||||||
|
@ -21,9 +20,11 @@ THREAD_SEMAPHORE = threading.Semaphore()
|
||||||
THREAD_LOCK = threading.Lock()
|
THREAD_LOCK = threading.Lock()
|
||||||
NAME = "DLC.FACE-ENHANCER"
|
NAME = "DLC.FACE-ENHANCER"
|
||||||
|
|
||||||
|
abs_dir = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
models_dir = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(abs_dir))), 'models')
|
||||||
|
|
||||||
def pre_check() -> bool:
|
def pre_check() -> bool:
|
||||||
download_directory_path = resolve_relative_path("..\models")
|
download_directory_path = models_dir
|
||||||
conditional_download(
|
conditional_download(
|
||||||
download_directory_path,
|
download_directory_path,
|
||||||
[
|
[
|
||||||
|
@ -47,11 +48,7 @@ def get_face_enhancer() -> Any:
|
||||||
|
|
||||||
with THREAD_LOCK:
|
with THREAD_LOCK:
|
||||||
if FACE_ENHANCER is None:
|
if FACE_ENHANCER is None:
|
||||||
if os.name == "nt":
|
model_path = os.path.join(models_dir, 'GFPGANv1.4.pth')
|
||||||
model_path = resolve_relative_path("..\models\GFPGANv1.4.pth")
|
|
||||||
# todo: set models path https://github.com/TencentARC/GFPGAN/issues/399
|
|
||||||
else:
|
|
||||||
model_path = resolve_relative_path("../models/GFPGANv1.4.pth")
|
|
||||||
FACE_ENHANCER = gfpgan.GFPGANer(model_path=model_path, upscale=1) # type: ignore[attr-defined]
|
FACE_ENHANCER = gfpgan.GFPGANer(model_path=model_path, upscale=1) # type: ignore[attr-defined]
|
||||||
return FACE_ENHANCER
|
return FACE_ENHANCER
|
||||||
|
|
||||||
|
|
|
@ -10,19 +10,21 @@ from modules.face_analyser import get_one_face, get_many_faces, default_source_f
|
||||||
from modules.typing import Face, Frame
|
from modules.typing import Face, Frame
|
||||||
from modules.utilities import (
|
from modules.utilities import (
|
||||||
conditional_download,
|
conditional_download,
|
||||||
resolve_relative_path,
|
|
||||||
is_image,
|
is_image,
|
||||||
is_video,
|
is_video,
|
||||||
)
|
)
|
||||||
from modules.cluster_analysis import find_closest_centroid
|
from modules.cluster_analysis import find_closest_centroid
|
||||||
|
import os
|
||||||
|
|
||||||
FACE_SWAPPER = None
|
FACE_SWAPPER = None
|
||||||
THREAD_LOCK = threading.Lock()
|
THREAD_LOCK = threading.Lock()
|
||||||
NAME = "DLC.FACE-SWAPPER"
|
NAME = "DLC.FACE-SWAPPER"
|
||||||
|
|
||||||
|
abs_dir = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
models_dir = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(abs_dir))), 'models')
|
||||||
|
|
||||||
def pre_check() -> bool:
|
def pre_check() -> bool:
|
||||||
download_directory_path = resolve_relative_path("../models")
|
download_directory_path = abs_dir
|
||||||
conditional_download(
|
conditional_download(
|
||||||
download_directory_path,
|
download_directory_path,
|
||||||
[
|
[
|
||||||
|
@ -54,7 +56,7 @@ def get_face_swapper() -> Any:
|
||||||
|
|
||||||
with THREAD_LOCK:
|
with THREAD_LOCK:
|
||||||
if FACE_SWAPPER is None:
|
if FACE_SWAPPER is None:
|
||||||
model_path = resolve_relative_path("../models/inswapper_128_fp16.onnx")
|
model_path = os.path.join(models_dir, 'inswapper_128_fp16.onnx')
|
||||||
FACE_SWAPPER = insightface.model_zoo.get_model(
|
FACE_SWAPPER = insightface.model_zoo.get_model(
|
||||||
model_path, providers=modules.globals.execution_providers
|
model_path, providers=modules.globals.execution_providers
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in New Issue