2016-12-26 5 views
0

Je travaille sur Odroid et la détection de visage en cours d'exécution en utilisant OpenCV python sur elle. Mais il y a trop de décalage dans l'appareil photo. J'ai essayé beaucoup de choses mais je n'ai pas pu supprimer le décalage. S'il vous plaît suggérer comment puis-je supprimer le décalage. Je veux détecter les visages d'au moins 15 pieds pour que j'ai besoin d'images à haute résolution, mais les images à haute résolution causent plus de retard. Actuellement, j'ai 2 secondes de décalage entre les images. S'il y a des suggestions, partagez.En CV ouvert, python comment puis-je supprimer le décalage dans la caméra

import cv2, sys, numpy, os 
import json 
size = 3 
fn_haar = 'haarcascade_frontalface_default.xml' 
fn_haareye = 'haarcascade_eye.xml' 
(im_width, im_height) = (112, 92) 
haar_cascade = cv2.CascadeClassifier(fn_haar) 
eye_cascade = cv2.CascadeClassifier(fn_haareye) 
webcam = cv2.VideoCapture(0) 
while True: 
    (rval, frame) = webcam.read() 
    frame=cv2.flip(frame,1,0) 
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 
    mini = cv2.resize(gray, (gray.shape[1]/size, gray.shape[0]/size)) 
    faces = haar_cascade.detectMultiScale(mini,scaleFactor=1.05, minNeighbors=3, minSize=(20, 20), flags = cv2.cv.CV_HAAR_SCALE_IMAGE) 
    for i in range(len(faces)): 
     face_i = faces[i] 
     (x, y, w, h) = [v * size for v in face_i] 
     face = gray[y:y + h, x:x + w] 
     face_resize = cv2.resize(face, (im_width, im_height)) 
     eyes = eye_cascade.detectMultiScale(face) 
     for (ex,ey,ew,eh) in eyes: 
      cv2.rectangle(face_resize ,(ex,ey),(ex+ew,ey+eh),(0,255,0),2) 
    cv2.imshow('OpenCV', frame) 
    key = cv2.waitKey(10) 
    if key == 27: 
     break 
+0

augmente le facteur d'échelle dans la fonction detectMultiScale. Si vous avez l'option alors essayez de choisir ROI afin de minimiser la région dans laquelle vous devez faire la détection de visage –

+0

@ Optimus1072 si j'augmente le facteur d'échelle sera-t-il capable de détecter les visages de 15 pieds? –

+0

avec scaleFactor = 1.2 et résolution d'image de 360 ​​* 288, je suis capable de et sur ma machine (I5) il prend 15ms par trame. –

Répondre

0

Vous pouvez essayer des choses suivantes (ces zones en fonction de mon expérience)
1. La diminution de la résolution de l'image ou en sélectionnant le roi de l'image.
2. Augmentation du facteur detectMultiscale. Vous devrez l'accorder parce que l'augmenter aura un effet négatif sur sa précision.
3. Paramètre nlevels paramètre de HOG, Par défaut, il est mis à 64 dans mon cas le réduire à 8 n'a presque aucun effet sur la précision, mais l'amélioration de la vitesse de 25-30%.

+0

J'ai besoin de détecter les visages en temps réel, c'est pourquoi je suis en train d'effectuer une détection à chaque 3e trame. en diminuant la résolution de la caméra je ne peux pas détecter de plus grande distance dont j'ai besoin. Deuxièmement, je n'utilise pas de porc que j'utilise des cascades de haar ... Y at-il quelque chose que je ne comprends pas ... Je suis réellement nouveau à ouvrir cv si plese aide si je n'ai pas obtenu quelque chose de correct. –