Kingoteam commited on
Commit
68b2cae
·
verified ·
1 Parent(s): 8d0f38d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +50 -72
app.py CHANGED
@@ -1,83 +1,61 @@
1
  import gradio as gr
2
  import torch
3
- import numpy as np
4
  from PIL import Image
5
  import requests
6
- import io
7
-
8
- # ---- دانلود و آماده‌سازی AnimeGAN ----
9
- def load_animegan(style):
10
- return torch.hub.load(
11
- 'bryandlee/animegan2-pytorch:main',
12
- style,
13
- pretrained=True,
14
- device=device
15
- )
16
-
17
- # ---- نسخه ساده rgb_to_grayscale (بدون torchvision) ----
18
- def rgb_to_grayscale(img):
19
- if img.ndim != 4 or img.shape[1] != 3:
20
- raise ValueError("Expected (B, 3, H, W)")
21
- r, g, b = img[:, 0:1], img[:, 1:2], img[:, 2:3]
22
- return (0.2989 * r + 0.5870 * g + 0.1140 * b)
23
-
24
- # ---- بارگذاری GFPGAN (برای بهبود چهره) ----
25
- from gfpgan import GFPGANer
26
- restorer = GFPGANer(
27
- model_path='https://github.com/TencentARC/GFPGAN/releases/download/v1.4/GFPGANv1.4.pth',
28
- upscale=1,
29
- arch='clean',
30
- channel_multiplier=2
31
- )
32
-
33
- device = "cuda" if torch.cuda.is_available() else "cpu"
34
-
35
- # ---- پردازش تصویر ----
36
- def process_image(image, style_name, face_enhance):
37
- if image is None:
38
- return None
39
-
40
- # تغییر رزولوشن بالا
41
- image = image.convert("RGB")
42
- image = image.resize((1024, 1024), Image.BICUBIC)
43
-
44
- # انتخاب مدل AnimeGAN
45
- model = load_animegan(style_name)
46
- face2paint = torch.hub.load(
47
- 'bryandlee/animegan2-pytorch:main',
48
- 'face2paint',
49
- pretrained=True,
50
- device=device
51
  )
52
 
53
- # تبدیل به انیمه
54
- anime_img = face2paint(model, image)
55
-
56
- # بهبود چهره با GFPGAN (اختیاری)
57
- if face_enhance:
58
- _, _, restored_img = restorer.enhance(
59
- np.array(anime_img),
60
- has_aligned=False,
61
- only_center_face=False,
62
- paste_back=True
63
- )
64
- anime_img = Image.fromarray(restored_img)
65
 
66
- return anime_img
67
-
68
- # ---- رابط کاربری ----
69
- styles = ["face_paint_512_v1", "face_paint_512_v2", "paprika", "celeba_distill"]
70
-
71
- demo = gr.Interface(
72
- fn=process_image,
73
  inputs=[
74
- gr.Image(type="pil", label="عکس ورودی"),
75
- gr.Dropdown(choices=styles, value="face_paint_512_v2", label="انتخاب استایل"),
76
- gr.Checkbox(label="بهبود چهره با GFPGAN", value=False)
 
 
 
77
  ],
78
- outputs=gr.Image(label="خروجی", type="pil"),
79
- title="AnimeGAN + GFPGAN",
80
- description="تبدیل عکس به انیمه با انتخاب استایل و بهبود چهره"
81
  )
82
 
83
- demo.launch()
 
 
1
  import gradio as gr
2
  import torch
 
3
  from PIL import Image
4
  import requests
5
+ from io import BytesIO
6
+
7
+ # بارگذاری مدل‌ها بر اساس استایل انتخابی
8
+ def load_model(style_name):
9
+ model = torch.hub.load(
10
+ "bryandlee/animegan2-pytorch:main",
11
+ "generator",
12
+ pretrained=style_name,
13
+ verbose=False
14
+ ).eval()
15
+ return model
16
+
17
+ # پردازش تصویر با AnimeGAN
18
+ def animegan2_transform(input_img, style_name):
19
+ if isinstance(input_img, str):
20
+ input_img = Image.open(BytesIO(requests.get(input_img).content)).convert("RGB")
21
+ elif isinstance(input_img, Image.Image):
22
+ input_img = input_img.convert("RGB")
23
+ else:
24
+ raise ValueError("فرمت تصویر ورودی صحیح نیست!")
25
+
26
+ # تغییر رزولوشن به 1024 برای کیفیت بالا
27
+ input_img = input_img.resize((1024, 1024))
28
+
29
+ # بارگذاری مدل انتخابی
30
+ model = load_model(style_name)
31
+
32
+ # بارگذاری تابع face2paint
33
+ face2paint_func = torch.hub.load(
34
+ "bryandlee/animegan2-pytorch:main",
35
+ "face2paint",
36
+ size=1024, # رزولوشن بالا
37
+ verbose=False
 
 
 
 
 
 
 
 
 
 
 
 
38
  )
39
 
40
+ # اجرای مدل
41
+ output_img = face2paint_func(model, input_img)
42
+ return output_img
 
 
 
 
 
 
 
 
 
43
 
44
+ # رابط کاربری Gradio
45
+ iface = gr.Interface(
46
+ fn=animegan2_transform,
 
 
 
 
47
  inputs=[
48
+ gr.Image(type="pil", label="آپلود تصویر یا وارد کردن URL"),
49
+ gr.Dropdown(
50
+ ["face_paint_512_v1", "face_paint_512_v2", "paprika", "celeba_distill"],
51
+ value="face_paint_512_v2",
52
+ label="انتخاب استایل"
53
+ )
54
  ],
55
+ outputs=gr.Image(type="pil", label="تصویر انیمه (کیفیت بالا)"),
56
+ title="AnimeGANv2 - تبدیل تصویر به انیمه با انتخاب استایل",
57
+ description="تصاویر خود را با کیفیت بالا و استایل‌های مختلف به انیمه تبدیل کنید."
58
  )
59
 
60
+ if __name__ == "__main__":
61
+ iface.launch()