Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

problem in displaying video stream window in face detection python

hey i just want some help this is my code but i do not know how to display the video using imshow or anyother method. it was working fine but as soon as i put all the code into processes it is running in chunks and secondly i am not able to display video. can someone please help me ? i do not know what i am doing wrong.

import cv2 import os, numpy import sys import time import multiprocessing as mp from multiprocessing import Process, Queue

CASCADE_FILE = 'haarcascade_frontalface_default.xml'

fn_dir = 'att_faces' fn_name = sys.argv[1] path = os.path.join(fn_dir, fn_name) if not os.path.isdir(path): os.mkdir(path) face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

capture = cv2.VideoCapture(0)

def setup_camera(q):

capture = cv2.VideoCapture(0)
    ret, frame = capture.read()
frame = cv2.flip(frame, 1)
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
q.put( frame)
return frame

def faceDetect(frame):

print "frame" , frame
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 2)
print "FACE LENGTH"
print len(faces)

if( len(faces)>0):

    for (x,y,w,h) in faces:
        cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)
        cv2.putText(frame, 'unknown', (x - 10, y - 10), cv2.FONT_HERSHEY_PLAIN,
               1,(0, 255, 0))

        roi_gray = gray[y:y+h, x:x+w]
        roi_color = frame[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)

    pin=sorted([int(n[:n.find('.')]) for n in os.listdir(path)
           if n[0]!='.' ]+[0])[-1] + 1
    cv2.imwrite('%s/%s.png' % (path, pin), roi_gray)



else:
    print"not found"

if __name__ == '__main__':

while True:




    #capture = cv2.VideoCapture(0)
    print "7 queue"
    q = mp.Queue()


    p1 = Process(target=setup_camera, args=(q,))
        p1.start()
    print "process 1 started"

    fr=q.get()
    print "got frame from queue"
    p1.join()

    print "process 2"
        p2 = Process(target=faceDetect, args=(fr,))
        p2.start()
    print "process 2 started"
    cv2.imshow('img',fr)

cv2.imshow('img',fr)

cv2.waitKey(0)

capture.release()

cv2.destroyAllWindows()

When everything is done, release the capture

capture.release() Scv2.destroyAllWindows()

click to hide/show revision 2
No.2 Revision

updated 2016-10-03 02:32:46 -0600

berak gravatar image

problem in displaying video stream window in face detection python

hey i just want some help this is my code but i do not know how to display the video using imshow or anyother method. it was working fine but as soon as i put all the code into processes it is running in chunks and secondly i am not able to display video. can someone please help me ? i do not know what i am doing wrong.

import cv2
import os, numpy
import sys
import time
import multiprocessing as mp
from multiprocessing import Process, Queue

CASCADE_FILE = 'haarcascade_frontalface_default.xml'

Queue #CASCADE_FILE = 'haarcascade_frontalface_default.xml' fn_dir = 'att_faces' fn_name = sys.argv[1] path = os.path.join(fn_dir, fn_name) if not os.path.isdir(path): os.mkdir(path) face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

cv2.CascadeClassifier('haarcascade_eye.xml') #capture = cv2.VideoCapture(0) def setup_camera(q): capture = cv2.VideoCapture(0)

def setup_camera(q):

capture = cv2.VideoCapture(0)
  ret, frame = capture.read()
 frame = cv2.flip(frame, 1)
 frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
 q.put( frame)
 return frame

def faceDetect(frame):

faceDetect(frame):
print "frame" , frame
 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
 faces = face_cascade.detectMultiScale(gray, 1.3, 2)
 print "FACE LENGTH"
 print len(faces)
 if( len(faces)>0):
  for (x,y,w,h) in faces:
 cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)
  cv2.putText(frame, 'unknown', (x - 10, y - 10), cv2.FONT_HERSHEY_PLAIN,
 1,(0, 255, 0))
 roi_gray = gray[y:y+h, x:x+w]
 roi_color = frame[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)
  pin=sorted([int(n[:n.find('.')]) for n in os.listdir(path)
 if n[0]!='.' ]+[0])[-1] + 1
 cv2.imwrite('%s/%s.png' % (path, pin), roi_gray)
 else:
  print"not found"

if __name__ == '__main__':

'__main__':
while True:
 #capture = cv2.VideoCapture(0)
  print "7 queue"
 q = mp.Queue()
  p1 = Process(target=setup_camera, args=(q,))
 p1.start()
  print "process 1 started"
 fr=q.get()
  print "got frame from queue"
 p1.join()
  print "process 2"
 p2 = Process(target=faceDetect, args=(fr,))
 p2.start()
  print "process 2 started"
 cv2.imshow('img',fr)

cv2.imshow('img',fr)

cv2.waitKey(0)

capture.release()

cv2.destroyAllWindows()

#cv2.imshow('img',fr) cv2.waitKey(0) #capture.release() #cv2.destroyAllWindows() # When everything is done, release the capture

capture capture.release() Scv2.destroyAllWindows()

cv2.destroyAllWindows()