Update app.py
Browse files
app.py
CHANGED
@@ -90,24 +90,58 @@ import numpy as np
|
|
90 |
import cv2
|
91 |
from sklearn.cluster import KMeans
|
92 |
|
93 |
-
|
94 |
-
model = models[modelo]
|
95 |
-
resultado, img_out = processar_imagem_de_entrada(img, model)
|
96 |
|
97 |
-
|
|
|
|
|
|
|
|
|
|
|
98 |
kmeans = KMeans(n_clusters=2, random_state=0)
|
99 |
-
|
|
|
100 |
labels = kmeans.labels_
|
101 |
cluster_centers = kmeans.cluster_centers_
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
102 |
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
# Resultado
|
107 |
-
status_doenca = "Sim" if has_disease else "Não"
|
108 |
-
explanation = "A máquina detectou uma possível doença nos vasos sanguíneos." if has_disease else "A máquina não detectou nenhuma doença nos vasos sanguíneos."
|
109 |
|
110 |
-
return resultado, img_out, status_doenca, explanation
|
111 |
|
112 |
# Inicializar a contagem de análises
|
113 |
num_analises = 0
|
|
|
90 |
import cv2
|
91 |
from sklearn.cluster import KMeans
|
92 |
|
93 |
+
# ...
|
|
|
|
|
94 |
|
95 |
+
# Função para processar a imagem de entrada e calcular as características dos clusters
|
96 |
+
def processar_imagem_de_entrada_wrapper(img, modelo, salvar_resultado=False, nome_arquivo=None):
|
97 |
+
model = models[modelo]
|
98 |
+
resultado, img_out = processar_imagem_de_entrada(img, modelo, model) # Passe 'model' como 'pipe' aqui
|
99 |
+
|
100 |
+
# Resto do código permanece inalterado
|
101 |
kmeans = KMeans(n_clusters=2, random_state=0)
|
102 |
+
flattened_img = img_out[:, :, 0].reshape((-1, 1))
|
103 |
+
kmeans.fit(flattened_img)
|
104 |
labels = kmeans.labels_
|
105 |
cluster_centers = kmeans.cluster_centers_
|
106 |
+
|
107 |
+
# Extração de características dos clusters
|
108 |
+
num_clusters = len(cluster_centers)
|
109 |
+
cluster_features = []
|
110 |
+
for i in range(num_clusters):
|
111 |
+
cluster_mask = labels == i # Create a boolean mask for the cluster
|
112 |
+
|
113 |
+
# Calcular área do cluster
|
114 |
+
area = np.sum(cluster_mask)
|
115 |
+
|
116 |
+
if area == 0: # Skip empty clusters
|
117 |
+
continue
|
118 |
+
|
119 |
+
# Calcular forma do cluster usando a relação entre área e perímetro
|
120 |
+
contours, _ = cv2.findContours(np.uint8(cluster_mask), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
|
121 |
+
if len(contours) > 0:
|
122 |
+
perimeter = cv2.arcLength(contours[0], True)
|
123 |
+
compactness = 4 * np.pi * area / (perimeter ** 2)
|
124 |
+
|
125 |
+
cluster_features.append({'area': area, 'compactness': compactness})
|
126 |
+
|
127 |
+
# Decidir se há doença com base nas características dos clusters
|
128 |
+
has_disease_flag = any(feature['area'] >= 200 and feature['compactness'] < 0.3 for feature in cluster_features)
|
129 |
+
|
130 |
+
# Formatar o indicador de doença como uma string
|
131 |
+
if has_disease_flag:
|
132 |
+
status_doenca = "Sim"
|
133 |
+
explanation = "A máquina detectou uma possível doença nos vasos sanguíneos."
|
134 |
+
else:
|
135 |
+
status_doenca = "Não"
|
136 |
+
explanation = "A máquina não detectou nenhuma doença nos vasos sanguíneos."
|
137 |
+
|
138 |
+
return resultado, img_out, status_doenca, explanation, f"{num_analises} análises realizadas"
|
139 |
+
|
140 |
+
# ...
|
141 |
|
142 |
+
# Iniciar a interface Gradio
|
143 |
+
my_app.launch()
|
|
|
|
|
|
|
|
|
144 |
|
|
|
145 |
|
146 |
# Inicializar a contagem de análises
|
147 |
num_analises = 0
|