Permalink
Browse files

Use recursinve frame reading (instead of time interval) from video fe…

…ed to try and hit max frames per second.
  • Loading branch information...
1 parent 77a6d19 commit 1c96622c6728fb373d0a7b272ea4318f666f4fa5 Edgar O Silva committed Jan 10, 2014
Showing with 56 additions and 0 deletions.
  1. +56 −0 examples/coffeescript/camera-face-detect-max-frames.coffee
@@ -0,0 +1,56 @@
+cv = require 'opencv'
+
+# First we create a new VideoCapture object to get
+# video from the camera (0 for default camera)
+camera = new cv.VideoCapture(1)
+
+# we create a window to display the Video frames
+namedWindow = new cv.NamedWindow('Video', 0)
+color = [255,0,0]
+
+frameRead = () ->
+ # camera.read allows us to retrieve the current
+ # frame to be displayed in the video window.
+ camera.read((err, im) ->
+ # We can check for errors and even break the
+ # program execution if an error is detected here.
+ console.log "The err ==>#{ err }" if err
+
+ # There is no need to display the image width or Height
+ # but I leave this here in case anyone needs to check them.
+ #console.log("Width: #{im.width()}")
+ #console.log("height: #{im.height()}")
+
+ # Before working with the frame we need to check the image
+ # is already available and has a width and height greater than 0,
+ # otherwise it will fail when trying to do namedWindow.show()
+ # and the image has width or height equal or less than 0.
+ if im.width() > 0 and im.height() > 0
+ #console.log("Interval ID => #{ intervalId }")
+ #console.log(intervalId)
+ clearInterval(intervalId) if intervalId?
+ im.detectObject('./haarcascades/haarcascade_frontalface_alt.xml', {}, (err, faces) ->
+ for face in faces
+ im.rectangle([face.x, face.y], [face.x + face.width, face.y + face.height], [0,255,0], 2)
+
+ # We use the previously created namedWindow to display the
+ # video frame to wich we applied the blur and filter.
+ namedWindow.show(im)
+
+ # Finally we get the key pressed on the window to terminate
+ # execution of the program.
+ res = namedWindow.blockingWaitKey(0, 20)
+
+ # In this case we terminate the program if any key is pressed.
+ #if res >= 0 then do not set a new timeout to get a new frame.
+ setTimeout(frameRead, 5) if res < 0
+ )
+
+ )
+
+# We set an interval to retrieve frames from the
+# video source and we get the intervalId so we can
+# stop the program by pressing any key on the video feed window.
+intervalId = setInterval(() ->
+ frameRead(intervalId)
+, 100)

0 comments on commit 1c96622

Please sign in to comment.