Spaces:
Sleeping
Sleeping
root16285
commited on
Commit
·
766dbd9
1
Parent(s):
82ff894
Add ZKA detection application with YOLOv5
Browse files- README.md +49 -6
- app.py +315 -0
- requirements.txt +8 -0
README.md
CHANGED
|
@@ -1,13 +1,56 @@
|
|
| 1 |
---
|
| 2 |
-
title:
|
| 3 |
-
emoji:
|
| 4 |
-
colorFrom:
|
| 5 |
-
colorTo:
|
| 6 |
sdk: gradio
|
| 7 |
-
sdk_version:
|
| 8 |
app_file: app.py
|
| 9 |
pinned: false
|
| 10 |
license: mit
|
| 11 |
---
|
| 12 |
|
| 13 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
---
|
| 2 |
+
title: ZKA Marchés CI - Détection d'Objets
|
| 3 |
+
emoji: 🚦
|
| 4 |
+
colorFrom: blue
|
| 5 |
+
colorTo: purple
|
| 6 |
sdk: gradio
|
| 7 |
+
sdk_version: 4.44.0
|
| 8 |
app_file: app.py
|
| 9 |
pinned: false
|
| 10 |
license: mit
|
| 11 |
---
|
| 12 |
|
| 13 |
+
# 🚀 ZKA Marchés CI - Détection d'Objets par IA
|
| 14 |
+
|
| 15 |
+
## 📋 Description
|
| 16 |
+
|
| 17 |
+
**ZKA Marchés CI** est un système intelligent de gestion des flux dans les marchés d'Abidjan (Côte d'Ivoire) basé sur la vision par ordinateur avec **YOLOv5**.
|
| 18 |
+
|
| 19 |
+
Cette application permet de détecter en temps réel:
|
| 20 |
+
- 👥 **Personnes** - Pour la gestion des flux piétons
|
| 21 |
+
- 🚗 **Véhicules** - Voitures, motos, bus, camions
|
| 22 |
+
- 🚲 **Deux-roues** - Vélos, trottinettes
|
| 23 |
+
- 🛒 **Objets de marché** - Mobilier urbain et infrastructure
|
| 24 |
+
|
| 25 |
+
## 🎯 Objectifs du Projet
|
| 26 |
+
|
| 27 |
+
Le projet vise à résoudre les problématiques majeures des marchés africains:
|
| 28 |
+
|
| 29 |
+
- **Surpopulation** : Jusqu'à 50 000 personnes/jour dans certains marchés
|
| 30 |
+
- **Sécurité** : Prévention des bousculades et accidents
|
| 31 |
+
- **Congestion** : Gestion optimale des voies de circulation
|
| 32 |
+
- **Données** : Collecte de statistiques fiables pour la planification urbaine
|
| 33 |
+
|
| 34 |
+
## 🛠️ Technologies Utilisées
|
| 35 |
+
|
| 36 |
+
- **YOLOv5** (Ultralytics) - Détection d'objets en temps réel
|
| 37 |
+
- **PyTorch** - Framework de deep learning
|
| 38 |
+
- **Gradio** - Interface web interactive
|
| 39 |
+
- **OpenCV** - Traitement d'images
|
| 40 |
+
|
| 41 |
+
## 🚀 Utilisation
|
| 42 |
+
|
| 43 |
+
1. **Uploadez une image** ou utilisez les exemples fournis
|
| 44 |
+
2. **Ajustez le seuil de confiance** selon vos besoins (0.1 à 0.9)
|
| 45 |
+
3. **Choisissez la langue** des labels (Français 🇫🇷 ou English 🇬🇧)
|
| 46 |
+
4. **Cliquez sur "Détecter les Objets"** pour lancer l'analyse
|
| 47 |
+
|
| 48 |
+
## 📊 Capacités de Détection
|
| 49 |
+
|
| 50 |
+
L'application peut détecter **80 classes d'objets** du dataset COCO.
|
| 51 |
+
|
| 52 |
+
## 🎓 Contexte Académique
|
| 53 |
+
|
| 54 |
+
Projet développé à **ESATIC** (École Supérieure Africaine des TIC) pour la gestion urbaine en Afrique.
|
| 55 |
+
|
| 56 |
+
**Marchés ciblés:** Adjamé, Treichville, Cocody, Yopougon (Abidjan)
|
app.py
ADDED
|
@@ -0,0 +1,315 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
ZKA Marchés CI - Détection d'Objets avec YOLOv5
|
| 3 |
+
Application Gradio pour Hugging Face Spaces
|
| 4 |
+
"""
|
| 5 |
+
|
| 6 |
+
import gradio as gr
|
| 7 |
+
import torch
|
| 8 |
+
import cv2
|
| 9 |
+
import numpy as np
|
| 10 |
+
from PIL import Image
|
| 11 |
+
import sys
|
| 12 |
+
from pathlib import Path
|
| 13 |
+
|
| 14 |
+
# Add YOLOv5 to path
|
| 15 |
+
YOLOV5_ROOT = Path(__file__).resolve().parent
|
| 16 |
+
if str(YOLOV5_ROOT) not in sys.path:
|
| 17 |
+
sys.path.insert(0, str(YOLOV5_ROOT))
|
| 18 |
+
|
| 19 |
+
# Charger le modèle YOLOv5
|
| 20 |
+
print("🔄 Chargement du modèle YOLOv5...")
|
| 21 |
+
try:
|
| 22 |
+
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)
|
| 23 |
+
model.conf = 0.25 # Seuil de confiance
|
| 24 |
+
model.iou = 0.45 # Seuil IoU pour NMS
|
| 25 |
+
print("✅ Modèle chargé avec succès!")
|
| 26 |
+
except Exception as e:
|
| 27 |
+
print(f"❌ Erreur de chargement: {e}")
|
| 28 |
+
model = None
|
| 29 |
+
|
| 30 |
+
# Traduction des classes en français
|
| 31 |
+
CLASS_NAMES_FR = {
|
| 32 |
+
'person': 'Personne',
|
| 33 |
+
'bicycle': 'Vélo',
|
| 34 |
+
'car': 'Voiture',
|
| 35 |
+
'motorcycle': 'Moto',
|
| 36 |
+
'airplane': 'Avion',
|
| 37 |
+
'bus': 'Bus',
|
| 38 |
+
'train': 'Train',
|
| 39 |
+
'truck': 'Camion',
|
| 40 |
+
'boat': 'Bateau',
|
| 41 |
+
'traffic light': 'Feu de circulation',
|
| 42 |
+
'fire hydrant': 'Borne d\'incendie',
|
| 43 |
+
'stop sign': 'Panneau stop',
|
| 44 |
+
'parking meter': 'Parcomètre',
|
| 45 |
+
'bench': 'Banc',
|
| 46 |
+
'bird': 'Oiseau',
|
| 47 |
+
'cat': 'Chat',
|
| 48 |
+
'dog': 'Chien',
|
| 49 |
+
'horse': 'Cheval',
|
| 50 |
+
'sheep': 'Mouton',
|
| 51 |
+
'cow': 'Vache',
|
| 52 |
+
'elephant': 'Éléphant',
|
| 53 |
+
'bear': 'Ours',
|
| 54 |
+
'zebra': 'Zèbre',
|
| 55 |
+
'giraffe': 'Girafe',
|
| 56 |
+
'backpack': 'Sac à dos',
|
| 57 |
+
'umbrella': 'Parapluie',
|
| 58 |
+
'handbag': 'Sac à main',
|
| 59 |
+
'tie': 'Cravate',
|
| 60 |
+
'suitcase': 'Valise',
|
| 61 |
+
'frisbee': 'Frisbee',
|
| 62 |
+
'skis': 'Skis',
|
| 63 |
+
'snowboard': 'Snowboard',
|
| 64 |
+
'sports ball': 'Ballon de sport',
|
| 65 |
+
'kite': 'Cerf-volant',
|
| 66 |
+
'baseball bat': 'Batte de baseball',
|
| 67 |
+
'baseball glove': 'Gant de baseball',
|
| 68 |
+
'skateboard': 'Skateboard',
|
| 69 |
+
'surfboard': 'Planche de surf',
|
| 70 |
+
'tennis racket': 'Raquette de tennis',
|
| 71 |
+
'bottle': 'Bouteille',
|
| 72 |
+
'wine glass': 'Verre à vin',
|
| 73 |
+
'cup': 'Tasse',
|
| 74 |
+
'fork': 'Fourchette',
|
| 75 |
+
'knife': 'Couteau',
|
| 76 |
+
'spoon': 'Cuillère',
|
| 77 |
+
'bowl': 'Bol',
|
| 78 |
+
'banana': 'Banane',
|
| 79 |
+
'apple': 'Pomme',
|
| 80 |
+
'sandwich': 'Sandwich',
|
| 81 |
+
'orange': 'Orange',
|
| 82 |
+
'broccoli': 'Brocoli',
|
| 83 |
+
'carrot': 'Carotte',
|
| 84 |
+
'hot dog': 'Hot-dog',
|
| 85 |
+
'pizza': 'Pizza',
|
| 86 |
+
'donut': 'Donut',
|
| 87 |
+
'cake': 'Gâteau',
|
| 88 |
+
'chair': 'Chaise',
|
| 89 |
+
'couch': 'Canapé',
|
| 90 |
+
'potted plant': 'Plante en pot',
|
| 91 |
+
'bed': 'Lit',
|
| 92 |
+
'dining table': 'Table à manger',
|
| 93 |
+
'toilet': 'Toilettes',
|
| 94 |
+
'tv': 'Télévision',
|
| 95 |
+
'laptop': 'Ordinateur portable',
|
| 96 |
+
'mouse': 'Souris',
|
| 97 |
+
'remote': 'Télécommande',
|
| 98 |
+
'keyboard': 'Clavier',
|
| 99 |
+
'cell phone': 'Téléphone portable',
|
| 100 |
+
'microwave': 'Micro-ondes',
|
| 101 |
+
'oven': 'Four',
|
| 102 |
+
'toaster': 'Grille-pain',
|
| 103 |
+
'sink': 'Évier',
|
| 104 |
+
'refrigerator': 'Réfrigérateur',
|
| 105 |
+
'book': 'Livre',
|
| 106 |
+
'clock': 'Horloge',
|
| 107 |
+
'vase': 'Vase',
|
| 108 |
+
'scissors': 'Ciseaux',
|
| 109 |
+
'teddy bear': 'Ours en peluche',
|
| 110 |
+
'hair drier': 'Sèche-cheveux',
|
| 111 |
+
'toothbrush': 'Brosse à dents'
|
| 112 |
+
}
|
| 113 |
+
|
| 114 |
+
def detect_objects(image, confidence_threshold, language):
|
| 115 |
+
"""
|
| 116 |
+
Détecte les objets dans une image
|
| 117 |
+
|
| 118 |
+
Args:
|
| 119 |
+
image: Image PIL
|
| 120 |
+
confidence_threshold: Seuil de confiance (0-1)
|
| 121 |
+
language: Langue pour les labels ('fr' ou 'en')
|
| 122 |
+
|
| 123 |
+
Returns:
|
| 124 |
+
image_result: Image avec les bounding boxes
|
| 125 |
+
stats_text: Statistiques de détection
|
| 126 |
+
detections_html: Tableau HTML des détections
|
| 127 |
+
"""
|
| 128 |
+
if model is None:
|
| 129 |
+
return None, "❌ Modèle non chargé", ""
|
| 130 |
+
|
| 131 |
+
if image is None:
|
| 132 |
+
return None, "❌ Aucune image fournie", ""
|
| 133 |
+
|
| 134 |
+
try:
|
| 135 |
+
# Mettre à jour le seuil de confiance
|
| 136 |
+
model.conf = confidence_threshold
|
| 137 |
+
|
| 138 |
+
# Effectuer la détection
|
| 139 |
+
results = model(image)
|
| 140 |
+
|
| 141 |
+
# Obtenir les détections
|
| 142 |
+
detections = results.pandas().xyxy[0]
|
| 143 |
+
|
| 144 |
+
# Créer l'image avec les bounding boxes
|
| 145 |
+
img_result = np.array(results.render()[0])
|
| 146 |
+
img_result = Image.fromarray(img_result)
|
| 147 |
+
|
| 148 |
+
# Statistiques
|
| 149 |
+
num_detections = len(detections)
|
| 150 |
+
|
| 151 |
+
if num_detections == 0:
|
| 152 |
+
stats_text = "🔍 Aucun objet détecté"
|
| 153 |
+
detections_html = ""
|
| 154 |
+
else:
|
| 155 |
+
# Compter les objets par classe
|
| 156 |
+
class_counts = detections['name'].value_counts().to_dict()
|
| 157 |
+
|
| 158 |
+
# Texte des statistiques
|
| 159 |
+
stats_text = f"✅ **{num_detections} objet(s) détecté(s)**\n\n"
|
| 160 |
+
stats_text += "**Répartition par classe:**\n"
|
| 161 |
+
for class_name, count in class_counts.items():
|
| 162 |
+
if language == 'fr' and class_name in CLASS_NAMES_FR:
|
| 163 |
+
class_name = CLASS_NAMES_FR[class_name]
|
| 164 |
+
stats_text += f"- {class_name}: {count}\n"
|
| 165 |
+
|
| 166 |
+
# Tableau HTML des détections
|
| 167 |
+
detections_html = "<table style='width:100%; border-collapse: collapse;'>"
|
| 168 |
+
detections_html += "<tr style='background-color: #f2f2f2;'>"
|
| 169 |
+
detections_html += "<th style='border: 1px solid #ddd; padding: 8px;'>Classe</th>"
|
| 170 |
+
detections_html += "<th style='border: 1px solid #ddd; padding: 8px;'>Confiance</th>"
|
| 171 |
+
detections_html += "<th style='border: 1px solid #ddd; padding: 8px;'>Position (x1, y1, x2, y2)</th>"
|
| 172 |
+
detections_html += "</tr>"
|
| 173 |
+
|
| 174 |
+
for idx, row in detections.iterrows():
|
| 175 |
+
class_name = row['name']
|
| 176 |
+
if language == 'fr' and class_name in CLASS_NAMES_FR:
|
| 177 |
+
class_name = CLASS_NAMES_FR[class_name]
|
| 178 |
+
|
| 179 |
+
conf = row['confidence']
|
| 180 |
+
x1, y1, x2, y2 = int(row['xmin']), int(row['ymin']), int(row['xmax']), int(row['ymax'])
|
| 181 |
+
|
| 182 |
+
detections_html += f"<tr>"
|
| 183 |
+
detections_html += f"<td style='border: 1px solid #ddd; padding: 8px;'>{class_name}</td>"
|
| 184 |
+
detections_html += f"<td style='border: 1px solid #ddd; padding: 8px;'>{conf:.2%}</td>"
|
| 185 |
+
detections_html += f"<td style='border: 1px solid #ddd; padding: 8px;'>({x1}, {y1}, {x2}, {y2})</td>"
|
| 186 |
+
detections_html += "</tr>"
|
| 187 |
+
|
| 188 |
+
detections_html += "</table>"
|
| 189 |
+
|
| 190 |
+
return img_result, stats_text, detections_html
|
| 191 |
+
|
| 192 |
+
except Exception as e:
|
| 193 |
+
error_msg = f"❌ Erreur lors de la détection: {str(e)}"
|
| 194 |
+
return None, error_msg, ""
|
| 195 |
+
|
| 196 |
+
# Interface Gradio
|
| 197 |
+
with gr.Blocks(theme=gr.themes.Soft(), title="ZKA - Détection d'Objets") as demo:
|
| 198 |
+
|
| 199 |
+
gr.Markdown("""
|
| 200 |
+
# 🚀 ZKA Marchés CI - Détection d'Objets par IA
|
| 201 |
+
|
| 202 |
+
### Système intelligent de gestion des flux dans les marchés d'Abidjan
|
| 203 |
+
|
| 204 |
+
Cette application utilise **YOLOv5** pour détecter en temps réel différents objets dans vos images.
|
| 205 |
+
Développée dans le cadre d'un projet de gestion des flux humains et véhicules dans les marchés d'Abidjan.
|
| 206 |
+
|
| 207 |
+
📌 **Instructions:**
|
| 208 |
+
1. Uploadez une image ou utilisez un exemple
|
| 209 |
+
2. Ajustez le seuil de confiance si nécessaire
|
| 210 |
+
3. Choisissez la langue des labels
|
| 211 |
+
4. Cliquez sur "🔍 Détecter les Objets"
|
| 212 |
+
""")
|
| 213 |
+
|
| 214 |
+
with gr.Row():
|
| 215 |
+
with gr.Column(scale=1):
|
| 216 |
+
# Entrées
|
| 217 |
+
input_image = gr.Image(
|
| 218 |
+
type="pil",
|
| 219 |
+
label="📸 Image d'entrée",
|
| 220 |
+
height=400
|
| 221 |
+
)
|
| 222 |
+
|
| 223 |
+
confidence_slider = gr.Slider(
|
| 224 |
+
minimum=0.1,
|
| 225 |
+
maximum=0.9,
|
| 226 |
+
value=0.25,
|
| 227 |
+
step=0.05,
|
| 228 |
+
label="🎯 Seuil de confiance",
|
| 229 |
+
info="Plus la valeur est élevée, plus les détections sont précises (mais moins nombreuses)"
|
| 230 |
+
)
|
| 231 |
+
|
| 232 |
+
language_radio = gr.Radio(
|
| 233 |
+
choices=[("Français 🇫🇷", "fr"), ("English 🇬🇧", "en")],
|
| 234 |
+
value="fr",
|
| 235 |
+
label="🌍 Langue des labels"
|
| 236 |
+
)
|
| 237 |
+
|
| 238 |
+
detect_btn = gr.Button("🔍 Détecter les Objets", variant="primary", size="lg")
|
| 239 |
+
|
| 240 |
+
gr.Markdown("""
|
| 241 |
+
### 🎯 Objets détectables:
|
| 242 |
+
|
| 243 |
+
**Transport & Mobilité:**
|
| 244 |
+
- Personnes, véhicules (voitures, motos, bus, camions)
|
| 245 |
+
- Vélos, trottinettes
|
| 246 |
+
|
| 247 |
+
**Infrastructure & Commerce:**
|
| 248 |
+
- Mobilier urbain (bancs, tables)
|
| 249 |
+
- Objets de marché
|
| 250 |
+
|
| 251 |
+
**Total:** 80 classes d'objets COCO
|
| 252 |
+
""")
|
| 253 |
+
|
| 254 |
+
with gr.Column(scale=1):
|
| 255 |
+
# Sorties
|
| 256 |
+
output_image = gr.Image(
|
| 257 |
+
type="pil",
|
| 258 |
+
label="✅ Image avec détections",
|
| 259 |
+
height=400
|
| 260 |
+
)
|
| 261 |
+
|
| 262 |
+
stats_output = gr.Markdown(label="📊 Statistiques")
|
| 263 |
+
|
| 264 |
+
detections_table = gr.HTML(label="📋 Détails des détections")
|
| 265 |
+
|
| 266 |
+
# Exemples
|
| 267 |
+
gr.Markdown("### 📷 Exemples d'images")
|
| 268 |
+
gr.Examples(
|
| 269 |
+
examples=[
|
| 270 |
+
["https://images.unsplash.com/photo-1573164713988-8665fc963095?w=800", 0.25, "fr"],
|
| 271 |
+
["https://images.unsplash.com/photo-1449824913935-59a10b8d2000?w=800", 0.25, "fr"],
|
| 272 |
+
["https://images.unsplash.com/photo-1519046904884-53103b34b206?w=800", 0.3, "fr"],
|
| 273 |
+
],
|
| 274 |
+
inputs=[input_image, confidence_slider, language_radio],
|
| 275 |
+
outputs=[output_image, stats_output, detections_table],
|
| 276 |
+
fn=detect_objects,
|
| 277 |
+
cache_examples=False,
|
| 278 |
+
)
|
| 279 |
+
|
| 280 |
+
# Actions
|
| 281 |
+
detect_btn.click(
|
| 282 |
+
fn=detect_objects,
|
| 283 |
+
inputs=[input_image, confidence_slider, language_radio],
|
| 284 |
+
outputs=[output_image, stats_output, detections_table]
|
| 285 |
+
)
|
| 286 |
+
|
| 287 |
+
gr.Markdown("""
|
| 288 |
+
---
|
| 289 |
+
|
| 290 |
+
### 📖 À propos du projet
|
| 291 |
+
|
| 292 |
+
**ZKA Marchés CI** est un système intelligent de gestion des flux dans les marchés d'Abidjan basé sur YOLOv5.
|
| 293 |
+
|
| 294 |
+
**Objectifs:**
|
| 295 |
+
- Détection en temps réel des personnes et véhicules
|
| 296 |
+
- Prévention de la surpopulation
|
| 297 |
+
- Gestion optimale de l'espace
|
| 298 |
+
- Amélioration de la sécurité
|
| 299 |
+
|
| 300 |
+
**Technologies:**
|
| 301 |
+
- YOLOv5 (Ultralytics)
|
| 302 |
+
- PyTorch
|
| 303 |
+
- Gradio
|
| 304 |
+
|
| 305 |
+
**Développé par:** ESATIC (École Supérieure Africaine des TIC)
|
| 306 |
+
|
| 307 |
+
---
|
| 308 |
+
|
| 309 |
+
💡 **Conseil:** Pour de meilleurs résultats, utilisez des images claires avec un bon éclairage.
|
| 310 |
+
""")
|
| 311 |
+
|
| 312 |
+
# Lancer l'application
|
| 313 |
+
if __name__ == "__main__":
|
| 314 |
+
print("🚀 Lancement de l'application ZKA...")
|
| 315 |
+
demo.launch()
|
requirements.txt
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
gradio>=4.0.0
|
| 2 |
+
torch>=2.0.0
|
| 3 |
+
torchvision>=0.15.0
|
| 4 |
+
ultralytics>=8.0.0
|
| 5 |
+
opencv-python>=4.8.0
|
| 6 |
+
pillow>=10.0.0
|
| 7 |
+
numpy>=1.24.0
|
| 8 |
+
pandas>=2.0.0
|