DavidNgoue commited on
Commit
1f58921
·
verified ·
1 Parent(s): 6280e83

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +90 -65
app.py CHANGED
@@ -135,13 +135,42 @@ def main():
135
  add_custom_css()
136
  add_custom_js()
137
 
138
-
139
  logo_path = "logo.jpg"
140
  logo = Image.open(logo_path)
141
  st.image(logo, width=150, caption="ADS VISOR")
142
 
143
  st.title("ADS VISOR - Un autre regard")
144
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
145
  st.sidebar.header("Chargement de l'image")
146
  if "default_image" not in st.session_state:
147
  st.session_state["default_image"] = None
@@ -156,6 +185,7 @@ def main():
156
  st.sidebar.warning("Veuillez charger une image pour commencer.")
157
  return
158
 
 
159
  st.sidebar.header("Fonctionnalités")
160
  menu_option = st.sidebar.selectbox(
161
  "Choisissez une fonctionnalité",
@@ -175,35 +205,8 @@ def main():
175
  image_np = st.session_state["default_image"]
176
 
177
  if menu_option == "Accueil":
178
- st.header("Bienvenue sur ADS VISOR")
179
- st.markdown(
180
- """
181
- <div class="stMarkdown">
182
- <h2>ADS VISOR est une application innovante pour analyser, transformer et explorer vos images. 🖼️✨</h2>
183
- <p>Que vous soyez un professionnel ou un passionné, découvrez un large éventail de fonctionnalités interactives !</p>
184
- <ul>
185
- <li><b>Transformations d'image :</b> Couleurs, niveaux de gris, etc.</li>
186
- <li><b>Découpage & Rotation :</b> Ajustez vos images à la perfection.</li>
187
- <li><b>Détection Faciale :</b> Identifiez les visages automatiquement.</li>
188
- <li><b>Codes-barres & QR Codes :</b> Génération rapide pour vos projets.</li>
189
- </ul>
190
- </div>
191
- """,
192
- unsafe_allow_html=True
193
- )
194
-
195
- st.write("### Équipe :")
196
- st.markdown(
197
- """
198
- | **Nom** | **Niveau** |
199
- |------------------------|---------------------------|
200
- | **Ngoue David** | Master 2 Intelligence Artificielle et Big Data |
201
- | **Bidzanga Armel** | Master 2 Intelligence Artificielle et Big Data |
202
- | **Nziou Serena** | Master 2 Administration de Systèmes d'Information |
203
- """,
204
- unsafe_allow_html=True
205
- )
206
-
207
  elif menu_option == "Transformations d'image":
208
  st.subheader("Transformations d'image")
209
 
@@ -391,51 +394,72 @@ def main():
391
  elif menu_option == "Détection Faciale":
392
  st.subheader("Détection Faciale")
393
 
 
 
 
 
394
  face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
395
 
396
- detection_option = st.radio(
397
- "Choisis la source pour la détection faciale",
398
- options=["Webcam", "Vidéo téléversée"]
399
- )
 
400
 
401
- if detection_option == "Webcam":
402
- if st.button("Lancer la détection via webcam"):
403
- cap = cv2.VideoCapture(0)
404
 
405
- if not cap.isOpened():
406
- st.error("Impossible d'accéder à la webcam, Hugging Face et le navigateur bloquent l'accès.")
407
- else:
408
- st.info("Appuyez sur Ctrl+C pour arrêter la détection.")
409
- frame_placeholder = st.empty()
410
 
411
- while True:
412
- ret, frame = cap.read()
413
- if not ret:
414
- st.error("Erreur lors de la capture vidéo.")
415
- break
 
 
416
 
417
- gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
418
- faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
 
419
 
420
- for (x, y, w, h) in faces:
421
- cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)
422
 
423
- frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
424
- frame_placeholder.image(frame, channels="RGB", use_container_width=True)
 
425
 
426
- cap.release()
 
 
 
 
427
 
428
- elif detection_option == "Vidéo téléversée":
429
- uploaded_video = st.file_uploader("Charge une vidéo", type=["mp4", "avi", "mov"])
430
- if uploaded_video is not None:
431
- video_bytes = uploaded_video.read()
432
- tfile = tempfile.NamedTemporaryFile(delete=False)
433
- tfile.write(video_bytes)
434
- tfile.close()
435
 
436
- cap = cv2.VideoCapture(tfile.name)
437
- frame_placeholder = st.empty()
 
438
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
439
  while cap.isOpened():
440
  ret, frame = cap.read()
441
  if not ret:
@@ -444,13 +468,14 @@ def main():
444
  gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
445
  faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
446
 
 
447
  for (x, y, w, h) in faces:
448
  cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)
449
 
450
- frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
451
- frame_placeholder.image(frame, channels="RGB", use_container_width=True)
452
 
453
  cap.release()
454
 
 
455
  if __name__ == "__main__":
456
  main()
 
135
  add_custom_css()
136
  add_custom_js()
137
 
 
138
  logo_path = "logo.jpg"
139
  logo = Image.open(logo_path)
140
  st.image(logo, width=150, caption="ADS VISOR")
141
 
142
  st.title("ADS VISOR - Un autre regard")
143
 
