Hintergrund
- Wir werden mit dem Ziel studieren, beliebige Muster in Videos zu erkennen.
- Für die Gesichtserkennung wichtiger Bilder gibt es DeepFace, das von Facebook entwickelt wurde, und die Cloud-basierte Gesichtserkennungs-API (!) Https://www.skybiometry.com/, die von Sky Biometry bereitgestellt wird. Dieser Artikel richtet sich an diejenigen, die sich mehr bewegen und die Technologie verstehen möchten.
Lernmaterial
- OpenCV: CV steht für Computer Vision. Eine Bilderkennungsbibliothek, die von Gary Bradsky gestartet wurde, der zu diesem Zeitpunkt bei Intel eingeschrieben war. Es scheint, dass Sie mehr als Hunderte von Bildverarbeitungsalgorithmen verwenden können __. Die OpenCV 2.x-Serie soll auf C ++ aufbauen.
- __Python 2.7 __: Weil es auf meinem Mac war. Außerdem war es eine Sprache mit vielen OpenCV-Dokumentationen, und es schien mir einfach zu sein (ich mache Ruby).
- ffmpeg: Es führt die Codierung durch, die OpenCV zur Verarbeitung des Videos benötigt. Es ist nicht unbedingt erforderlich, OpenCV zu berühren.
Wie man mit dem Lernen fortfährt
- Kneifen und essen Sie, was unter http://docs.opencv.org/trunk/doc/py_tutorials/py_tutorials.html geschrieben steht.
So installieren Sie OpenCV (2014/5) * Mac OS X, Mountain Lion *
- Grundsätzlich mit Homebrew.
- Löschen Sie die Warnung, die beim Brauarzt angezeigt wird
- brew tap homebrew/science
- brew install opencv --with-ffmpeg
- export PYTHONPATH=/usr/local/lib/python2.7/site-packages:$PYTHONPATH
- Erfolg, wenn der Import-Lebenslauf in der Python-Konsole bestanden wird
http://www.jeffreythompson.org/blog/2013/08/22/update-installing-opencv-on-mac-mountain-lion/ Referenz
Video-Wiedergabe
- Im folgenden Beispiel wird jedes Bild abgespielt, während es in Graustufen konvertiert wird.
import numpy as np
import cv2
cap = cv2.VideoCapture('Vollständiger Pfad zum Video')
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()
- __ In meiner Umgebung war ich wütend, dass es kein vollständiger Pass war __
http://docs.opencv.org/trunk/doc/py_tutorials/py_gui/py_video_display/py_video_display.html#display-video
Objektverfolgung im Video
MeanShift-Algorithmus
- Geben Sie die Anfangskoordinaten des Bereichs an, den Sie im Bild verfolgen möchten
- Stellen Sie sich den Bereich als eine Reihe von Charakterisierungspunkten vor (daher ist die Bildverarbeitung wichtig).
- Denken Sie an einen Rahmen
- Berechnen Sie die Mitte des aktuellen Bereichs
- Berechnen Sie den Schwerpunkt der Feature-Punkte, die im aktuellen Bereich gezählt werden sollen
- Wenn der Schwerpunkt des Bereichs und der Schwerpunkt des Merkmalspunkts nicht übereinstimmen, verschieben Sie den Bereich so, dass der Schwerpunkt und der Mittelpunkt übereinstimmen.
- Wiederholen Sie diesen Vorgang und überlegen Sie sich die Position des Objekts, an der der Schwerpunkt und der Mittelpunkt (mit ausreichend geringem Fehler) im aktuellen Frame übereinstimmen können.
Aktueller Quellcode
import numpy as np
import cv2
cap = cv2.VideoCapture('Vollständiger Pfad zum Video')
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()