diy:projets:motiondetection
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
diy:projets:motiondetection [2018/05/24 08:48] – ecausse | diy: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, | ||
+ | |||
+ | Le programme présenté ici est bien plus basique. Ce dernier capture la vidéo et encadre les objets en mouvement. | ||
Note: Ce code a été lancé sous python 2.7.6 avec openCV 2.4 | Note: Ce code a été lancé sous python 2.7.6 avec openCV 2.4 | ||
Ligne 8: | Ligne 11: | ||
L' | L' | ||
+ | |||
+ | On a donc le début de code suivant: | ||
+ | <code python> | ||
+ | capture = cv2.VideoCapture(0) | ||
+ | prevFrame = None | ||
+ | </ | ||
+ | Dans un premier temps, on capture la vidéo du device. Puis on crée une variable // | ||
+ | |||
+ | Nous arrivons ensuite dans l' | ||
+ | <code python> | ||
+ | while True: | ||
+ | (grabbed, | ||
+ | if not grabbed: | ||
+ | break | ||
+ | </ | ||
+ | |||
==== Flou Gaussien ==== | ==== Flou Gaussien ==== | ||
+ | On récupère l' | ||
+ | |||
+ | Cela ce fait grâce au code suivant et on obtient l' | ||
+ | <code python> | ||
+ | gray = cv2.cvtColor(frame, | ||
+ | gray = cv2.GaussianBlur(gray, | ||
+ | </ | ||
+ | {{ : | ||
+ | Enfin, si cette image est la première, alors la variable // | ||
+ | <code python> | ||
+ | if prevFrame is None: | ||
+ | prevFrame = gray | ||
+ | </ | ||
==== Seuillage ==== | ==== Seuillage ==== | ||
+ | Après avoir obtenu l' | ||
+ | <code python> | ||
+ | frameDelta = cv2.absdiff(prevFrame, | ||
+ | thresh = cv2.threshold(frameDelta, | ||
+ | kernel = np.ones((11, | ||
+ | thresh = cv2.dilate(thresh, | ||
+ | </ | ||
+ | {{ : | ||
+ | |||
==== Contours et Masque ==== | ==== Contours et Masque ==== | ||
+ | Une fois que tout cela est fait, on cherche les contours des objets de l' | ||
+ | <code python> | ||
+ | (img, | ||
+ | mask = np.zeros(frame.shape[: | ||
+ | </ | ||
+ | Pour chaque contours trouvés: | ||
+ | |||
+ | -Si c'est un contours trop petit (valeur fixé), on l' | ||
+ | |||
+ | -Sinon, on crée on rectangle à partir de ce contour, et un masque de la taille du rectangle qui va nous permettre d' | ||
+ | |||
+ | Le rectangle prend ensuite la couleur de l' | ||
+ | <code python> | ||
+ | for c in contr: | ||
+ | if cv2.contourArea(c) < 1500: | ||
+ | continue | ||
+ | |||
+ | (x,y,w,h) = cv2.boundingRect(c) | ||
+ | mask[y:y+h, x:x+w] = 255 | ||
+ | | ||
+ | (bl,gr,re) = frame[y+(h/ | ||
+ | bl = int(bl) | ||
+ | gr = int(gr) | ||
+ | re = int(re) | ||
+ | couleur =' | ||
+ | |||
+ | font = cv2.FONT_HERSHEY_SIMPLEX | ||
+ | cv2.putText(frame, | ||
+ | cv2.rectangle(frame, | ||
+ | | ||
+ | masked_img = cv2.bitwise_and(frame, | ||
+ | |||
+ | cv2.imshow(' | ||
+ | </ | ||
+ | |||
+ | **Resultat final:** | ||
+ | {{ : | ||
diy/projets/motiondetection.1527151684.txt.gz · Dernière modification : 2018/05/24 08:48 de ecausse