Outils pour utilisateurs

Outils du site


diy:projets:motiondetection

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
diy:projets:motiondetection [2018/05/24 14:22] – [Motion Detection] ecaussediy:projets:motiondetection [2018/05/28 08:44] (Version actuelle) – [Motion Detection] ecausse
Ligne 1: Ligne 1:
 ====== Motion Detection ====== ====== Motion Detection ======
-(En construction) 
  
-La détection de mouvement est utilisé en général dans la vidéo surveillance, elle sert à detecter les mouvement et capturer les évenements. La détection de mouvement est généralement un algorithme de surveillance qui, lorsqu'il détecte des mouvements, signale à la caméra de surveillance de commencer à capturer l'événement. Aussi appelé détection d'activité. Un système de surveillance avancé de détection de mouvement peut analyser le type de mouvement pour voir s'il justifie une alarme.+La détection de mouvement est utilisé en général dans la vidéo surveillance, elle sert à détecter les mouvements et capturer les événements. La détection de mouvement est généralement un algorithme de surveillance qui, lorsqu'il détecte des mouvements, signale à la caméra de surveillance de commencer à capturer l'événement. Aussi appelé détection d'activité. Un système de surveillance avancé de détection de mouvement peut analyser le type de mouvement pour voir s'il justifie une alarme.
  
 Le programme présenté ici est bien plus basique. Ce dernier capture la vidéo et encadre les objets en mouvement. Le programme présenté ici est bien plus basique. Ce dernier capture la vidéo et encadre les objets en mouvement.
Ligne 18: Ligne 17:
 prevFrame = None prevFrame = None
 </code> </code>
-Dans un premier temps, on capture la vidéo du device. Puis on créé une variable //prevFrame// qu'on initialise à None, celle ci va nous servir plus tard a faire la différence entre l'image actuelle et l'image précédente, pour voir si il y a eu du mouvement.+Dans un premier temps, on capture la vidéo du device. Puis on crée une variable //prevFrame// qu'on initialise à None, celle ci va nous servir plus tard a faire la différence entre l'image actuelle et l'image précédente, pour voir si il y a eu du mouvement.
  
 Nous arrivons ensuite dans l'essentielle du code, la boucle While, ici nous lisons chaque image une par une, si l'image n'est pas lu correctement dans le buffer, alors on quitte la boucle. Cela nous donne : Nous arrivons ensuite dans l'essentielle du code, la boucle While, ici nous lisons chaque image une par une, si l'image n'est pas lu correctement dans le buffer, alors on quitte la boucle. Cela nous donne :
Ligne 30: Ligne 29:
  
 ==== Flou Gaussien ==== ==== Flou Gaussien ====
-On récupère l'image en cour qu'on transforme en niveau de gris puis on lui applique un flou gaussien pour atténuer le bruit, sans se flou on repérerez par la suite tout les bruits comme étant du mouvement. Appliquer un flou gaussien est donc indispensable pour la suite du programme.+On récupère l'image en cour qu'on transforme en niveau de gris puis on lui applique un flou gaussien pour atténuer le bruit, sans ce flou on repérerait par la suite tout les bruits comme étant du mouvement. Appliquer un flou gaussien est donc indispensable pour la suite du programme.
  
-Cela ce fait grace au code suivant et on obtient l'image ci dessous:+Cela ce fait grâce au code suivant et on obtient l'image ci dessous:
 <code python> <code python>
 gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
Ligne 44: Ligne 43:
 </code> </code>
 ==== Seuillage ==== ==== Seuillage ====
-Après avoir obtenu l'image avec le flou gaussien, on fait la différence absolue entre l'image en cours et l'image précédente, cela nous permet de voir les pixels uniquement en mouvement. Ensuite on fait un seuillage binaire sur cette nouvelle image et tout les pixels qui on un certain niveau de gris sont placé à 255. Ici on choisi 7 pour pouvoir repérer même les petit mouvement. Puis on dilate cette image pour avoir bien tout l'objet si possible en mouvement (des fois c'est un échec...); et à l'aide du code suivant on obtient l'image ci dessous:+Après avoir obtenu l'image avec le flou gaussien, on fait la différence absolue entre l'image en cours et l'image précédente, cela nous permets de voir les pixels uniquement en mouvement. Ensuite on fait un seuillage binaire sur cette nouvelle image et tout les pixels qui on un certain niveau de gris sont placés à 255. Ici on choisi 7 pour pouvoir repérer même les petits mouvements. Puis on dilate cette image pour avoir bien tout l'objet si possible en mouvement (des fois c'est un échec...); et à l'aide du code suivant on obtient l'image ci dessous:
 <code python> <code python>
 frameDelta = cv2.absdiff(prevFrame,gray) frameDelta = cv2.absdiff(prevFrame,gray)
Ligne 54: Ligne 53:
  
 ==== Contours et Masque ==== ==== Contours et Masque ====
-Une fois que tout cela est fait, on cherche les contours des objets de l'image dilaté et on créé un masque qui va nous servir encadrer l'objet de la couleur de celui ci:+Une fois que tout cela est fait, on cherche les contours des objets de l'image dilaté et on crée un masque qui va nous servir à encadrer l'objet de la couleur de celui ci:
 <code python> <code python>
 (img,contr,hrchy) = cv2.findContours(thresh.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) (img,contr,hrchy) = cv2.findContours(thresh.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
 mask = np.zeros(frame.shape[:2],np.uint8) mask = np.zeros(frame.shape[:2],np.uint8)
 </code> </code>
-Pour chaque contours trouver:+Pour chaque contours trouvés:
  
--Si c'est un contours trop petit (valeur fixé) on l'ignore.+-Si c'est un contours trop petit (valeur fixé)on l'ignore.
  
--Sinon on crée on rectangle a partir à partir de ce contour, et un masque de la taille du rectangle qui va nous permettre d'obtenir la couleur de l'objet. Pour avoir la couleur de l'objet, on récupere la couleur du pixel du milieu du rectangle, on supose qu'on est dans le cas ou l'objet a une couleur uniforme.+-Sinonon crée on rectangle à partir de ce contour, et un masque de la taille du rectangle qui va nous permettre d'obtenir la couleur de l'objet. Pour avoir la couleur de l'objet, on récupère la couleur du pixel du milieu du rectangle, on suppose qu'on est dans le cas ou l'objet a une couleur uniforme.
  
-Le rectangle prend ensuite la couleur de l'objet et les nuance de bleu,vert,rouge sont affiché sur le cotté du rectangle. Tout cela se fait avec le code suivant:+Le rectangle prend ensuite la couleur de l'objet et les nuances de bleu,vert,rouge sont affichés sur le coté du rectangle. Tout cela se fait avec le code suivant:
 <code python> <code python>
     for c in contr:     for c in contr:
diy/projets/motiondetection.1527171729.txt.gz · Dernière modification : 2018/05/24 14:22 de ecausse