Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -35,7 +35,6 @@ def generate_qrcode(link):
|
|
| 35 |
qr.make(fit=True)
|
| 36 |
qr_image = qr.make_image(fill_color="black", back_color="white")
|
| 37 |
|
| 38 |
-
# Réduire la taille tout en maintenant la lisibilité (ex: 100x100 pixels)
|
| 39 |
small_qr_image = qr_image.resize((100, 100), Image.Resampling.LANCZOS)
|
| 40 |
|
| 41 |
buffer = BytesIO()
|
|
@@ -48,7 +47,6 @@ def main():
|
|
| 48 |
st.set_page_config(page_title="Application de Vision par Ordinateur", layout="wide")
|
| 49 |
st.title("Application de Vision par Ordinateur")
|
| 50 |
|
| 51 |
-
# Section pour le choix de l'image par défaut
|
| 52 |
st.sidebar.header("Chargement de l'image")
|
| 53 |
if "default_image" not in st.session_state:
|
| 54 |
st.session_state["default_image"] = None
|
|
@@ -63,7 +61,6 @@ def main():
|
|
| 63 |
st.sidebar.warning("Veuillez charger une image pour commencer.")
|
| 64 |
return
|
| 65 |
|
| 66 |
-
# Menu des fonctionnalités
|
| 67 |
st.sidebar.header("Fonctionnalités")
|
| 68 |
menu_option = st.sidebar.selectbox("Choisissez une fonctionnalité", [
|
| 69 |
"Accueil",
|
|
@@ -72,7 +69,8 @@ def main():
|
|
| 72 |
"Rotation",
|
| 73 |
"Floutage",
|
| 74 |
"Contours",
|
| 75 |
-
"Génération de Code-barres et QR Code"
|
|
|
|
| 76 |
])
|
| 77 |
|
| 78 |
image_np = st.session_state["default_image"]
|
|
@@ -152,15 +150,59 @@ def main():
|
|
| 152 |
link = st.text_input("Entre un lien ou un texte pour générer le code-barres et le QR code")
|
| 153 |
if st.button("Générer"):
|
| 154 |
if link:
|
| 155 |
-
# Génération du Code-barres
|
| 156 |
barcode_image = generate_barcode(link)
|
| 157 |
st.image(barcode_image, caption="Code-barres généré", use_container_width=True)
|
| 158 |
|
| 159 |
-
# Génération du QR code
|
| 160 |
qrcode_image = generate_qrcode(link)
|
| 161 |
st.image(qrcode_image, caption="QR Code généré", use_container_width=True)
|
| 162 |
else:
|
| 163 |
st.error("Veuillez entrer un lien valide pour générer les codes.")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 164 |
|
| 165 |
|
| 166 |
if __name__ == "__main__":
|
|
|
|
| 35 |
qr.make(fit=True)
|
| 36 |
qr_image = qr.make_image(fill_color="black", back_color="white")
|
| 37 |
|
|
|
|
| 38 |
small_qr_image = qr_image.resize((100, 100), Image.Resampling.LANCZOS)
|
| 39 |
|
| 40 |
buffer = BytesIO()
|
|
|
|
| 47 |
st.set_page_config(page_title="Application de Vision par Ordinateur", layout="wide")
|
| 48 |
st.title("Application de Vision par Ordinateur")
|
| 49 |
|
|
|
|
| 50 |
st.sidebar.header("Chargement de l'image")
|
| 51 |
if "default_image" not in st.session_state:
|
| 52 |
st.session_state["default_image"] = None
|
|
|
|
| 61 |
st.sidebar.warning("Veuillez charger une image pour commencer.")
|
| 62 |
return
|
| 63 |
|
|
|
|
| 64 |
st.sidebar.header("Fonctionnalités")
|
| 65 |
menu_option = st.sidebar.selectbox("Choisissez une fonctionnalité", [
|
| 66 |
"Accueil",
|
|
|
|
| 69 |
"Rotation",
|
| 70 |
"Floutage",
|
| 71 |
"Contours",
|
| 72 |
+
"Génération de Code-barres et QR Code",
|
| 73 |
+
"Détection Faciale"
|
| 74 |
])
|
| 75 |
|
| 76 |
image_np = st.session_state["default_image"]
|
|
|
|
| 150 |
link = st.text_input("Entre un lien ou un texte pour générer le code-barres et le QR code")
|
| 151 |
if st.button("Générer"):
|
| 152 |
if link:
|
|
|
|
| 153 |
barcode_image = generate_barcode(link)
|
| 154 |
st.image(barcode_image, caption="Code-barres généré", use_container_width=True)
|
| 155 |
|
|
|
|
| 156 |
qrcode_image = generate_qrcode(link)
|
| 157 |
st.image(qrcode_image, caption="QR Code généré", use_container_width=True)
|
| 158 |
else:
|
| 159 |
st.error("Veuillez entrer un lien valide pour générer les codes.")
|
| 160 |
+
|
| 161 |
+
elif menu_option == "Détection Faciale":
|
| 162 |
+
st.subheader("Détection Faciale")
|
| 163 |
+
|
| 164 |
+
# Charger le modèle Haarcascade pour la détection des visages
|
| 165 |
+
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
|
| 166 |
+
|
| 167 |
+
# Bouton pour démarrer la détection des visages
|
| 168 |
+
if st.button("Lancer la détection des visages"):
|
| 169 |
+
|
| 170 |
+
# Initialiser la webcam
|
| 171 |
+
cap = cv2.VideoCapture(0) # 0 pour la webcam par défaut
|
| 172 |
+
|
| 173 |
+
if not cap.isOpened():
|
| 174 |
+
st.error("Impossible d'accéder à la webcam.")
|
| 175 |
+
else:
|
| 176 |
+
st.info("Appuyez sur Ctrl+C pour arrêter la détection.")
|
| 177 |
+
|
| 178 |
+
# Flux vidéo en temps réel
|
| 179 |
+
frame_placeholder = st.empty()
|
| 180 |
+
|
| 181 |
+
while True:
|
| 182 |
+
ret, frame = cap.read()
|
| 183 |
+
if not ret:
|
| 184 |
+
st.error("Erreur lors de la capture vidéo.")
|
| 185 |
+
break
|
| 186 |
+
|
| 187 |
+
# Convertir en niveaux de gris
|
| 188 |
+
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
|
| 189 |
+
|
| 190 |
+
# Détecter les visages
|
| 191 |
+
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
|
| 192 |
+
|
| 193 |
+
# Dessiner des rectangles autour des visages détectés
|
| 194 |
+
for (x, y, w, h) in faces:
|
| 195 |
+
cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)
|
| 196 |
+
|
| 197 |
+
# Convertir l'image pour Streamlit
|
| 198 |
+
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
|
| 199 |
+
|
| 200 |
+
# Afficher l'image dans l'interface Streamlit
|
| 201 |
+
frame_placeholder.image(frame, channels="RGB", use_container_width=True)
|
| 202 |
+
|
| 203 |
+
# Libérer la webcam une fois le flux terminé
|
| 204 |
+
cap.release()
|
| 205 |
+
|
| 206 |
|
| 207 |
|
| 208 |
if __name__ == "__main__":
|