Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
automatic1111
GitHub Repository: automatic1111/stable-diffusion-webui
Path: blob/master/modules/gfpgan_model.py
3055 views
1
from __future__ import annotations
2
3
import logging
4
import os
5
6
import torch
7
8
from modules import (
9
devices,
10
errors,
11
face_restoration,
12
face_restoration_utils,
13
modelloader,
14
shared,
15
)
16
17
logger = logging.getLogger(__name__)
18
model_url = "https://github.com/TencentARC/GFPGAN/releases/download/v1.3.0/GFPGANv1.4.pth"
19
model_download_name = "GFPGANv1.4.pth"
20
gfpgan_face_restorer: face_restoration.FaceRestoration | None = None
21
22
23
class FaceRestorerGFPGAN(face_restoration_utils.CommonFaceRestoration):
24
def name(self):
25
return "GFPGAN"
26
27
def get_device(self):
28
return devices.device_gfpgan
29
30
def load_net(self) -> torch.Module:
31
for model_path in modelloader.load_models(
32
model_path=self.model_path,
33
model_url=model_url,
34
command_path=self.model_path,
35
download_name=model_download_name,
36
ext_filter=['.pth'],
37
):
38
if 'GFPGAN' in os.path.basename(model_path):
39
return modelloader.load_spandrel_model(
40
model_path,
41
device=self.get_device(),
42
expected_architecture='GFPGAN',
43
).model
44
raise ValueError("No GFPGAN model found")
45
46
def restore(self, np_image):
47
def restore_face(cropped_face_t):
48
assert self.net is not None
49
return self.net(cropped_face_t, return_rgb=False)[0]
50
51
return self.restore_with_helper(np_image, restore_face)
52
53
54
def gfpgan_fix_faces(np_image):
55
if gfpgan_face_restorer:
56
return gfpgan_face_restorer.restore(np_image)
57
logger.warning("GFPGAN face restorer not set up")
58
return np_image
59
60
61
def setup_model(dirname: str) -> None:
62
global gfpgan_face_restorer
63
64
try:
65
face_restoration_utils.patch_facexlib(dirname)
66
gfpgan_face_restorer = FaceRestorerGFPGAN(model_path=dirname)
67
shared.face_restorers.append(gfpgan_face_restorer)
68
except Exception:
69
errors.report("Error setting up GFPGAN", exc_info=True)
70
71