yemce commited on
Commit
539e42d
·
verified ·
1 Parent(s): 8705f8b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +82 -82
app.py CHANGED
@@ -1,82 +1,82 @@
1
- import gradio as gr
2
- from transformers import SegformerImageProcessor, AutoModelForSemanticSegmentation
3
- from PIL import Image
4
- import torch
5
- import torch.nn.functional as F
6
- import numpy as np
7
- import cv2 as cv
8
-
9
- # Model ve işlemci yükleme
10
- processor = SegformerImageProcessor.from_pretrained("mattmdjaga/segformer_b2_clothes")
11
- model = AutoModelForSemanticSegmentation.from_pretrained("mattmdjaga/segformer_b2_clothes")
12
-
13
- # Saç renklerini değiştiren fonksiyon
14
- def change_hair_color(image, selected_color):
15
- # Model için görüntüyü işleyin
16
- inputs = processor(images=image, return_tensors="pt")
17
-
18
- # Model çıktısını alarak segmentasyon maskesini oluşturun
19
- with torch.no_grad():
20
- outputs = model(**inputs)
21
- logits = outputs.logits.cpu()
22
-
23
- # Çıktıyı orijinal görüntü boyutuna göre yeniden boyutlandırın
24
- upsampled_logits = F.interpolate(
25
- logits,
26
- size=image.size[::-1], # (yükseklik, genişlik) olarak boyutlandırma
27
- mode="bilinear",
28
- align_corners=False,
29
- )
30
-
31
- # Segmentasyon maskesini oluşturun
32
- pred_seg = upsampled_logits.argmax(dim=1)[0].numpy()
33
-
34
- # Saç maskesini oluşturun (sınıf 2)
35
- hair_mask = (pred_seg == 2 ).astype(np.uint8)
36
-
37
- # Orijinal görüntüyü OpenCV formatına dönüştürün
38
- image_cv = cv.cvtColor(np.array(image), cv.COLOR_RGB2BGR)
39
-
40
- # Renk kanallarını ayırın
41
- b, g, r = cv.split(image_cv)
42
-
43
- # Farklı renk filtreleri uygulayın
44
- yesil_sac = cv.merge([b, r, g]) # Kırmızıyı yeşile kaydır
45
- mavi_sac = cv.merge([r, g, b]) # Kırmızı ve mavi yer değiştir
46
- sari_sac = cv.merge([b, r, r]) # Mavi kanalı azaltarak sarıya kaydır
47
- mor_sac = cv.merge([r, g, r]) # Yeşili azaltarak mora kaydır
48
-
49
- # Seçilen renge göre filtreyi uygula
50
- if selected_color == "Yeşil":
51
- final_image = cv.addWeighted(image_cv, 1, cv.bitwise_and(yesil_sac, yesil_sac, mask=hair_mask), 1, 0)
52
- elif selected_color == "Mavi":
53
- final_image = cv.addWeighted(image_cv, 1, cv.bitwise_and(mavi_sac, mavi_sac, mask=hair_mask), 1, 0)
54
- elif selected_color == "Sarı":
55
- final_image = cv.addWeighted(image_cv, 1, cv.bitwise_and(sari_sac, sari_sac, mask=hair_mask), 1, 0)
56
- elif selected_color == "Mor":
57
- final_image = cv.addWeighted(image_cv, 1, cv.bitwise_and(mor_sac, mor_sac, mask=hair_mask), 1, 0)
58
- else:
59
- final_image = image_cv # Orijinal renk
60
-
61
- # Çıktıyı RGB formatında dönüştür
62
- final_image_rgb = cv.cvtColor(final_image, cv.COLOR_BGR2RGB)
63
-
64
- return final_image_rgb
65
-
66
- # Gradio arayüzü
67
- iface = gr.Interface(
68
- fn=change_hair_color,
69
- inputs=[
70
- gr.Image(type="pil"),
71
- gr.Dropdown(
72
- choices=["Yeşil", "Mavi", "Sarı", "Mor"],
73
- label="Saç Rengini Seçin"
74
- )
75
- ],
76
- outputs=gr.Image(type="numpy", label="Sonuç"),
77
- live=False, # "live" özelliğini False yapıyoruz, böylece işlem sadece Submit butonuna basıldığında çalışır
78
- title="Saç Rengi Değiştirici",
79
- description="Saç rengi değiştirmek için bir görüntü yükleyin ve istediğiniz rengi seçin, ardından Submit butonuna tıklayın."
80
- )
81
-
82
- iface.launch()
 
