Package pyvision :: Package beta :: Module videotasks
[hide private]
[frames] | no frames]

Source Code for Module pyvision.beta.videotasks

  1  ''' 
  2  Created on Jan 13, 2012 
  3   
  4  @author: bolme 
  5  ''' 
  6  import pyvision as pv 
  7  from pyvision.face.CascadeDetector import CascadeDetector 
  8  import vtm 
  9  import numpy as np 
 10   
11 -class ChangeDetectionVT(vtm.VideoTask):
12
13 - def __init__(self,frame_id):
14 ''' 15 This is a change detection task that computes the difference between the current and previous frames. 16 ''' 17 # request the current and previous frames. 18 vtm.VideoTask.__init__(self, frame_id, args=[("FRAME",frame_id),("FRAME",frame_id-1)])
19
20 - def execute(self, curr, prev):
21 ''' 22 Perform change detection between two frames. 23 ''' 24 # Get the frames as matrices 25 curr = curr.asMatrix2D() 26 prev = prev.asMatrix2D() 27 28 # Compute changes 29 diff = np.abs(curr - prev) 30 mask = diff > 20.0 31 32 # Create a new mask data item. 33 return [("CHANGE_MASK",self.getFrameId(),mask)]
34 35
36 -class ChangeDetectionAnnotationVT(vtm.VideoTask):
37
38 - def __init__(self,frame_id):
39 ''' 40 Register for the current and previous frames. 41 ''' 42 vtm.VideoTask.__init__(self, frame_id, args=[("FRAME",frame_id),("CHANGE_MASK",frame_id)])
43
44 - def execute(self, frame, mask):
45 ''' 46 Perform change detection between two frames. 47 ''' 48 # Annotate the frame with the mask. 49 frame.annotateMask(mask,color='red') 50 51 # Return an empty list because no new items were created. 52 return []
53
54 -class FaceDetectorVT(vtm.VideoTask):
55 ''' 56 This tasks illustrates one way to initialize data in the first frame by 57 changing the number of required arguments required by additional frames. 58 '''
59 - def __init__(self,frame_id):
60 if frame_id == 0: 61 # The first frame only requires the frame 62 vtm.VideoTask.__init__(self,frame_id,args=[("FRAME",frame_id)]) 63 else: 64 # Each additional frame requires an initialized detector. 65 # The underscore in _FACE_DETECTOR indicates this is not shared 66 # data. 67 vtm.VideoTask.__init__(self,frame_id,args=[("FRAME",frame_id),("_FACE_DETECTOR",frame_id-1)])
68
69 - def execute(self,frame,detector=None):
70 if detector == None: 71 print "Initializing Face Detector." 72 detector = CascadeDetector(min_size=(128,128)) 73 74 faces = detector(frame) 75 for rect in faces: 76 frame.annotateRect(rect) 77 78 return [('FACES',self.getFrameId(),faces),("_FACE_DETECTOR",self.getFrameId(),detector)]
79 80
81 -def runChangeDetectionExample():
82 video = pv.Video(pv.BUGS_VIDEO) 83 84 vtm = vtm.VideoTaskManager(buffer_size=2,debug_level=2) 85 vtm.addTaskFactory(ChangeDetectionVT) 86 vtm.addTaskFactory(ChangeDetectionAnnotationVT) 87 88 for frame in video: 89 vtm.addFrame(frame)
90
91 -def runFaceDetectionExample():
92 video = pv.Webcam() 93 94 vtm = vtm.VideoTaskManager(buffer_size=2,debug_level=3) 95 vtm.addTaskFactory(FaceDetectorVT) 96 97 for frame in video: 98 vtm.addFrame(frame)
99 100 if __name__ == '__main__': 101 #runChangeDetectionExample() 102 runFaceDetectionExample() 103