Contexte
- Nous étudierons dans le but de reconnaître des modèles arbitraires dans les vidéos.
- Pour la reconnaissance faciale des images majeures, il existe DeepFace développé par Facebook et l'API de reconnaissance faciale basée sur le cloud (!) Https://www.skybiometry.com/ fournie par Sky Biometry. , Cet article s'adresse à ceux qui souhaitent bouger davantage et comprendre la technologie.
Matériel d'apprentissage
- OpenCV: CV signifie Computer Vision. Une bibliothèque de reconnaissance d'images lancée par Gary Bradsky qui était alors inscrit à Intel. Il semble que vous puissiez utiliser plus de centaines d'algorithmes de traitement d'image __. On dit que la série OpenCV 2.x est construite sur C ++.
- Python 2.7: Parce que c'était sur mon Mac. De plus, c'était un langage avec beaucoup de documentation OpenCV, et cela me semblait facile (je fais Ruby).
- ffmpeg: Il effectuera l'encodage requis pour OpenCV pour traiter la vidéo. Il n'est pas indispensable de toucher OpenCV.
Comment procéder à l'apprentissage
- Pincez et mangez ce qui est écrit sur http://docs.opencv.org/trunk/doc/py_tutorials/py_tutorials.html.
Comment installer OpenCV (2014/5) * Mac OS X, Mountain Lion *
- Fondamentalement, avec Homebrew.
- Effacez l'avertissement qui apparaît avec le médecin de l'infusion
- brew tap homebrew/science
- brew install opencv --with-ffmpeg
- export PYTHONPATH=/usr/local/lib/python2.7/site-packages:$PYTHONPATH
- Succès si l'importation du cv passe dans la console python
http://www.jeffreythompson.org/blog/2013/08/22/update-installing-opencv-on-mac-mountain-lion/ Référence
Lecture vidéo
- Dans l'exemple ci-dessous, chaque image est lue tout en étant convertie en échelle de gris.
import numpy as np
import cv2
cap = cv2.VideoCapture('Chemin complet vers la vidéo')
while(cap.isOpened()):
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
- __ Dans mon environnement, j'étais en colère que ce ne soit pas une passe complète __
http://docs.opencv.org/trunk/doc/py_tutorials/py_gui/py_video_display/py_video_display.html#display-video
Suivi d'objets en vidéo
Algorithme MeanShift
- Donnez les coordonnées initiales de la zone que vous souhaitez suivre dans l'image
- Pensez à la zone comme un ensemble de points de caractérisation (le traitement de l'image est donc important)
- Pensez à n'importe quel cadre
- Calculez le centre de la zone actuelle
- Calculer le centre de gravité de l'ensemble des points caractéristiques à compter dans la zone actuelle
- Si le centre de la zone et le centre de gravité du point caractéristique ne correspondent pas, déplacez la zone de sorte que le centre de gravité et le centre correspondent.
- Répétez ceci et pensez à la position de l'objet qui peut réellement placer la position où le centre de gravité et le centre correspondent (avec une erreur suffisamment petite) dans l'image actuelle.
Code source actuel
import numpy as np
import cv2
cap = cv2.VideoCapture('Chemin complet vers la vidéo')
ret,frame = cap.read()
r,h,c,w = 150,90,650,125
track_window = (c,r,w,h)
roi = frame[r:r+h, c:c+w]
hsv_roi = cv2.cvtColor(roi,cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv_roi, np.array((0.,60.,32.)), np.array((180.,255.,255.)))
roi_hist = cv2.calcHist([hsv_roi],[0],mask,[180],[0,180])
cv2.normalize(roi_hist,roi_hist,0,255,cv2.NORM_MINMAX)
term_crit = ( cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 1 )
while(1):
ret,frame = cap.read()
if ret == True:
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
dst = cv2.calcBackProject([hsv],[0],roi_hist,[0,180],1)
ret,track_window = cv2.meanShift(dst, track_window, term_crit)
x,y,w,h = track_window
img2 = cv2.rectangle(frame,(x,y),(x+w,y+h),255,2)
cv2.imshow('img2',frame)
k = cv2.waitKey(60) & 0xff
if k == 27:
break
else:
cv2.imwrite(chr(k)+".jpg ",img2)
else:
break
cv2.destroyAllWindows()
cap.release()