1
+ import gradio as gr
2
+ from transformers import SegformerImageProcessor, AutoModelForSemanticSegmentation
3
+ from PIL import Image
4
+ import torch
5
+ import torch.nn.functional as F
6
+ import numpy as np
7
+ import cv2 as cv
8
+
9
+ # Model ve işlemci yükleme
10
+ processor = SegformerImageProcessor.from_pretrained("mattmdjaga/segformer_b2_clothes")
11
+ model = AutoModelForSemanticSegmentation.from_pretrained("mattmdjaga/segformer_b2_clothes")
12
+
13
+ # Saç renklerini değiştiren fonksiyon
14
+ def change_hair_color(image, selected_color):
15
+ # Model için görüntüyü işleyin
16
+ inputs = processor(images=image, return_tensors="pt")
17
+
18
+ # Model çıktısını alarak segmentasyon maskesini oluşturun
19
+ with torch.no_grad():
20
+ outputs = model(**inputs)
21
+ logits = outputs.logits.cpu()
22
+
23
+ # Çıktıyı orijinal görüntü boyutuna göre yeniden boyutlandırın
24
+ upsampled_logits = F.interpolate(
25
+ logits,
26
+ size=image.size[::-1], # (yükseklik, genişlik) olarak boyutlandırma
27
+ mode="bilinear",
28
+ align_corners=False,
29
+ )
30
+
31
+ # Segmentasyon maskesini oluşturun
32
+ pred_seg = upsampled_logits.argmax(dim=1)[0].numpy()
33
+
34
+ # Saç maskesini oluşturun (sınıf 2)
35
+ hair_mask = (pred_seg == 2 ).astype(np.uint8)
36
+
37
+ # Orijinal görüntüyü OpenCV formatına dönüştürün
38
+ image_cv = cv.cvtColor(np.array(image), cv.COLOR_RGB2BGR)
39
+
40
+ # Renk kanallarını ayırın
41
+ b, g, r = cv.split(image_cv)
42
+
43
+ # Farklı renk filtreleri uygulayın
44
+ yesil_sac = cv.merge([b, r, g]) # Kırmızıyı yeşile kaydır
45
+ mavi_sac = cv.merge([r, g, b]) # Kırmızı ve mavi yer değiştir
46
+ sari_sac = cv.merge([b, r, r]) # Mavi kanalı azaltarak sarıya kaydır
47
+ mor_sac = cv.merge([r, g, r]) # Yeşili azaltarak mora kaydır
48
+
49
+ # Seçilen renge göre filtreyi uygula
50
+ if selected_color == "Yeşil":
51
+ final_image = cv.addWeighted(image_cv, 1, cv.bitwise_and(yesil_sac, yesil_sac, mask=hair_mask), 1, 0)
52
+ elif selected_color == "Mavi":
53
+ final_image = cv.addWeighted(image_cv, 1, cv.bitwise_and(mavi_sac, mavi_sac, mask=hair_mask), 1, 0)
54
+ elif selected_color == "Sarı":
55
+ final_image = cv.addWeighted(image_cv, 1, cv.bitwise_and(sari_sac, sari_sac, mask=hair_mask), 1, 0)
56
+ elif selected_color == "Mor":
57
+ final_image = cv.addWeighted(image_cv, 1, cv.bitwise_and(mor_sac, mor_sac, mask=hair_mask), 1, 0)
58
+ else:
59
+ final_image = image_cv # Orijinal renk
60
+
61
+ # Çıktıyı RGB formatında dönüştür
62
+ final_image_rgb = cv.cvtColor(final_image, cv.COLOR_BGR2RGB)
63
+
64
+ return final_image_rgb
65
+
66
+ # Gradio arayüzü
67
+ iface = gr.Interface(
68
+ fn=change_hair_color,
69
+ inputs=[
70
+ gr.Image(type="pil"),
71
+ gr.Dropdown(
72
+ choices=["Yeşil", "Mavi", "Sarı", "Mor"],
73
+ label="Select Color"
74
+ )
75
+ ],
76
+ outputs=gr.Image(type="numpy", label="Sonuç"),
77
+ live=False,
78
+ title="Hair Filter",
79
+ description="To change hair color, upload an image and select the color you want, then click the Submit button."
80
+ )
81
+
82
+ iface.launch(share=True)