EnginDev commited on
Commit
d25af04
·
verified ·
1 Parent(s): 2b89597

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +29 -8
app.py CHANGED
@@ -4,33 +4,54 @@ from PIL import Image
4
  import torch
5
  import numpy as np
6
  import traceback
 
7
 
8
- # SAM Modell laden (CPU-kompatibel)
9
  model_id = "facebook/sam-vit-base"
10
  processor = SamProcessor.from_pretrained(model_id)
11
  model = SamModel.from_pretrained(model_id)
12
 
 
 
 
 
13
  def segment_image(image):
14
  try:
15
  device = torch.device("cpu")
16
  model.to(device)
17
 
18
- # Bild vorbereiten
19
  inputs = processor(images=image, return_tensors="pt").to(device)
20
 
21
  with torch.no_grad():
22
  outputs = model(**inputs)
23
 
24
- # Die alte API erwartet NICHT das Schlüsselwort 'outputs'
25
  masks = processor.post_process_masks(
26
  outputs.pred_masks.cpu(),
27
  inputs["original_sizes"].cpu(),
28
  inputs["reshaped_input_sizes"].cpu()
29
  )
30
 
31
- mask = masks[0][0][0].numpy()
32
- mask_image = Image.fromarray((mask * 255).astype(np.uint8))
33
- return mask_image
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
 
35
  except Exception as e:
36
  return f"Fehler:\n{traceback.format_exc()}"
@@ -39,8 +60,8 @@ demo = gr.Interface(
39
  fn=segment_image,
40
  inputs=gr.Image(type="pil", label="Upload your fish image"),
41
  outputs=gr.Image(type="pil", label="Segmented Output"),
42
- title="FishBoost Segment Anything (Meta SAM - CPU Safe)",
43
- description="Stable version for Hugging Face CPU runtime. Uses Meta's SAM model."
44
  )
45
 
46
  demo.launch()
 
4
  import torch
5
  import numpy as np
6
  import traceback
7
+ import random
8
 
9
+ # SAM Modell laden (Meta)
10
  model_id = "facebook/sam-vit-base"
11
  processor = SamProcessor.from_pretrained(model_id)
12
  model = SamModel.from_pretrained(model_id)
13
 
14
+ def random_color():
15
+ """Erzeugt eine zufällige RGB-Farbe"""
16
+ return [random.randint(0, 255) for _ in range(3)]
17
+
18
  def segment_image(image):
19
  try:
20
  device = torch.device("cpu")
21
  model.to(device)
22
 
23
+ # Eingabe vorbereiten
24
  inputs = processor(images=image, return_tensors="pt").to(device)
25
 
26
  with torch.no_grad():
27
  outputs = model(**inputs)
28
 
29
+ # Masken verarbeiten (ohne Parameternamen)
30
  masks = processor.post_process_masks(
31
  outputs.pred_masks.cpu(),
32
  inputs["original_sizes"].cpu(),
33
  inputs["reshaped_input_sizes"].cpu()
34
  )
35
 
36
+ mask_arrays = masks[0].numpy()
37
+
38
+ # Originalbild als Basis
39
+ img_array = np.array(image)
40
+ color_overlay = np.zeros_like(img_array)
41
+
42
+ # Jede Maske anders einfärben
43
+ for i in range(len(mask_arrays)):
44
+ mask = mask_arrays[i][0]
45
+ color = random_color()
46
+ for c in range(3):
47
+ color_overlay[:, :, c] += (mask * color[c]).astype(np.uint8)
48
+
49
+ # Farbmischung: 60% Original, 40% Maske
50
+ blended = Image.fromarray(
51
+ (0.6 * img_array + 0.4 * color_overlay).astype(np.uint8)
52
+ )
53
+
54
+ return blended
55
 
56
  except Exception as e:
57
  return f"Fehler:\n{traceback.format_exc()}"
 
60
  fn=segment_image,
61
  inputs=gr.Image(type="pil", label="Upload your fish image"),
62
  outputs=gr.Image(type="pil", label="Segmented Output"),
63
+ title="FishBoost Colorful SAM Segmentation (Meta Model)",
64
+ description="Zeigt farbige Objekt-Segmente basierend auf Meta's SAM-Modell. Jede erkannte Region erhält eine zufällige Farbe."
65
  )
66
 
67
  demo.launch()