2016-04-12 15 views
0

Unten ist mein Code, der das Gesicht über Webcam zu erkennen.Machen Sie ein Bild auf der Skala der Erkennung-Python + OpenCV

import numpy as np 
import cv2 

face_cascade =  cv2.CascadeClassifier('C:\OpenCV2.0\data\haarcascades\haarcascade_frontalface_default.xml') 


img = cv2.VideoCapture(0) 

while(1): 
    _,f=img.read() 
    gray = cv2.cvtColor(f, cv2.COLOR_BGR2GRAY) 
    faces = face_cascade.detectMultiScale(gray, 1.3, 5) 
    for (x,y,w,h) in faces: 
     detect_frame = cv2.rectangle(f,(x,y),(x+w,y+h),(255,0,0),2) 


    cv2.imshow('img',f) 

if cv2.waitKey(25) == 27: 
    break 



cv2.destroyAllWindows() 
img.release() 

Durch diesen Code möchte ich ein Bild machen, sobald es den Maßstab des Rahmens ändert oder die Person bewegt sich. Nachdem Sie das Bild aufgenommen haben, speichert es ein Bild in einer Datei und setzt seine Arbeit fort.

Können Sie mir helfen, den Fall zu lösen? Vielen Dank für deine Begeisterung.

Antwort

0

Dies ist der Code, den ich geschrieben habe, was es tut ist, dass es zuerst die Mitte des Rechtecks ​​findet, das wir durch Gesichtserkennung bekommen haben. Dann wird der Wert der Mittelkoordinate nach einem bestimmten Zeitintervall wie 2s verglichen. Wenn sich der Wert des Pixels über einen bestimmten Schwellenwert geändert hat, wird angezeigt, dass die Bewegung erkannt wurde. Der Code hat gut funktioniert. Um die Genauigkeit zu verbessern, können Sie mehr Punkte in der Bedingung hinzufügen, deren Wertänderung auf Bewegung hinweist.

import numpy as np 
import cv2 

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') 

cap = cv2.VideoCapture(0) 
i=1000 
c=10 

while 1: 
    _, img = cap.read() 
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
    faces = face_cascade.detectMultiScale(gray, 1.3, 5) 
    #we will increment the value of i after every loop so that we could check value of coordinate after a certain time 
    i=i+1 

    for (x,y,w,h) in faces: 
     cv2.rectangle(img,(x,y),(x+w,y+h),(255,150,10),2) 
     roi_gray = gray[y:y+h, x:x+w] 
     roi_color = img[y:y+h, x:x+w] 

     #finding the center of the rectangle(around face) 
     a=y+h/2 
     b=x+w/2 

     d = x + w/2 
     if i % 5 == 0: 
      print (abs(a - c)) 
      if (abs(a-c))>9:   #change this value to calibrate 
       print("Movement Detected") 
      c = y + h/2 

    cv2.imshow('img',img) 
    k = cv2.waitKey(30) & 0xff 

    if k == 27: 
     break 

cap.release() 
cv2.destroyAllWindows() 

Wir benötigten Wert zu aktualisieren nach einiger Zeit, für die ich verwendet habe, zu vergleichen, wenn i% 5 == 0, wo ich nach jeder Schleife erhöht wird

+0

Zunächst einmal möchte ich Ihre Antwort danken und dein Code. Ich werde versuchen, ein Bild zu entwickeln, sobald die Bewegung erkannt wurde. –

+0

he ersetzen if (abs (ac))> 9: mit wenn ((abs (ac)) + abs (bd))> 18: drucken ("Bewegung erkannt") c = y + h/2 d = x + w/2 (deklariere d nachdem die Bewegung erkannt wurde und initialisiere d auf einen Wert, wie wir es initialisiert haben c) es wird den Unterschied ausmachen, dass es nun Änderungen sowohl in x als auch in y erkennt. Lassen Sie mich wissen, wenn Sie ein Problem bei der Ausführung des Codes haben – Arjun

+0

Hallo, vielen Dank für Ihre Antwort. –