PopTeil commited on
Commit
e7e6ef1
·
verified ·
1 Parent(s): b049bf7

Upload 2 files

Browse files
Files changed (2) hide show
  1. app.py +87 -0
  2. requirements.txt +6 -0
app.py ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 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):
9
+ url = "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash-latest:generateContent"
10
+ headers = {
11
+ "Content-Type": "application/json",
12
+ }
13
+ params = {
14
+ "key": api_key
15
+ }
16
+ data = {
17
+ "contents": [
18
+ {
19
+ "parts": [
20
+ {"text": prompt}
21
+ ]
22
+ }
23
+ ]
24
+ }
25
+ response = requests.post(url, headers=headers, params=params, json=data)
26
+
27
+ # Debug: Print the raw response
28
+ print(f"Gemini response status code: {response.status_code}")
29
+ print(f"Gemini response content: {response.text}")
30
+
31
+ try:
32
+ response_json = response.json()
33
+ except ValueError:
34
+ response_json = {}
35
+ print("Failed to decode JSON response")
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")
43
+
44
+ # Préparer l'image pour le modèle
45
+ inputs = processor(images=image, return_tensors="pt")
46
+ outputs = model(**inputs)
47
+
48
+ # Post-traitement des résultats pour obtenir les boîtes englobantes et les labels
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
62
+ if absents < 0:
63
+ absents = 0
64
+
65
+ # Générer le contenu de l'email avec Gemini
66
+ prompt = f"Notifier de l'absence: Le nombre de personnes présentes est de {persons}. Le nombre d'absents est de {absents}."
67
+ gemini_api_key = "AIzaSyCJVUr-76I4TL42X98d9U0THbRD3MKlB38" # Votre clé API Gemini
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)
requirements.txt ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ transformers
2
+ torch
3
+ requests
4
+ Pillow
5
+ streamlit
6
+