STREAMLITE / app1.py
Stroke-ia's picture
Rename app.py to app1.py
27c20ae verified
import streamlit as st
from PIL import Image
from ultralytics import YOLO
import cv2, os
from datetime import datetime
import numpy as np
# Charger le modèle
model = YOLO("best.pt")
# Répertoire de sauvegarde compatible Streamlit
save_dir = os.path.join("/tmp", "results")
os.makedirs(save_dir, exist_ok=True)
# ----------------- Détection vidéo -----------------
def predict_video(video_path):
cap = cv2.VideoCapture(video_path)
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
out_path = os.path.join(save_dir, f"video_result_{timestamp}.mp4")
fps = cap.get(cv2.CAP_PROP_FPS) or 30
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
out = cv2.VideoWriter(out_path, fourcc, fps, (width, height))
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
results = model.predict(frame, conf=0.25, verbose=False)
annotated = results[0].plot()
out.write(annotated)
cap.release()
out.release()
return out_path
# ----------------- Détection image -----------------
def predict_image(image):
image = np.array(image)
if image.shape[2] == 4:
image = cv2.cvtColor(image, cv2.COLOR_RGBA2BGR)
else:
image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
results = model.predict(source=image, conf=0.25, verbose=False)
annotated_image = results[0].plot()
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
out_path = os.path.join(save_dir, f"image_result_{timestamp}.png")
cv2.imwrite(out_path, annotated_image)
return out_path
# ----------------- Interface Streamlit -----------------
st.title("🧠 Stroke-IA – Détection d'AVC par IA")
st.markdown("""
Prototype d’analyse d’images & vidéos (usage démo, non médical).
Créé et propulsé par **Badsi Djilali — Ingénieur IA / Deep Learning**
""")
# --- Détection Vidéo ---
st.header("Détection sur vidéo")
video_file = st.file_uploader("Uploader une vidéo (mp4, mov, etc.)", type=["mp4", "mov"])
if video_file and st.button("Analyser la vidéo"):
temp_path = os.path.join(save_dir, "temp_video.mp4")
with open(temp_path, "wb") as f:
f.write(video_file.read())
result_path = predict_video(temp_path)
st.video(result_path)
# --- Détection Image ---
st.header("Détection sur image")
image_file = st.file_uploader("Uploader une image", type=["jpg", "jpeg", "png"])
if image_file and st.button("Analyser l'image"):
image = Image.open(image_file)
result_path = predict_image(image)
st.image(result_path, caption="Image annotée", use_column_width=True)
st.markdown(f"""
---
⚠️ **Disclaimer :** Stroke-IA est une démonstration technique. Les résultats ne constituent pas un avis médical.
© {datetime.now().year} — Badsi Djilali. Tous droits réservés.
""")