Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -30,19 +30,23 @@ def download_sam_model():
|
|
30 |
progress_bar.update(size)
|
31 |
return model_path
|
32 |
|
33 |
-
def show_mask(mask, image
|
34 |
"""Aplica uma máscara colorida sobre a imagem"""
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
color = np.array([30/255, 144/255, 255/255, 0.6])
|
39 |
h, w = mask.shape[-2:]
|
40 |
mask_image = mask.reshape(h, w, 1) * color.reshape(1, 1, -1)
|
41 |
|
42 |
-
|
|
|
|
|
|
|
|
|
|
|
43 |
mask_image_uint8 = (mask_image * 255).astype(np.uint8)
|
44 |
|
45 |
-
#
|
46 |
return cv2.addWeighted(img_rgba, 0.7, mask_image_uint8, 0.3, 0)
|
47 |
|
48 |
def load_sam_model():
|
@@ -96,24 +100,25 @@ def segment_teeth(image, predictor):
|
|
96 |
|
97 |
# Gerar pontos para segmentação
|
98 |
input_points = generate_grid_points(image)
|
99 |
-
input_labels = np.ones(len(input_points))
|
100 |
|
101 |
-
# Gerar máscaras
|
102 |
masks, scores, logits = predictor.predict(
|
103 |
point_coords=input_points,
|
104 |
point_labels=input_labels,
|
105 |
-
multimask_output=True
|
106 |
-
num_multimask_outputs=3
|
107 |
)
|
108 |
|
109 |
# Criar visualização da segmentação
|
110 |
final_image = image.copy()
|
111 |
-
|
|
|
|
|
112 |
final_image = show_mask(mask, final_image)
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
|
118 |
return final_image, masks
|
119 |
|
@@ -159,6 +164,9 @@ Observações:
|
|
159 |
return result, analysis
|
160 |
|
161 |
except Exception as e:
|
|
|
|
|
|
|
162 |
return None, f"Erro durante o processamento: {str(e)}"
|
163 |
|
164 |
# Create Gradio interface
|
|
|
30 |
progress_bar.update(size)
|
31 |
return model_path
|
32 |
|
33 |
+
def show_mask(mask, image):
|
34 |
"""Aplica uma máscara colorida sobre a imagem"""
|
35 |
+
# Gerar cor aleatória para a máscara
|
36 |
+
color = np.concatenate([np.random.random(3), np.array([0.6])], axis=0)
|
37 |
+
|
|
|
38 |
h, w = mask.shape[-2:]
|
39 |
mask_image = mask.reshape(h, w, 1) * color.reshape(1, 1, -1)
|
40 |
|
41 |
+
# Converter imagem para RGBA se necessário
|
42 |
+
if image.shape[-1] == 3:
|
43 |
+
img_rgba = cv2.cvtColor(image, cv2.COLOR_RGB2RGBA)
|
44 |
+
else:
|
45 |
+
img_rgba = image
|
46 |
+
|
47 |
mask_image_uint8 = (mask_image * 255).astype(np.uint8)
|
48 |
|
49 |
+
# Misturar a máscara com a imagem original
|
50 |
return cv2.addWeighted(img_rgba, 0.7, mask_image_uint8, 0.3, 0)
|
51 |
|
52 |
def load_sam_model():
|
|
|
100 |
|
101 |
# Gerar pontos para segmentação
|
102 |
input_points = generate_grid_points(image)
|
103 |
+
input_labels = np.ones(len(input_points))
|
104 |
|
105 |
+
# Gerar máscaras usando os parâmetros corretos
|
106 |
masks, scores, logits = predictor.predict(
|
107 |
point_coords=input_points,
|
108 |
point_labels=input_labels,
|
109 |
+
multimask_output=True # Isso permitirá múltiplas máscaras por ponto
|
|
|
110 |
)
|
111 |
|
112 |
# Criar visualização da segmentação
|
113 |
final_image = image.copy()
|
114 |
+
|
115 |
+
# Aplicar cada máscara com uma cor diferente
|
116 |
+
for mask in masks:
|
117 |
final_image = show_mask(mask, final_image)
|
118 |
+
|
119 |
+
# Desenhar os pontos de referência
|
120 |
+
for point in input_points:
|
121 |
+
cv2.circle(final_image, (int(point[0]), int(point[1])), 3, (255, 0, 0), -1)
|
122 |
|
123 |
return final_image, masks
|
124 |
|
|
|
164 |
return result, analysis
|
165 |
|
166 |
except Exception as e:
|
167 |
+
import traceback
|
168 |
+
error_trace = traceback.format_exc()
|
169 |
+
print(error_trace) # Isso ajudará na depuração
|
170 |
return None, f"Erro durante o processamento: {str(e)}"
|
171 |
|
172 |
# Create Gradio interface
|