""" Programme qui permet de prendre des photos depuis la webcam du PC. Ce programme utilise la librairie (module) OpenCV. La photo est affichée dans une fenêtre, les touches utiles sont : - "Esc" : on sort de l'application, - "Barre d'espace" : on prend une photo, on l'affiche dans une fenêtre et on l'enregistre. """ # Librairie qui permet de manipuler les dates from datetime import datetime # Librairie qui permet de manipuler les répertoires, les fichiers import os # Utilisation de la librairie OpenCV import cv2 # Répertoire qui va contenir les images enregistrées # On utilise la fonction "strftime" de la librairie "datetime" pour # construire une chaine de caractères contenant la date du jour. IMAGES_DIR = datetime.strftime( datetime.now(), # Date du jour "%Y-%m-%d") # Format de la chaine de caractères # Teste si le répertoire existe if not os.path.exists(IMAGES_DIR): # Le répertoire n'existe pas, on le crée os.makedirs(IMAGES_DIR) # Quelques tests de l'utilisation de la librairie "os" # On affiche la liste des éléments contenus dans le répertoire print(os.listdir(IMAGES_DIR)) # On enregistre dans la variable "tab_images" la liste des éléments contenus # dans le répertoire tab_images = os.listdir(IMAGES_DIR) # On affiche le nombre d'éléments du répertoire print(len(tab_images)) # La fonction "listdir()" ne trie pas les éléments, on utilise # la fonction "sort()" pour trier le tableau d'éléments tab_images.sort() # On affiche le tableau d'éléments triés print(tab_images) # On ouvre une fenêtre qui a pour titre "Photomaton". # Cette fenêtre permettra d'afficher l'image en cours. cv2.namedWindow("Live") cv2.namedWindow("Photomaton") # On ouvre la webcam d'index 0 camera = cv2.VideoCapture(0) # Boucle infinie while True: # On capture une photo ret, frame = camera.read() # On affiche la photo sur la fenêtre cv2.imshow("Live", frame) # On attend que l'utilisateur appuie sur une touche # 100 milli secondes = 0,1 seconde. # La fonction retourne le code ASCII de la touche pressée. touche = cv2.waitKey(100) # Si la touche pressée est "Esc" (ASCII => 27) if touche == 27: # On arrête la boucle infinie break # Si la touche pressée est "Barre d'espace" (ASCII => 32) if touche == 32: # On construit une chaine de caractères contenant la date actuelle. # Cette chaine de caractères permettra de nommer le fichier image. date_str = datetime.strftime( datetime.now(), # La date courante "%Y-%m-%d_%H-%M-%S") # Le format du résultat, sous forme : année-mois-jour_heure-minutes-secondes # Ecriture du fichier, avec le nom (= date courante) + extension (JPEG) cv2.imwrite(IMAGES_DIR + "/" + date_str + ".jpg", frame) # On "retient" la photo originale prise pour la modifier photo = frame cv2.putText( photo, # Image "Hello!!!", # Texte (30, 30), # Origine cv2.FONT_HERSHEY_DUPLEX, # Police de caractères 2, # Echelle de police (255, 0, 255), # Couleur (B, G, R) 3, # Epaisseur du trait cv2.LINE_4, # Type de ligne True # Texte en mirroir horizontal ) # On affiche la photo cv2.imshow("Photomaton", photo) # Ecriture du fichier, avec le nom (= date courante) + extension (JPEG) cv2.imwrite(IMAGES_DIR + "/" + date_str + "_text.jpg", frame) # On éjecte la caméra camera.release() # On détruit toutes les fenêtres construites cv2.destroyAllWindows()