Outils pour utilisateurs

Outils du site


diy:projets:cinematography_panning_and_tracking_actor

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:cinematography_panning_and_tracking_actor [2018/05/24 15:23] gbouyjoudiy:projets:cinematography_panning_and_tracking_actor [2018/06/01 15:25] (Version actuelle) – [Petit cours d'optique (rappel géometrie)] gbouyjou
Ligne 69: Ligne 69:
  
  
 +
 +----
 ===== Detection de ma personne ===== ===== Detection de ma personne =====
  
 +On aurrait pu utiliser la detection de mouvement décrit dans ce [[https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_video/py_bg_subtraction/py_bg_subtraction.html#background-subtraction|tuto]] en éliminant au préalable l'arrière plan,  mais ceci n'est possible qu'avec un plan fixe, or
 +ce n'est pas le cas içi.
 +Mais on utilisera ceçi dans un prochain tuto, ... :-X
 +
 +Le choix à été fait sur l'utilisation d'une reconnaissance de visage. voir ce [[https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_objdetect/py_face_detection/py_face_detection.html#face-detection|lien]] pour plus d'info.
 +
 +En effet ca s'approche de ce que Yolo peut faire en temp réel, c'est du deep learning, on peut entrainer
 +l'algorithme à reconnaitre ce qu'on veut spécifiquement.
 +Voir ce [[https://docs.opencv.org/2.4/doc/user_guide/ug_traincascade.html|lien]] pour plus d'info.
 +
 +On aurra pour faire ce tuto pas besoin d'entrainer l'algorithme car des fichiers existe déja pour reconnaître
 +diverses partie du corps humain.
 +
 +Vous avez tous les fichiers dans le repertoire /usr/local/share/OpenCV/haarcascades/
 +
 +Nous nous concentrerons sur le fichier haarcascade_frontalface_default.xml
 +pour suivre les visages.
 +
 +Utilisons tous ceci pour voir ce que ça donne sur une image de foule prise sur google image.
 +
 +Import basique opencv
 +<code python>
 +import numpy as np
 +import cv2
 +</code>
 +
 +
 +Chargement de la video et de cascade
 +<code python>
 +
 +face_cascade = cv2.CascadeClassifier('haarcascades/haarcascade_frontalface_default.xml')
 +# face_cascade = cv2.CascadeClassifier('haarcascades/haarcascade_lowerbody.xml')
 +
 +cap = cv2.VideoCapture(0)
 +width =cap.get(cv2.CAP_PROP_FRAME_WIDTH)
 +height =cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
 +</code>
 +
 +Pour chaque frame du stream, on detect les visages, on les entoures, et on dessines un point au centre de 
 +chaque rectangle/visage car permettront de centrer la camera sur un visage.
 +On quite en appuyant sur q pour quit
 +<code python>
 +while(1):
 +
 +    ret, img = cap.read()
 +    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
 +
 +    faces = face_cascade.detectMultiScale(gray, 1.3, 5)
 +    print(faces)
 +    continue
 +    for (x, y, w, h) in faces:
 +        cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
 +        middle =[cv2.KeyPoint(x +w /2, y +h /2, 1)]
 +        img =cv2.drawKeypoints(img, middle, img)
 +        # roi_gray = gray[y:y+h, x:x+w]
 +        # roi_color = img[y:y+h, x:x+w]
 +        # eyes = eye_cascade.detectMultiScale(roi_gray)
 +        # for (ex,ey,ew,eh) in eyes:
 +        #     cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
 +    cv2.imshow('img', img)
 +
 +    k = cv2.waitKey(30) & 0xff
 +    if k == 27:
 +        break
 +</code>
 +
 +
 +Pour finir on enregistre la dernière image et on free les fenêtres.
 +<code python>
 +cv2.imwrite("haarDetection.jpg", img)
 +# cv2.waitKey(0)
 +cv2.destroyAllWindows()
 +</code>
 +
 +On regarde ce que ça donne sur une image de foule
 +{{ :diy:projets:haardetection.jpg?direct&600 |}}
 +
 +
 +Le résultat est pas mal, ca suffira, et j'arrive a faire du 10fps en utilisant mon pc et non le raspberry pi, donc on verra par la suite, si jamais le raspberry pi n'est pas asser rapide on pourra faire un programme déporté sur un pc, à voir...
  
  
 +===== Petit cours d'optique (rappel géometrie) =====
  
 +Prenons l'exemple ou je vois avec opencv qu'un visage se trouve à une coordonnée telle que x=50 y=100.
 +Je connais la taille de l'image donc le point milieu.
 +Mais comment je sais de combien de degree j'incline mes deux servos ???
  
 +Pour cela faisons un petit rappel géometrique de collège
  
  
  
  
 +En attente ...
  
  
  
diy/projets/cinematography_panning_and_tracking_actor.1527175390.txt.gz · Dernière modification : 2018/05/24 15:23 de gbouyjou