144
+ # Affichage du descriptif de l'application avant l'upload
145
+ st.header("Bienvenue sur ADS VISOR")
146
+ st.markdown(
147
+ """
148
+ <div class="stMarkdown">
149
+ <h2>ADS VISOR est une application innovante pour analyser, transformer et explorer vos images. 🖼️✨</h2>
150
+ <p>Que vous soyez un professionnel ou un passionné, découvrez un large éventail de fonctionnalités interactives !</p>
151
+ <ul>
152
+ <li><b>Transformations d'image :</b> Couleurs, niveaux de gris, etc.</li>
153
+ <li><b>Découpage & Rotation :</b> Ajustez vos images à la perfection.</li>
154
+ <li><b>Détection Faciale :</b> Identifiez les visages automatiquement.</li>
155
+ <li><b>Codes-barres & QR Codes :</b> Génération rapide pour vos projets.</li>
156
+ </ul>
157
+ </div>
158
+ """,
159
+ unsafe_allow_html=True
160
+ )
161
+
162
+ st.write("### Équipe :")
163
+ st.markdown(
164
+ """
165
+ | **Nom** | **Niveau** |
166
+ |------------------------|---------------------------|
167
+ | **Ngoue David** | Master 2 Intelligence Artificielle et Big Data |
168
+ | **Bidzanga Armel** | Master 2 Intelligence Artificielle et Big Data |
169
+ | **Nziou Serena** | Master 2 Administration de Systèmes d'Information |
170
+ """,
171
+ unsafe_allow_html=True
172
+ )
173
+
174
  st.sidebar.header("Chargement de l'image")
175
  if "default_image" not in st.session_state:
176
  st.session_state["default_image"] = None
 
185
  st.sidebar.warning("Veuillez charger une image pour commencer.")
186
  return
187
 
188
+ # La section des fonctionnalités est affichée uniquement après l'upload
189
  st.sidebar.header("Fonctionnalités")
190
  menu_option = st.sidebar.selectbox(
191
  "Choisissez une fonctionnalité",
 
205
  image_np = st.session_state["default_image"]
206
 
207
  if menu_option == "Accueil":
208
+ pass
209
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
210
  elif menu_option == "Transformations d'image":
211
  st.subheader("Transformations d'image")
212
 
 
394
  elif menu_option == "Détection Faciale":
395
  st.subheader("Détection Faciale")
396
 
397
+ # Sélectionner la source de l'image
398
+ source_option = st.radio("Choisissez la source", ("Image Importée", "Autre Image", "Webcam", "Vidéo"))
399
+
400
+ # Charger le classificateur de visages pré-entrainé de OpenCV
401
  face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
402
 
403
+ if source_option == "Image Importée":
404
+ if st.session_state["default_image"] is not None:
405
+ img = image_np
406
+ gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
407
+ faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
408
 
409
+ # Dessiner des rectangles autour des visages
410
+ for (x, y, w, h) in faces:
411
+ cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
412
 
413
+ st.image(img, caption="Image avec Visages Détectés", use_container_width=True)
 
 
 
 
414
 
415
+ elif source_option == "Autre Image":
416
+ uploaded_file_2 = st.file_uploader("Charge une autre image", type=["png", "jpg", "jpeg"])
417
+ if uploaded_file_2 is not None:
418
+ image_2 = Image.open(uploaded_file_2)
419
+ img = np.array(image_2)
420
+ gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
421
+ faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
422
 
423
+ # Dessiner des rectangles autour des visages
424
+ for (x, y, w, h) in faces:
425
+ cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
426
 
427
+ st.image(img, caption="Autre Image avec Visages Détectés", use_container_width=True)
 
428
 
429
+ elif source_option == "Webcam":
430
+ stframe = st.empty()
431
+ cap = cv2.VideoCapture(0)
432
 
433
+ while True:
434
+ ret, frame = cap.read()
435
+ if not ret:
436
+ st.write("Erreur dans la lecture de la webcam.")
437
+ break
438
 
439
+ gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
440
+ faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
 
 
 
 
 
441
 
442
+ # Dessiner des rectangles autour des visages
443
+ for (x, y, w, h) in faces:
444
+ cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)
445
 
446
+ # Affichage dans le streamlit
447
+ stframe.image(frame, channels="BGR", use_container_width=True)
448
+
449
+ if cv2.waitKey(1) & 0xFF == ord("q"): # Quitter avec la touche 'q'
450
+ break
451
+
452
+ cap.release()
453
+
454
+ elif source_option == "Vidéo":
455
+ video_file = st.file_uploader("Charge une vidéo", type=["mp4", "avi", "mov"])
456
+ if video_file is not None:
457
+ video_bytes = video_file.read()
458
+ with tempfile.NamedTemporaryFile(delete=False) as tmp_file:
459
+ tmp_file.write(video_bytes)
460
+ video_path = tmp_file.name
461
+
462
+ cap = cv2.VideoCapture(video_path)
463
  while cap.isOpened():
464
  ret, frame = cap.read()
465
  if not ret:
 
468
  gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
469
  faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
470
 
471
+ # Dessiner des rectangles autour des visages
472
  for (x, y, w, h) in faces:
473
  cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)
474
 
475
+ st.image(frame, caption="Vidéo avec Visages Détectés", use_container_width=True)
 
476
 
477
  cap.release()
478
 
479
+
480
  if __name__ == "__main__":
481
  main()