Bonjour, je suis un élève de 11e année, je suis intéressé par la programmation, les sujets about-IT.
J'écris ce billet afin de partager mon projet, qui a pris 10 heures de ma vie le week-end et qui a été réalisé afin de comprendre les possibilités des méthodes modernes d'analyse de données. La publication peut être considérée comme un exemple de mise en œuvre réussie pour les personnes ignorantes dans ce domaine de la connaissance, ainsi que comme une demande d'indiquer mes erreurs pour les personnes qui sont bien informées en conséquence.
Éléments fournis: flux vidéo d'une caméra de surveillance, sur lequel se trouve un fragment de 100x50 pixels avec une image d'une place de parking spécifique, sur laquelle seule une voiture spécifique peut être présente ou absente.
Image d'une place de parking Objectif: déterminer la présence ou l'absence d'une voiture dans une place de parking.
Réception d'une image de caméra
J'utilise la bibliothèque openCV pour obtenir et prétraiter l'image.
Le code suivant que j'ai utilisé pour créer le jeu de données que j'utilise pour former le réseau neuronal: je photographie la place de parking toutes les heures, et après avoir reçu 60 photos, je les divise manuellement en une photo avec et sans machine.
dataminer.pyimport cv2 as cv import numpy as np import time cap = cv.VideoCapture() r = 0 while r <=100: cap.open('http://**.**.***.***:***/*****CG?container=mjpeg&stream=main')
Traitement d'image
J'ai pensé que c'était la bonne décision de former le réseau neuronal non pas sur les images sources, mais sur les images avec les contours de la voiture trouvées en utilisant la fonction cv2.findcontours (...).
Voici le code qui convertit l'image d'origine en image de contour:
Recherche de contours def contoursfinder(image): img = image.copy() srcimg = img.copy() hsv_min = np.array((0, 0, 0), np.uint8) hsv_max = np.array((255, 255, 60), np.uint8)
Le résultat de la fonction:
Réseau de neurones
J'ai utilisé la bibliothèque tensorflow (keras).
L'architecture du réseau a été copiée de l'exemple à partir d'Internet: pour moi, une explication n'est pas évidente pourquoi il en est ainsi. Si des personnes bien informées disent ou disent où lire pourquoi cette architecture est efficace ou pourquoi certaines autres seront plus efficaces, je vous en serai extrêmement reconnaissant.
Le modèle de réseau neuronal: séquentiel, se compose de deux couches cachées denses de 256 et 128 neurones et de couches d'entrée et de sortie.
Code model = keras.Sequential([ keras.layers.Flatten(input_shape=(100, 50)), keras.layers.Dense(256, activation=tf.nn.relu), keras.layers.Dense(128, activation=tf.nn.relu), keras.layers.Dense(2, activation=tf.nn.softmax) ]) model.compile(optimizer=tf.train.AdamOptimizer(), loss='sparse_categorical_crossentropy', metrics=['accuracy']) model.fit(trainingimagesarr, trainingimagesarrlabel, epochs=1, callbacks=[tbCallBack])
Avant l'entraînement, la matrice numpy entière a été divisée par 255 afin de donner des nombres compris entre 0 et 1 à l'entrée du réseau neuronal.
trainingimagesarr = trainingimagesarr / 255.0 trainingimagesarrlabel = np.array(trainingimagesarrlabel)-1
Maintenant, je peux appeler la fonction:
def realtest(): cap = cv.VideoCapture() cap.open('http://**.**.***.***:***/*****CG?container=mjpeg&stream=main') hasFrame, frame = cap.read() frame = frame[100:200, 300:750] quantframe = frame[0:100,275:325] quantframe = contoursfinder(quantframe) return model.predict(np.array([quantframe]))[0][1]>0.60
obtenir des données sur la présence de la voiture dans le parking.
Ne donne pas beaucoup de coups de pied, mais un peu :-)
Je vous remercie!