nmariotto's picture
Update app.py
7d1eeef verified
Raw
History Blame
3.14 kB
import streamlit as st
import roboflow
import pandas as pd
import matplotlib.pyplot as plt
import zipfile
import tempfile
import os
import json
from shapely.geometry import Polygon
from PIL import Image
from io import BytesIO
from concurrent.futures import ThreadPoolExecutor
from google.oauth2 import service_account
from googleapiclient.discovery import build
from googleapiclient.http import MediaIoBaseUpload
import gspread
import time
st.set_page_config(page_title="Image Segmentation - Roboflow", layout="wide")
st.markdown("""
<style>
.main {
background-color: #ffffff;
color: #002b55;
}
.stButton > button {
background-color: #004080;
color: white;
border: none;
padding: 0.5em 1em;
border-radius: 5px;
}
.stButton > button:hover {
background-color: #0059b3;
color: white;
}
</style>
""", unsafe_allow_html=True)
# πŸ”₯ Initialize Roboflow
API_KEY = "mGkz7QhkhD90YfeiaOxV"
rf = roboflow.Roboflow(api_key=API_KEY)
project = rf.workspace().project("pre-eclampsia-vhaot")
model = project.version("20").model
model.confidence = 80
model.overlap = 25
dpi_value = 300
with st.expander("βš™οΈ Advanced Settings", expanded=True):
model.confidence = st.slider("Model Confidence (%)", 20, 100, 80)
# πŸ“ Setup Google Drive and Sheets
scope = ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/spreadsheets"]
credentials_dict = json.loads(st.secrets["gcp_service_account"])
credentials = service_account.Credentials.from_service_account_info(credentials_dict, scopes=scope)
drive_service = build("drive", "v3", credentials=credentials)
sheets_client = gspread.authorize(credentials)
sheet = sheets_client.open_by_url(st.secrets["feedback_sheet_url"]).sheet1
# πŸ“Œ Helper Functions
def calculate_polygon_area(points):
polygon = Polygon([(p['x'], p['y']) for p in points])
return polygon.area
def safe_predict(image_path):
for attempt in range(3):
try:
return model.predict(image_path)
except:
time.sleep(1)
return None
def resize_image(image):
return image.resize((640, 640))
def upload_to_drive(image_bytes, filename, folder_id):
media = MediaIoBaseUpload(image_bytes, mimetype='image/png')
drive_service.files().create(
body={"name": filename, "parents": [folder_id]},
media_body=media,
fields='id'
).execute()
def find_or_create_folder(folder_name, parent=None):
query = f"name='{folder_name}' and mimeType='application/vnd.google-apps.folder' and trashed=false"
if parent:
query += f" and '{parent}' in parents"
results = drive_service.files().list(q=query, spaces='drive', fields='files(id, name)').execute()
folders = results.get('files', [])
if folders:
return folders[0]['id']
file_metadata = {
'name': folder_name,
'mimeType': 'application/vnd.google-apps.folder'
}
if parent:
file_metadata['parents'] = [parent]
file = drive_service.files().create(body=file_metadata, fields='id').execute()
return file.get('id')