ballatraore's picture
Create app.py
88edfa2 verified
import gradio as gr
from ultralytics import YOLO
import cv2
import numpy as np
# Charger le modèle YOLOv8 pré-entraîné
model = YOLO("yolov8n.pt")
# Fonction pour la détection sur image
def detect_objects_image(img):
results = model(img) # Détection
annotated_frame = results[0].plot() # Annoter les résultats
return annotated_frame
# Fonction pour la détection sur video
def detect_video(source=0):
"""
Détection d'objets YOLOv8 sur chaque frame d'une vidéo.
:param source: 0 pour webcam, ou chemin d'une vidéo (.mp4, etc.)
"""
# Charger le modèle YOLOv8 (n = nano, rapide)
model = YOLO("yolov8n.pt")
# Ouvrir la vidéo ou la webcam
cap = cv2.VideoCapture(source)
if not cap.isOpened():
print("Erreur : Impossible d'ouvrir la vidéo ou webcam.")
return
while True:
ret, frame = cap.read()
if not ret:
break # Fin de vidéo
# Appliquer YOLO sur la frame
results = model(frame)
# Annoter la frame avec les résultats
annotated_frame = results[0].plot()
# Afficher la frame annotée
cv2.imshow("Détection vidéo - YOLOv8", annotated_frame)
# Quitter avec la touche 'q'
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# Libérer les ressources
cap.release()
cv2.destroyAllWindows()
demo = gr.Blocks()
#Interface Gradio pour image
image_input = gr.Image(type="numpy", label="Image à analyser")
image_output = gr.Image(type="numpy", label="Image annotée")
interface = gr.Interface(fn=detect_objects_image, inputs=image_input, outputs=image_output, title="Détection sur Image")
# Interface Gradio pour video
interface_video= gr.Interface(
fn=detect_video,
inputs=gr.Video(),
outputs=gr.Video(),
title="Détection d'objets sur Vidéo (YOLOv8)",
description="Charge une vidéo pour détecter les bagages avec YOLOv8."
)
# Lancer l'application avec les 2 onglets
gr.TabbedInterface([interface, interface_video],
["Image", 'Vidéo']).launch(debug=True)
# interface.launch() # This line is not needed as the TabbedInterface launches the interfaces.