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 : de ecausse
