Update app.py
Browse files
app.py
CHANGED
|
@@ -77,6 +77,12 @@ def find_or_create_folder(folder_name, parent=None):
|
|
| 77 |
file = drive_service.files().create(body=file_metadata, fields='id').execute()
|
| 78 |
return file.get('id')
|
| 79 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 80 |
def process_image(uploaded_file):
|
| 81 |
try:
|
| 82 |
safe_name = uploaded_file.name.replace(" ", "_")
|
|
@@ -138,12 +144,6 @@ def process_image(uploaded_file):
|
|
| 138 |
except:
|
| 139 |
return None
|
| 140 |
|
| 141 |
-
def get_image_bytes(image):
|
| 142 |
-
buf = BytesIO()
|
| 143 |
-
image.save(buf, format="PNG")
|
| 144 |
-
buf.seek(0)
|
| 145 |
-
return buf
|
| 146 |
-
|
| 147 |
# 🗂️ Interface principal
|
| 148 |
st.title("IA Model Segmentation")
|
| 149 |
upload_option = st.radio("Choose upload type:", ["Single image", "Image folder"])
|
|
@@ -160,6 +160,20 @@ if upload_option == "Single image":
|
|
| 160 |
st.image(result["Segmentada"], caption="Segmentation", use_container_width=True)
|
| 161 |
st.image(result["Poligono"], caption="Polygon", use_container_width=True)
|
| 162 |
st.write(f"📏 **Segmented Area:** {result['Área Segmentada (px²)']:.2f} pixels²")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 163 |
else:
|
| 164 |
st.warning("⚠️ No segmentation was detected in this image.")
|
| 165 |
|
|
@@ -214,22 +228,20 @@ if results:
|
|
| 214 |
row = [imagem_escolhida, avaliacao, observacao]
|
| 215 |
sheet.append_row(row)
|
| 216 |
|
| 217 |
-
if avaliacao in ["
|
| 218 |
-
sufixo = "aceitavel" if avaliacao == "
|
| 219 |
parent_folder = find_or_create_folder("Feedback Segmentacoes")
|
| 220 |
subfolder = find_or_create_folder(imagem_escolhida.replace(".png", ""), parent_folder)
|
| 221 |
|
| 222 |
for r in results:
|
| 223 |
if r["Imagem"] == imagem_escolhida:
|
| 224 |
-
# Sempre salva a original
|
| 225 |
resized_original = resize_image(r["Exibir"])
|
| 226 |
buffer = BytesIO()
|
| 227 |
resized_original.save(buffer, format="PNG")
|
| 228 |
buffer.seek(0)
|
| 229 |
upload_to_drive(buffer, f"original_{sufixo}.png", subfolder)
|
| 230 |
|
| 231 |
-
|
| 232 |
-
if avaliacao != "Sem segmentação" and "Segmentada" in r and "Poligono" in r:
|
| 233 |
resized_segmented = resize_image(Image.open(BytesIO(r["Segmentada"].getvalue())))
|
| 234 |
resized_polygon = resize_image(Image.open(BytesIO(r["Poligono"].getvalue())))
|
| 235 |
|
|
|
|
| 77 |
file = drive_service.files().create(body=file_metadata, fields='id').execute()
|
| 78 |
return file.get('id')
|
| 79 |
|
| 80 |
+
def get_image_bytes(image):
|
| 81 |
+
buf = BytesIO()
|
| 82 |
+
image.save(buf, format="PNG")
|
| 83 |
+
buf.seek(0)
|
| 84 |
+
return buf
|
| 85 |
+
|
| 86 |
def process_image(uploaded_file):
|
| 87 |
try:
|
| 88 |
safe_name = uploaded_file.name.replace(" ", "_")
|
|
|
|
| 144 |
except:
|
| 145 |
return None
|
| 146 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 147 |
# 🗂️ Interface principal
|
| 148 |
st.title("IA Model Segmentation")
|
| 149 |
upload_option = st.radio("Choose upload type:", ["Single image", "Image folder"])
|
|
|
|
| 160 |
st.image(result["Segmentada"], caption="Segmentation", use_container_width=True)
|
| 161 |
st.image(result["Poligono"], caption="Polygon", use_container_width=True)
|
| 162 |
st.write(f"📏 **Segmented Area:** {result['Área Segmentada (px²)']:.2f} pixels²")
|
| 163 |
+
|
| 164 |
+
st.download_button(
|
| 165 |
+
label="📥 Baixar Imagem Segmentada",
|
| 166 |
+
data=result["Segmentada"],
|
| 167 |
+
file_name="imagem_segmentada.png",
|
| 168 |
+
mime="image/png"
|
| 169 |
+
)
|
| 170 |
+
|
| 171 |
+
st.download_button(
|
| 172 |
+
label="📥 Baixar Polígono",
|
| 173 |
+
data=result["Poligono"],
|
| 174 |
+
file_name="poligono.png",
|
| 175 |
+
mime="image/png"
|
| 176 |
+
)
|
| 177 |
else:
|
| 178 |
st.warning("⚠️ No segmentation was detected in this image.")
|
| 179 |
|
|
|
|
| 228 |
row = [imagem_escolhida, avaliacao, observacao]
|
| 229 |
sheet.append_row(row)
|
| 230 |
|
| 231 |
+
if avaliacao in ["Acceptable", "Bad", "No segmentation"]:
|
| 232 |
+
sufixo = "aceitavel" if avaliacao == "Acceptable" else "ruim" if avaliacao == "Bad" else "sem_segmentacao"
|
| 233 |
parent_folder = find_or_create_folder("Feedback Segmentacoes")
|
| 234 |
subfolder = find_or_create_folder(imagem_escolhida.replace(".png", ""), parent_folder)
|
| 235 |
|
| 236 |
for r in results:
|
| 237 |
if r["Imagem"] == imagem_escolhida:
|
|
|
|
| 238 |
resized_original = resize_image(r["Exibir"])
|
| 239 |
buffer = BytesIO()
|
| 240 |
resized_original.save(buffer, format="PNG")
|
| 241 |
buffer.seek(0)
|
| 242 |
upload_to_drive(buffer, f"original_{sufixo}.png", subfolder)
|
| 243 |
|
| 244 |
+
if avaliacao != "No segmentation" and "Segmentada" in r and "Poligono" in r:
|
|
|
|
| 245 |
resized_segmented = resize_image(Image.open(BytesIO(r["Segmentada"].getvalue())))
|
| 246 |
resized_polygon = resize_image(Image.open(BytesIO(r["Poligono"].getvalue())))
|
| 247 |
|