yemce commited on
Commit
2acd366
·
verified ·
1 Parent(s): 4c0cff2

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +32 -34
app.py CHANGED
@@ -5,13 +5,23 @@ 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
 
14
- def change_hair_color(image, selected_color):
 
 
15
 
16
  inputs = processor(images=image, return_tensors="pt")
17
 
@@ -23,50 +33,38 @@ def change_hair_color(image, selected_color):
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 == "Green":
51
- final_image = cv.addWeighted(image_cv, 1, cv.bitwise_and(yesil_sac, yesil_sac, mask=hair_mask), 1, 0)
52
- elif selected_color == "Blue":
53
- final_image = cv.addWeighted(image_cv, 1, cv.bitwise_and(mavi_sac, mavi_sac, mask=hair_mask), 1, 0)
54
- elif selected_color == "Yellow":
55
- final_image = cv.addWeighted(image_cv, 1, cv.bitwise_and(sari_sac, sari_sac, mask=hair_mask), 1, 0)
56
- elif selected_color == "Purple":
57
-
58
- final_image = cv.addWeighted(image_cv, 1, cv.bitwise_and(mor_sac, mor_sac, mask=hair_mask), 1, 0)
59
- else:
60
- final_image = image_cv # Orijinal renk
61
-
62
- # Çıktıyı RGB formatında dönüştür
63
- final_image_rgb = cv.cvtColor(final_image, cv.COLOR_BGR2RGB)
64
 
65
- return final_image_rgb
 
 
 
 
66
 
67
- # Gradio arayüzü
68
  iface = gr.Interface(
69
- fn=change_hair_color,
70
  inputs=[
71
  gr.Image(type="pil"),
72
  gr.Dropdown(
 
5
  import torch.nn.functional as F
6
  import numpy as np
7
  import cv2 as cv
8
+ import matplotlib.pyplot as plt
9
+
10
 
 
11
  processor = SegformerImageProcessor.from_pretrained("mattmdjaga/segformer_b2_clothes")
12
  model = AutoModelForSemanticSegmentation.from_pretrained("mattmdjaga/segformer_b2_clothes")
13
 
14
+ # Renk tonlarını belirleyin (HSV'deki hue değerleri 0-180 arasında değişir)
15
+ color_map = {
16
+ "Green": 60,
17
+ "Blue": 120,
18
+ "Yellow": 30,
19
+ "Purple": 150
20
+ }
21
 
22
+ def apply_filter(image, selected_color):
23
+
24
+ image = image.convert("RGB")
25
 
26
  inputs = processor(images=image, return_tensors="pt")
27
 
 
33
  # Çıktıyı orijinal görüntü boyutuna göre yeniden boyutlandırın
34
  upsampled_logits = F.interpolate(
35
  logits,
36
+ size=image.size[::-1],
37
  mode="bilinear",
38
  align_corners=False,
39
  )
40
 
41
+
42
  pred_seg = upsampled_logits.argmax(dim=1)[0].numpy()
43
 
44
+ hair_mask = (pred_seg == 2).astype(np.uint8)
 
45
 
46
+ # Orijinal görüntüyü OpenCV formatına dönüştürün ve HSV uzayına çevirin
47
  image_cv = cv.cvtColor(np.array(image), cv.COLOR_RGB2BGR)
48
+ hsv_image = cv.cvtColor(image_cv, cv.COLOR_BGR2HSV)
49
+
50
+ # Seçilen renk için hue değeri alın
51
+ hue_value = color_map.get(selected_color, 0) # Varsayılan olarak 0 (orijinal renk tonu)
52
+
53
+ # Maske ile sadece saç bölgesini güncelleyin
54
+ hsv_image[..., 0] = np.where(hair_mask == 1, hue_value, hsv_image[..., 0])
55
+
56
+ # Saç bölgesinde doygunluk artırımı (isteğe bağlı)
57
+ hsv_image[..., 1] = np.where(hair_mask == 1, hsv_image[..., 1] * 1.5, hsv_image[..., 1])
58
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
 
60
+ final_image = cv.cvtColor(hsv_image, cv.COLOR_HSV2BGR)
61
+
62
+
63
+ return Image.fromarray(cv.cvtColor(final_image, cv.COLOR_BGR2RGB))
64
+
65
 
 
66
  iface = gr.Interface(
67
+ fn=apply_filter,
68
  inputs=[
69
  gr.Image(type="pil"),
70
  gr.Dropdown(