NoahH7 commited on
Commit
620a4c4
·
verified ·
1 Parent(s): b1a2dec

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +10 -9
app.py CHANGED
@@ -2,7 +2,7 @@ import streamlit as st
2
  import requests
3
  from transformers import DetrImageProcessor, DetrForObjectDetection
4
  import torch
5
- from PIL import Image, ImageDraw, ImageFont
6
 
7
  # Fonction pour générer du texte avec Gemini
8
  def generate_text_with_gemini(api_key, prompt):
@@ -36,7 +36,7 @@ def generate_text_with_gemini(api_key, prompt):
36
 
37
  return response.status_code, response_json
38
 
39
- # Fonction de traitement de l'image et d'annotation des personnes détectées
40
  def process_image(image, confidence_threshold=0.7):
41
  processor = DetrImageProcessor.from_pretrained("facebook/detr-resnet-50", revision="no_timm")
42
  model = DetrForObjectDetection.from_pretrained("facebook/detr-resnet-50", revision="no_timm")
@@ -52,17 +52,15 @@ def process_image(image, confidence_threshold=0.7):
52
  # Convertir l'image pour dessiner
53
  draw_image = image.copy()
54
  draw = ImageDraw.Draw(draw_image)
55
- font = ImageFont.load_default()
56
 
57
  # Compter le nombre de personnes détectées
58
  persons = 0
59
- for idx, (score, label, box) in enumerate(zip(results["scores"], results["labels"], results["boxes"])):
60
  if score >= confidence_threshold and model.config.id2label[label.item()] == 'person':
61
  persons += 1
62
  box = [round(i, 2) for i in box.tolist()]
63
- # Dessiner le texte avec le numéro de la personne détectée
64
- text = f'Personne {persons}'
65
- draw.text((box[0], box[1]), text, fill="blue", font=font)
66
 
67
  return draw_image, persons
68
 
@@ -72,6 +70,9 @@ st.title("Analyse d'Images pour Détection de Personnes")
72
  # Téléchargement des images
73
  uploaded_files = st.file_uploader("Choisissez des images (vous pouvez en ajouter plusieurs)", type=["jpg", "jpeg", "png"], accept_multiple_files=True)
74
 
 
 
 
75
  # Saisie du nombre de personnes attendues pour chaque image
76
  if uploaded_files:
77
  number_of_people = []
@@ -89,7 +90,7 @@ if uploaded_files:
89
  st.image(image, caption=f'Image téléchargée : {uploaded_file.name}', use_column_width=True)
90
 
91
  # Traitement de l'image
92
- modified_image, detected_persons = process_image(image, confidence_threshold=0.7)
93
 
94
  # Calculer le nombre d'absents
95
  absents = number_of_people[i] - detected_persons
@@ -97,7 +98,7 @@ if uploaded_files:
97
  absents = 0
98
 
99
  # Afficher l'image modifiée
100
- st.image(modified_image, caption=f'Image avec personnes annotées : {uploaded_file.name}', use_column_width=True)
101
 
102
  # Afficher le nombre d'absents
103
  st.write(f"**Nombre d'absents pour l'image {i + 1} ({uploaded_file.name}) : {absents}**")
 
2
  import requests
3
  from transformers import DetrImageProcessor, DetrForObjectDetection
4
  import torch
5
+ from PIL import Image, ImageDraw
6
 
7
  # Fonction pour générer du texte avec Gemini
8
  def generate_text_with_gemini(api_key, prompt):
 
36
 
37
  return response.status_code, response_json
38
 
39
+ # Fonction de traitement de l'image et d'encadrement des personnes détectées
40
  def process_image(image, confidence_threshold=0.7):
41
  processor = DetrImageProcessor.from_pretrained("facebook/detr-resnet-50", revision="no_timm")
42
  model = DetrForObjectDetection.from_pretrained("facebook/detr-resnet-50", revision="no_timm")
 
52
  # Convertir l'image pour dessiner
53
  draw_image = image.copy()
54
  draw = ImageDraw.Draw(draw_image)
 
55
 
56
  # Compter le nombre de personnes détectées
57
  persons = 0
58
+ for score, label, box in zip(results["scores"], results["labels"], results["boxes"]):
59
  if score >= confidence_threshold and model.config.id2label[label.item()] == 'person':
60
  persons += 1
61
  box = [round(i, 2) for i in box.tolist()]
62
+ # Dessiner le rectangle rouge autour de la personne détectée
63
+ draw.rectangle(box, outline="red", width=2)
 
64
 
65
  return draw_image, persons
66
 
 
70
  # Téléchargement des images
71
  uploaded_files = st.file_uploader("Choisissez des images (vous pouvez en ajouter plusieurs)", type=["jpg", "jpeg", "png"], accept_multiple_files=True)
72
 
73
+ # Saisie du seuil de confiance
74
+ confidence_threshold = st.slider("Seuil de confiance pour la détection (0 à 1)", 0.0, 1.0, 0.7, 0.01)
75
+
76
  # Saisie du nombre de personnes attendues pour chaque image
77
  if uploaded_files:
78
  number_of_people = []
 
90
  st.image(image, caption=f'Image téléchargée : {uploaded_file.name}', use_column_width=True)
91
 
92
  # Traitement de l'image
93
+ modified_image, detected_persons = process_image(image, confidence_threshold=confidence_threshold)
94
 
95
  # Calculer le nombre d'absents
96
  absents = number_of_people[i] - detected_persons
 
98
  absents = 0
99
 
100
  # Afficher l'image modifiée
101
+ st.image(modified_image, caption=f'Image avec personnes détectées : {uploaded_file.name}', use_column_width=True)
102
 
103
  # Afficher le nombre d'absents
104
  st.write(f"**Nombre d'absents pour l'image {i + 1} ({uploaded_file.name}) : {absents}**")