NoahH7 commited on
Commit
50963d3
·
verified ·
1 Parent(s): f88f508

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +29 -17
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
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
40
  def process_image(image):
41
  processor = DetrImageProcessor.from_pretrained("facebook/detr-resnet-50", revision="no_timm")
42
  model = DetrForObjectDetection.from_pretrained("facebook/detr-resnet-50", revision="no_timm")
@@ -49,13 +49,20 @@ def process_image(image):
49
  target_sizes = torch.tensor([image.size[::-1]])
50
  results = processor.post_process_object_detection(outputs, target_sizes=target_sizes, threshold=0.9)[0]
51
 
 
 
 
 
52
  # Compter le nombre de personnes détectées
53
  persons = 0
54
  for score, label, box in zip(results["scores"], results["labels"], results["boxes"]):
55
  if model.config.id2label[label.item()] == 'person':
56
  persons += 1
57
-
58
- expected_number_of_persons = 100 # Nombre attendu de personnes
 
 
 
59
  absents = expected_number_of_persons - persons
60
 
61
  # Assurez-vous que le nombre d'absents ne soit pas négatif
@@ -68,20 +75,25 @@ def process_image(image):
68
  status_code, response_json = generate_text_with_gemini(gemini_api_key, prompt)
69
  email_content = response_json.get('candidates', [{}])[0].get('content', {}).get('parts', [{}])[0].get('text', 'Content generation failed.')
70
 
71
- return email_content
72
 
73
  # Interface Streamlit
74
- st.title("Analyse d'Image pour Détection de Personnes")
75
 
76
- uploaded_file = st.file_uploader("Choisissez une image", type=["jpg", "jpeg", "png"])
77
 
78
- if uploaded_file is not None:
79
- # Lire l'image téléchargée
80
- image = Image.open(uploaded_file)
81
- st.image(image, caption='Image téléchargée', use_column_width=True)
82
-
83
- # Traitement de l'image
84
- email_content = process_image(image)
85
-
86
- # Utilisation de Markdown pour un rendu graphique plus riche
87
- st.markdown(email_content)
 
 
 
 
 
 
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):
41
  processor = DetrImageProcessor.from_pretrained("facebook/detr-resnet-50", revision="no_timm")
42
  model = DetrForObjectDetection.from_pretrained("facebook/detr-resnet-50", revision="no_timm")
 
49
  target_sizes = torch.tensor([image.size[::-1]])
50
  results = processor.post_process_object_detection(outputs, target_sizes=target_sizes, threshold=0.9)[0]
51
 
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 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=3)
64
+
65
+ expected_number_of_persons = 10 # Nombre attendu de personnes
66
  absents = expected_number_of_persons - persons
67
 
68
  # Assurez-vous que le nombre d'absents ne soit pas négatif
 
75
  status_code, response_json = generate_text_with_gemini(gemini_api_key, prompt)
76
  email_content = response_json.get('candidates', [{}])[0].get('content', {}).get('parts', [{}])[0].get('text', 'Content generation failed.')
77
 
78
+ return draw_image, email_content
79
 
80
  # Interface Streamlit
81
+ st.title("Analyse d'Images pour Détection de Personnes")
82
 
83
+ uploaded_files = st.file_uploader("Choisissez jusqu'à 3 images", type=["jpg", "jpeg", "png"], accept_multiple_files=True)
84
 
85
+ if uploaded_files:
86
+ for uploaded_file in uploaded_files:
87
+ # Lire l'image téléchargée
88
+ image = Image.open(uploaded_file)
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, email_content = process_image(image)
93
+
94
+ # Afficher l'image modifiée
95
+ st.image(modified_image, caption=f'Image avec personnes détectées : {uploaded_file.name}', use_column_width=True)
96
+
97
+ # Afficher le contenu généré
98
+ st.write(f"**Contenu généré pour {uploaded_file.name} :**")
99
+ st.markdown(email_content)