class Cameo(object): def __init__(self): self._windowManager = WindowManager('Cameo', self.onKeypress) self._captureManager = CaptureManager( cv2.VideoCapture(0), self._windowManager, True) def run(self): """Run the main loop.""" self._windowManager.createWindow() while self._windowManager.isWindowCreated: self._captureManager.enterFrame() frame = self._captureManager.frame if frame is not None: # TODO: Filter the frame (Chapter 3). pass self._captureManager.exitFrame() self._windowManager.processEvents() def onKeypress(self, keycode): """Handle a keypress. space -> Take a screenshot. tab -> Start/stop recording a screencast. escape -> Quit. """ print "keycode=", keycode 2 if keycode == 32: # space self._captureManager.writeImage('screenshot.png')
class Cameo(object): def __init__(self, filepath): self._windowManager = WindowManager('Cameo', self.onKeypress) video_capture = cv2.VideoCapture(filepath) print(video_capture.get(cv2.CAP_PROP_FRAME_HEIGHT)) print(video_capture.get(cv2.CAP_PROP_FRAME_WIDTH)) video_capture.set(cv2.CAP_PROP_FRAME_WIDTH, 640 * 4) video_capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 240 * 4) print(video_capture.get(cv2.CAP_PROP_FRAME_HEIGHT)) print(video_capture.get(cv2.CAP_PROP_FRAME_WIDTH)) self._captureManager = CaptureManage(video_capture, self._windowManager, True) def run(self): self._windowManager.createWindow() while self._windowManager.isWindowCreated: self._captureManager.enterFrame() frame = self._captureManager.frame # write your code here self._captureManager.exitFrame() self._windowManager.processEvents() def onKeypress(self, keycode): if keycode == ord(' '): self._captureManager.writeImage('screenshot.png') elif keycode == ord('r'): if not self._captureManager.isWritingVideo: self._captureManager.startWritingVideo('screencast.avi') else: self._captureManager.stopWritingVideo() elif keycode == 27: #escape self._windowManager.destoryWindow()
class Cameo(object): def __init__(self): self._windowManager = WindowManager('Cameo',self.onKeypress) self._captureManager = CaptureManager(cv2.VideoCapture(0),self._windowManager,True) def run(self): """run the main loop""" self._windowManager.createWindow() while self._windowManager.isWindowCreated: self._captureManager.enterFrame() frame = self._captureManager.frame #TODO:Filter the frame (Chapter 3). self._captureManager.exitFrame() self._windowManager.processEvents() def onKeypress(self,keycode): """Handle a keypress . space -> Take a screenshot tab ->Start/stop recording a screencast escape -> Quit. """ if keycode == 32: self._captureManager.writeImage('screenshot.png') elif keycode == 9: if not self._captureManager.isWritingVideo: self._captureManager.startWritingVideo('screescast.avi') else: self._captureManager.stopWritingVideo() elif keycode == 27: self._windowManager.destroyWindow()
class Cameo(object): def __init__(self): self._windowManager = WindowManager('Cameo', self.onKeypress) self._captureManager = CaptureManager( cv2.VideoCapture(0), self._windowManager, True) def run(self): """Run the main loop.""" self._windowManager.createWindow() while self._windowManager.isWindowCreated: self._captureManager.enterFrame() frame = self._captureManager.frame # TODO: Filter the frame (Chapter 3). self._captureManager.exitFrame() self._windowManager.processEvents() def onKeypress (self, keycode): """Handle a keypress. space -> Take a screenshot. tab -> Start/stop recording a screencast. escape -> Quit. """ if keycode == 32: # space self._captureManager.writeImage('screenshot.png') elif keycode == 9: # tab if not self._captureManager.isWritingVideo: self._captureManager.startWritingVideo('screencast.avi') else: self._captureManager.stopWritingVideo() elif keycode == 27: # escape self._windowManager.destroyWindow()
class Cameo(object): def __init__(self): self._windowManager = WindowManager('Cameo', self.onKeypress) self._captureManager = CaptureManager(cv2.VideoCapture(0), self._windowManager, True) self._curveFilter = filters.BGRPortraCurveFilter() def run(self): self._windowManager.createWindow() while self._windowManager.isWindowCreated: self._captureManager.enterFrame() frame = self._captureManager.frame filters.strokeEdges(frame, frame) self._curveFilter.apply(frame, frame) self._captureManager.exitFrame() self._windowManager.processEvents() def onKeypress(self, keycode): """ Handle a keypress. :param keycode: Space -> Take a screenshot. Tab ->Start/stop recording a screenshot. Escape ->Quit. """ if keycode == 32: self._captureManager.writeImage('screenshot.png') elif keycode == 9: if not self._captureManager.isWritingVideo: self._captureManager.startWritingVideo("screencast.avi") else: self._captureManager.stopWritingVideo() elif keycode == 27: self._windowManager.destroyWindow()
class Cameo(object): def __init__(self): self._windowManager = WindowManager('Cameo', self.onKeypress) self._captureManager = CaptureManager(cv2.VideoCapture(0), self._windowManager, True) # self._curveFilter = filters.EmbossFilter() def run(self): self._windowManager.createWindow() while self._windowManager.isWindowCreated: self._captureManager.enterFrame() frame = self._captureManager.frame filters.strokeEdge(frame, frame) # self._curveFilter.apply(frame, frame) self._captureManager.exitFrame() self._windowManager.processEvents() def onKeypress(self, keycode): if keycode == 32: #space self._captureManager.writeImage('screenshot.png') elif keycode == 9: #tab if not self._captureManager.isWritingVideo: self._captureManager.startWritingVideo('screencast.avi') else: self._captureManager.stopWritingVideo() if keycode ==27:#esc self._windowManager.destroyWindow()
class CameoDepth(Cameo): def __init__(self): self._windowManager = WindowManager('Cameo', self.onKeypress) self._captureManager = CaptureManager( cv2.VideoCapture(0), self._windowManager, True) self._faceTracker = FaceTracker() self._shouldDrawDebugRects = False self._curveFilter = filters.BGRPortraCurveFilter() def run(self): """Run the main loop.""" self._windowManager.createWindow() while self._windowManager.isWindowCreated: self._captureManager.enterFrame() frame = self._captureManager.frame self._faceTracker.update(frame) faces = self._faceTracker.faces rects.swapRects(frame, frame, [face.faceRect for face in faces]) filters.strokeEdges(frame, frame) self._curveFilter.apply(frame, frame) if self._shouldDrawDebugRects: self._faceTracker.drawDebugRects(frame) self._captureManager.exitFrame() self._windowManager.processEvents()
class FaceID(): def __init__(self): self._camera = cv2.VideoCapture(0) self._camera.set(cv2.CAP_PROP_FRAME_WIDTH, 1024) self._camera.set(cv2.CAP_PROP_FRAME_HEIGHT, 768) self._windowManager = WindowManager('Face ID', self.onKeypress) self._captureManager = CaptureManager(self._camera, self._windowManager, True) self._faceDetector = FaceDetector() def run(self): # run the application self._windowManager.createWindow() while self._windowManager.isWindowCreated: self._captureManager.enterFrame() frame = self._captureManager.frame self._faceDetector.update(frame) faces = self._faceDetector.faces for face in faces: x, y, h, w = face.faceRect face_image = frame[y:y + h, x:x + w] cv2.imshow('face', face_image) break self._captureManager.exitFrame() self._windowManager.processEvents() def onKeypress(self, keycode): # handle a keypress if keycode == 27: # escape self._windowManager.destroyWindow() self._camera.release() elif chr(keycode).isalnum(): self._windowManager.appendChar(chr(keycode))
class Cameo(object): def __init__(self): self._windowManager = WindowManager('Cameo', self.onKeypress) self._captureManager = CaptureManager(cv2.VideoCapture(0), self._windowManager, True) self._curveFilter = filters.BlurFilter() def run(self): self._windowManager.createWindow() while self._windowManager.isWindowCreated: self._captureManager.enterFrame() frame = self._captureManager.frame #add additional function here filters.strokeEdges(frame, frame) self._curveFilter.apply(frame, frame) self._captureManager.exitFrame() self._windowManager.processEvents() self._captureManager._capture.release() def onKeypress(self, keycode): if keycode == 32: #space self._captureManager.writeImage('./data/pictures/screenshot.png') elif keycode == 9: #tab if not self._captureManager.isWritingVideo: self._captureManager.startWritingVideo(r'F:/screen_cast.avi') else: self._captureManager.stopWritingVideo() elif keycode == 27: #exit self._windowManager.destroyWindow()
class Cameo(object): def __init__(self): self._windowManager = WindowManager('Cameo', self.onKeypress) self._captureManager = CaptureManager(cv2.VideoCapture(0), self._windowManager, True) self._curveFilter = filters.BGRPortraCurveFilter() def run(self): """Run the main loop""" self._windowManager.createWindow() while self._windowManager.isWindowCreated: self._captureManager.enterFrame() frame = self._captureManager.frame if frame is not None: filters.strokeEdges(frame, frame) self._curveFilter.apply(frame, frame) self._captureManager.exitFrame() self._windowManager.processEvents() def onKeypress(self, keycode): """Handle a keypress space -> take a screenshot. tab -> start/stop recording a screencast escape -> Quit """ if keycode == 32: # space self._captureManager.writeImage('screenshot.png') elif keycode == 9: # tab if not self._captureManager.isWritingVideo: self._captureManager.startWritingVideo('screencast.avi') else: self._captureManager.stopWritingVideo() elif keycode == 27: # escape self._windowManager.destoryWindow()
class Cameo(object): def __init__(self): self._windowManager = WindowManager('Cameo', self.onKeypress) self._captureManager = CaptureManager(cv2.VideoCapture(0), self._windowManager, True) def run(self): """ 执行循环 """ self._windowManager.createWindow() while self._windowManager.isWindowCreated: self._captureManager.enterFrame() frame = self._captureManager.frame # 过滤帧 self._captureManager.exitFrame() self._windowManager.processEvents() def onKeypress(self, keycode): """ 处理键盘输入: 1、空格截屏 2、tab开始停止录像 3、esc退出 """ if keycode == 32: #space self._captureManager.writeImage('screenshot.png') elif keycode == 9: #tab if not self._captureManager.isWritingVideo: self._captureManager.startWritingVideo('screencast.avi') else: self._captureManager.stopWritingVideo() elif keycode == 27: #escape self._windowManager.destroyWindow()
class Cameo: def __init__(self): self._windowManager = WindowManager('Cameo', self.onKeypress) self._captureManager = CaptureManager(cv2.VideoCapture(0), self._windowManager, True) def run(self): self._windowManager.createWindow() while self._windowManager.isWindowCreated: self._captureManager.enterFrame() frame = self._captureManager.frame # todo filter self._captureManager.exitFrame() self._windowManager.processEvents() def onKeypress(self, keycode): """ space -> screenshot tab -> start/stop escape -> quit :param keycode: :return: """ if keycode == 32: #space self._captureManager.writeImage('screenshot.png') elif keycode == 9: #tab if not self._captureManager.isWritingVideo: self._captureManager.startWritingVideo('screencast.avi') else: self._captureManager.stopWritingVideo() elif keycode == 27: #escape self._windowManager.destroyWindow()
class Cameo(object): def __init__(self): self._windowManager = WindowManager('Cameo',self.onKeypress) self._captureManager= CaptureManager(cv.VideoCapture(0),self._windowManager,True) def run(self): #run the loop self._windowManager.createWindow() while (self._windowManager.isWindowCreated()): self._captureManager.enterFrame() frame = self._captureManager.frame self._captureManager.exitFrame() self._windowManager.processEvent() def onKeypress(self,keycode): """ handle a keypress sapce -> Take a screenshot tab -> Start/Stop recording and screencast escape -> Quit """ if (keycode == 32): # sapce self._captureManager.writeImage('screenshot.png') elif(keycode == 9): # tab if(not self._captureManager.isWrittingVideo): self._captureManager.startWrittingVideo('screencast.avi') else: self._captureManager.stopWrittingVideo() elif(keycode == 27): #escape self._windowManager.destroyWindow()
class Cameo(object): def __init__(self): self._windowManager = WindowManager('Cameo', self.onKeypress) self._captureManager = CaptureManager(cv2.VideoCapture(0), self._windowManager, True) self._curveFilter = filters.EmbossFilter() def run(self): self._windowManager.createWindow() while self._windowManager.isWindowCreated: self._captureManager.enterFrame() frame = self._captureManager.frame # filter the frame # frame = cv2.GaussianBlur(frame, (3, 3), 0) # self._captureManager._frame = cv2.Canny(frame, 50, 150) filters.strokeEdges(frame, frame) self._curveFilter.apply(frame, frame) self._captureManager.exitFrame() self._windowManager.processEvent() def onKeypress(self, keycode): if keycode == 32: # space self._captureManager.writeImage('screenshot.png') elif keycode == 9: # tab if not self._captureManager.isWritingVideo: self._captureManager.startWritingVideo('screencast.avi') else: self._captureManager.stopWritingVideo() elif keycode == 27: # escape self._windowManager.destroyWindow()
class Cameo(object): def __init__(self, camera_state, video_file): #0/1为本机摄像头,-1为输入视频文件 self._camera = camera_state self._video_file = video_file self._windowManager = WindowManager('Cameo', self.onKeypress) if (camera_state == -1): self._captureManager = CaptureManager(cv2.VideoCapture(video_file), self._windowManager, True, False, False) else: self._captureManager = CaptureManager( cv2.VideoCapture(self._camera), self._windowManager, True, False, False) def run(self): self._windowManager.createWindow() while self._windowManager.isWindowCreated: self._captureManager.enterFrame() self._captureManager.shouldMirrorPreview = False #是否镜像 frame = self._captureManager.enterFrame self._captureManager.exitFrame() self._windowManager.processEvents() def onKeypress(self, keycode): if keycode == 32: #space 空格保存 self._captureManager.writeImage('screenshot.png') elif keycode == 9: #tab tab录制视频 if not self._captureManager.isWritingVideo: self._captureManager.startWritingVideo('screenshot.avi') else: self._captureManager.stopWritingVideo() elif keycode == 27: # escape self._windowManager.destroyWindow()
class Cameo(object): def __init__(self): self._windowManger = WindowManager('Cameo', self.onKeypress) self._captureManger = CaptureManager(cv2.VideoCapture(0), self._windowManger, True) self._curveFilter = filters.BGRPortraCurveFilter() def run(self): self._windowManger.createWindow() while self._windowManger.isWindowCreated: self._captureManger.enterFrame() frame = self._captureManger.frame filters.strokeEdges(frame, frame) self._curveFilter.apply(frame, frame) self._captureManger.exitFrame() self._windowManger.processEvents() def onKeypress(self, keycode): """ 空格 截图 tab 暂停,开始 esc 退出 """ if keycode == 32: # space self._captureManger.writeImage('screenshot.png') elif keycode == 9: #tab if not self._captureManger.isWritingVideo: self._captureManger.startWritingVideo('screencast.avi') else: self._captureManger.stopWritingVideo() elif keycode == 27: #escape self._windowManger.destroyWindow()
class Cameo(object): def __init__(self): self._windowManager = WindowManager('mak', keyPressCallback = self.onKeypress) self._captureManager = CaptureManager(cv2.VideoCapture('http://192.168.0.101:8003/video'), self._windowManager, True) def run(self): self._windowManager.createWindow() while self._windowManager.iswindowCreated: self._captureManager.enterFrame() frame = self._captureManager.frame if frame is not None: pass self._captureManager.exitFrame() self._windowManager.processEvents() def onKeypress(self, keycode): if keycode == 32: # space self._captureManager.writeImage('screenshot.png') elif keycode == 9: # tab if not self._captureManager.startWritingVideo('screencast.avi'): self._captureManager.stopWritingVideo() elif keycode == 27: # escape self._windowManager.destroyWindow()
class Cameo(object): def __init__(self): self._windowManager = WindowManager("Cameo", self.onkeypress) self._captureManager = CaptureManager(cv.VideoCapture(0), self._windowManager, True) self._curveFilter = filters.BGRPortraCurveFilter() def run(self): self._windowManager.createWindow() while self._windowManager.isWindowCreated: self._captureManager.enterFrame() frame = self._captureManager.frame copyFrame = frame filters.strokeEdges(frame, copyFrame, 9, 7) self._windowManager.show(copyFrame) self._captureManager.exitFrame() self._windowManager.processEvents() def onkeypress(self, keycode): if keycode == 32: #space somerberry self._captureManager.writeImage("screenshot.png") elif keycode == 9: #tab if not self._captureManager.isWritingVideo: self._captureManager.startWritingVideo("screencast.avi") else: self._captureManager.stopWritingVideo() elif keycode == 27: #esc self._windowManager.destroyWindow()
class FaceTracer(object): def __init__(self): self._configs = utils.loadConfigFile('facecapture.cf') self._users = utils.loadConfigFile('names.cf') self._camera = cv2.VideoCapture(int(self._configs['capture.camera'])) self._camera.set(cv2.CAP_PROP_FRAME_WIDTH, int(self._configs['capture.width'])) self._camera.set(cv2.CAP_PROP_FRAME_HEIGHT, int(self._configs['capture.height'])) self._windowManager = WindowManager('Face Tracing', self.onKeypress) self._captureManager = CaptureManager(self._camera, self._windowManager) self._faceDetector = FaceDetector() self._recognizer = cv2.face.LBPHFaceRecognizer_create() self._recognizer.read('trainingData.yml') def onKeypress(self, keycode): if keycode == 27: # escape self._windowManager.destroyWindow() self._camera.release() def run(self): trainData = 'trainingData.yml' self._windowManager.createWindow() while self._windowManager.isWindowCreated: self._captureManager.enterFrame() frame = self._captureManager.frame self._faceDetector.update(frame) faces = self._faceDetector.faces for face in faces: x, y, h, w = face.faceRect face_image = frame[y:y + h, x:x + w] face_image = cv2.cvtColor(face_image, cv2.COLOR_RGB2GRAY) ids, conf = self._recognizer.predict(face_image) if conf < 50: for name, id in self._users.items(): if int(id) == ids: self._captureManager.addRect( face.faceRect, '{0}({1:.0f})'.format(name, conf)) else: self._captureManager.addRect(face.faceRect, 'Unknown') self._captureManager.exitFrame() self._windowManager.processEvents() time.sleep(0.1)
class Cameo(object): def __init__(self): self._windowManager = WindowManager('Cameo', self.onKeypress) self._captureManager = CaptureManager( cv2.VideoCapture(0), self._windowManager, True) self._faceTracker = FaceTracker() self._shouldDrawDebugRects = False self._curveFilter = filters.BGRPortraCurveFilter() def run(self): """Run the main loop.""" self._windowManager.createWindow() while self._windowManager.isWindowCreated: self._captureManager.enterFrame() frame = self._captureManager.frame if frame is not None: self._faceTracker.update(frame) faces = self._faceTracker.faces rects.swapRects(frame, frame, [face.faceRect for face in faces]) filters.strokeEdges(frame, frame) self._curveFilter.apply(frame, frame) if self._shouldDrawDebugRects: self._faceTracker.drawDebugRects(frame) self._captureManager.exitFrame() self._windowManager.processEvents() def onKeypress(self, keycode): """Handle a keypress. space -> Take a screenshot. tab -> Start/stop recording a screencast. x -> Start/stop drawing debug rectangles around faces. escape -> Quit. """ if keycode == 32: # space self._captureManager.writeImage('screenshot.png') elif keycode == 9: # tab if not self._captureManager.isWritingVideo: self._captureManager.startWritingVideo( 'screencast.avi') else: self._captureManager.stopWritingVideo() elif keycode == 120: # x self._shouldDrawDebugRects = \ not self._shouldDrawDebugRects elif keycode == 27: # escape self._windowManager.destroyWindow()
class Cameo(object): def __init__(self): self._windowManager = WindowManager('Cameo', self.onKeypress) self._captureManager = CaptureManager( cv2.VideoCapture(0), self._windowManager, True) self._faceTracker = FaceTracker() self._shouldDrawDebugRects = False self._curveFilter = filters.BGRPortraCurveFilter() def run(self): """Run the main loop.""" self._windowManager.createWindow() while self._windowManager.isWindowCreated: self._captureManager.enterFrame() frame = self._captureManager.frame if frame is not None: self._faceTracker.update(frame) faces = self._faceTracker.faces rects.swapRects(frame, frame, [face.faceRect for face in faces]) #filters.strokeEdges(frame, frame) self._curveFilter.apply(frame, frame) if self._shouldDrawDebugRects: self._faceTracker.drawDebugRects(frame) self._captureManager.exitFrame() self._windowManager.processEvents() def onKeypress(self, keycode): """Handle a keypress. space -> Take a screenshot. tab -> Start/stop recording a screencast. x -> Start/stop drawing debug rectangles around faces. escape -> Quit. """ if keycode == 32: # space self._captureManager.writeImage('screenshot.png') elif keycode == 9: # tab if not self._captureManager.isWritingVideo: self._captureManager.startWritingVideo( 'screencast.avi') else: self._captureManager.stopWritingVideo() elif keycode == 120: # x self._shouldDrawDebugRects = \ not self._shouldDrawDebugRects elif keycode == 27: # escape self._windowManager.destroyWindow()
class Cameo(): def __init__(self): self._windowManager = WindowManager('Cameo', self.onKeypress) self._captureManager = CaptureManager( cv2.VideoCapture(0), self._windowManager, True) self._curveFilter = filters.BGRPortraCurveFilter() self._conv_filter = filters.SharpenFilter() self._face_tracker = FaceTracker() self._should_draw_debug_rects = False def run(self): """ run main loop """ self._windowManager.createWindow() while (self._windowManager.isWindowCreated): self._captureManager.enterFrame() frame = self._captureManager.frame # filters.strokeEdges(frame, frame) # self._conv_filter.apply(frame, frame) self._face_tracker.update(frame) faces = self._face_tracker.faces rects.swap_rects(frame, frame, [face.face_rect for face in faces]) if self._should_draw_debug_rects: self._face_tracker.draw_debug_rects(frame) self._captureManager.exitFrame() self._windowManager.processEvents() def onKeypress(self, keycode): """Handle a keypress. space -> Take a screenshot. tab -> Start/stop recording a screencast. escape -> Quit. x ->start/stop drawing debug rects """ if (keycode == 32): # space self._captureManager.writeImage('output/screenshot.png') elif (keycode == 9): # tab if (not self._captureManager.isWritingVideo): self._captureManager.startWritingVideo('output/screencast.avi') else: self._captureManager.stopWritingVideo() elif keycode == 120: # x self._should_draw_debug_rects = not self._should_draw_debug_rects elif (keycode == 27): # escape self._windowManager.destroyWindow()
class Cameo(object): def __init__(self): self._windowManager = WindowManager('Cameo', self.onKeypress) self._captureManager = CaptureManager( cv2.VideoCapture(0), self._windowManager, True) #self._curveFilter = filters.BGRPortraCurveFilter() self._EmbossFilter = filters.EmbossFilter() self._SharpenFilter = filters.SharpenFilter() self._AverageBlur = filters.AverageBlur() self._FindEdgesFilger = filters.FindEdgesFilter() def run(self): """Run the main loop.""" self._windowManager.createWindow() while self._windowManager.isWindowCreated: self._captureManager.enterFrame() frame = self._captureManager.frame # TODO: Filter the frame (Chapter 3). #filters.bnw(frame, frame) #filters.strokeEdges(frame, frame) #self._EmbossFilter.apply(frame, frame) #self._curveFilter.apply(frame, frame) #self._SharpenFilter.apply(frame, frame) #self._AverageBlur.apply(frame, frame) self._FindEdgesFilger.apply(frame, frame) self._captureManager.exitFrame() self._windowManager.processEvents() def onKeypress(self, keycode): """Handle a keypress. space -> Take a screenshot. tab -> Start/stop recording a screencast. escape -> Quit. """ if keycode == 32: # space self._captureManager.writeImage('screenshot.png') elif keycode == 9: # tab if not self._captureManager.isWritingVideo: self._captureManager.startWritingVideo( 'screencast.avi') else: self._captureManager.stopWritingVideo() elif keycode == 27: # escape self._windowManager.destroyWindow()
class Cameo(object): def __init__(self): self._windowManager = WindowManager('Cameo', self.onKeypress) vs = WebcamVideoStream(src=0).start() self._captureManager = CaptureManager(vs, self._windowManager, True) self._cameraMatrix = array([[738.134, 0, 367.371], [0, 736.132, 236.552], [0, 0, 1]]) self._distCoeffs = array( [-0.531157, 0.515348, -0.0166326, -0.00256654, -0.536911]) def run(self): """Run the main loop.""" self._windowManager.createWindow() while self._windowManager.isWindowCreated: frame = self._captureManager.frame if frame is not None: #frame = cv2.undistort(frame, self._cameraMatrix, self._distCoeffs) # frame = filters.GaussianBlurhandle(frame) # frame = filters.goodFeaturesToTrackHandle(frame) # frame = filters.FastDetect(frame) # # self._captureManager.frame = filters.combineHighlightandCornerHarrisHanle(frame) # cv2.putText(frame, self._captureManager.getfpsEstimateStr(), (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, 2) self._captureManager.frame = frame self._captureManager.exitFrame() self._windowManager.processEvents() def onKeypress(self, keycode): """Handle a keypress. space -> Take a screenshot. tab -> Start/stop recording a screencast. escape -> Quit. """ if keycode == 32: # space print "Space down" fileCount = self._captureManager.getSreenShotCount() self._captureManager.writeImage("Test/regist_orignal_" + fileCount + ".jpg") elif keycode == 9: # tab print "Tab Down" if not self._captureManager.isWritingVideo: self._captureManager.startWritingVideo('test06081.avi') else: self._captureManager.stopWritingVideo() elif keycode == 27: # escape self._windowManager.destroyWindow()
class Camera(object): def __init__(self): self._windowManager = WindowManager('Cameo', self.onKeypress) self._captureManager = CaptureManager(cv2.VideoCapture(0), self._windowManager, True) self._faceTracker = FaceTracker() self._shoulddrawRects = False def run(self): """Run the main loop""" self._windowManager.createWindow() while self._windowManager.isWindowCreated: self._captureManager.enterFrame() frame = self._captureManager.frame #Swapping faces in a camera feed self._faceTracker.update(frame) tracked_faces = self._faceTracker.faces face_rects = [] for tf in tracked_faces: face_rects.append(tf.faceRect) rects.swapRects(frame, frame, face_rects) if self._shoulddrawRects: self._faceTracker.drawRects(frame) self._captureManager.exitFrame() self._windowManager.processEvents() def onKeypress(self, keycode): """Handle a keypress space -> Take a screenshot. tab -> Start/stop recording a screencast escape -> Quit x -> Start/stop drawing rectangles """ if keycode == 32: #space self._captureManager.writeImage('screenshot.png') elif keycode == 9: #tab if not self._captureManager.isWritingVideo: self._captureManager.startWritingVideo('screencast.mp4') else: self._captureManager.stopWritingVideo() elif keycode == 120: #x self._shoulddrawRects = not self._shoulddrawRects elif keycode == 27: #escape self._windowManager.destroyWindow()
class CameoDepth(Cameo): def __init__(self): self._windowManager = WindowManager('Cameo', self.onKeypress) #device = cv2.CAP_OPENNI2 # uncomment for Microsoft Kinect via OpenNI2 device = cv2.CAP_OPENNI2_ASUS # uncomment for Asus Xtion via OpenNI2 self._captureManager = CaptureManager(cv2.VideoCapture(device), self._windowManager, True) self._faceTracker = FaceTracker() self._shouldDrawDebugRects = False self._curveFilter = filters.BGRPortraCurveFilter() def run(self): """Run the main loop.""" self._windowManager.createWindow() while self._windowManager.isWindowCreated: self._captureManager.enterFrame() self._captureManager.channel = cv2.CAP_OPENNI_DISPARITY_MAP disparityMap = self._captureManager.frame self._captureManager.channel = cv2.CAP_OPENNI_VALID_DEPTH_MASK validDepthMask = self._captureManager.frame self._captureManager.channel = cv2.CAP_OPENNI_BGR_IMAGE frame = self._captureManager.frame if frame is None: # Failed to capture a BGR frame. # Try to capture an infrared frame instead. self._captureManager.channel = cv2.CAP_OPENNI_IR_IMAGE frame = self._captureManager.frame if frame is not None: self._faceTracker.update(frame) faces = self._faceTracker.faces masks = [ depth.createMedianMask( disparityMap, validDepthMask, face.faceRect) \ for face in faces ] rects.swapRects(frame, frame, [face.faceRect for face in faces], masks) if self._captureManager.channel == cv2.CAP_OPENNI_BGR_IMAGE: # A BGR frame was captured. # Apply filters to it. filters.strokeEdges(frame, frame) self._curveFilter.apply(frame, frame) if self._shouldDrawDebugRects: self._faceTracker.drawDebugRects(frame) self._captureManager.exitFrame() self._windowManager.processEvents()
class Cameo(object): def __init__(self): #创建一个窗口,并将键盘的回调函数传入 self._windowManager = WindowManager('Cameo', self.onKeypress) #告诉程序数据来自摄像头,还有镜面效果 self._captureManager = Capturemanager( cv2.VideoCapture(0), self._windowManager, True ) def run(self): '''Run the main loop''' self._windowManager.createWindow()#创建窗口,设置self._isWindowCreated = True控制循环提取摄像头信息 while self._windowManager.isWindowCreated: #这里的enterFrame作用使得从程序从摄像头中取数据 self._captureManager.enterFrame()#开启窗口 #frame是原始帧数据,未做任何改动 frame = self._captureManager.frame#获得当前帧 #TODO: filter the frame(Chapter 3) #exitFrame()主要功能:实现截屏,录屏 self._captureManager.exitFrame()#根据控制参数,选择是否进行截屏和录屏,并将self._frame等参数还原准备下一次循环 #回调函数 self._windowManager.processEvent() def onKeypress(self, keycode): '''Handle a keypress space -> Take a screenshot tab -> State/stop recording a screencast escape -> Quit ''' if keycode == 32: #Space #截取保存的文件名称 self._captureManager.WriteImage('screenshot.png')#设置截取图片保存信息 print("截图已保存") elif keycode == 9:#tab if not self._captureManager.isWritingVideo:#判断为开始录制视频或结束录制视频 #录像保存的文件名字 self._captureManager.startWritingVideo( 'screencast.avi' ) print("开始录屏") else: self._captureManager.stopWritingVideo() print("结束录屏") elif keycode == 27: #escape self._windowManager.destroyWindow()
class Cameo(object): def __init__(self): self._windowManager = WindowManager('Cameo', self.onKeypress) self._captureManager = CaptureManager(cv2.VideoCapture(0), self._windowManager, True) #self._curveFilter = filters.BGRPortraCurveFilter() def run(self): """Run the main loop.""" self._windowManager.createWindow() while self._windowManager.isWindowCreated: self._captureManager.enterFrame() frame = self._captureManager.frame #Filtering to come #filters.strokeEdges(frame, frame) #self._curveFilter.apply(frame, frame) self._captureManager.exitFrame() self._windowManager.processEvents() def onKeypress(self, keycode): """What to do on keypress. space -> Take a screenshot. tab -> Start/stop recording on screencast. escape -> Quit. """ if keycode == 32: #space self._captureManager.writeImage('screenshot.png') print("Capturing image...") print("") elif keycode == 9: #tab if not self._captureManager.isWritingVideo: self._captureManager.startWritingVideo('screencast.avi') print("Capturing video...") else: self._captureManager.stopWritingVideo() print("Ending video capture...") elif keycode == 27: #escape self._windowManager.destroyWindow() print("Exiting...") print("")
class Cameo(object): def __init__(self): # 引入窗口管理类 self._windowManager = WindowManager('Cameo', self.onKeypress) # 引入摄像头捕捉类 self._captureManager = CaptureManager(cv2.VideoCapture(0), self._windowManager, True) # 引入滤波器类 self._curveFilter = filters.FindEdgesFilter() def run(self): """Run the main loop""" # 创建一个窗口 self._windowManager.createWindow() while self._windowManager.isWindowCreated: # 获取帧是否成功grab() self._captureManager.enterFrame() frame = self._captureManager.frame filters.strokeEdges(frame, frame) self._curveFilter.apply(frame, frame) self._captureManager.exitFrame() self._windowManager.processEvents() def onKeypress(self, keycode): """Handle a keypress space -> Take a screenshot tab -> Start/stop recording a screencast escape -> Quit """ if keycode == 32: #space self._captureManager.writeImage('screennshot.png') elif keycode == 9: #tab if not self._captureManager.isWritingVideo: self._captureManager.startWritingVideo('scrrencast.avi') else: self._captureManager.stopWritingVideo() elif keycode == 27: #escape self._windowManager.detroyWindow()
class CameoDepth(Cameo): def __init__(self): self._windowManager = WindowManager('Cameo', self.onKeypress) device = depth.CV_CAP_OPENNI # uncomment for Microsoft Kinect #device = depth.CV_CAP_OPENNI_ASUS # uncomment for Asus Xtion self._captureManager = CaptureManager( cv2.VideoCapture(device), self._windowManager, True) self._faceTracker = FaceTracker() self._shouldDrawDebugRects = False self._curveFilter = filters.BGRPortraCurveFilter() def run(self): """Run the main loop.""" self._windowManager.createWindow() while self._windowManager.isWindowCreated: self._captureManager.enterFrame() self._captureManager.channel = \ depth.CV_CAP_OPENNI_DISPARITY_MAP disparityMap = self._captureManager.frame self._captureManager.channel = \ depth.CV_CAP_OPENNI_VALID_DEPTH_MASK validDepthMask = self._captureManager.frame self._captureManager.channel = \ depth.CV_CAP_OPENNI_BGR_IMAGE frame = self._captureManager.frame self._faceTracker.update(frame) faces = self._faceTracker.faces masks = [ depth.createMedianMask( disparityMap, validDepthMask, face.faceRect) \ for face in faces ] rects.swapRects(frame, frame, [face.faceRect for face in faces], masks) filters.strokeEdges(frame, frame) self._curveFilter.apply(frame, frame) if self._shouldDrawDebugRects: self._faceTracker.drawDebugRects(frame) self._captureManager.exitFrame() self._windowManager.processEvents()
class Cameo(object): def __init__(self): self._windowManager = WindowManager("Cameo", self.onKeypress) self._captureManager = CaptureManager(cv2.VideoCapture(0), self._windowManager, True) def run(self): """Run the main loop.""" self._windowManager.createWindow() while self._windowManager.isWindowCreated: self._captureManager.enterFrame() frame = self._captureManager.frame if frame is not None: # TODO: rilter the frame (Chaper 3). pass self._captureManager.exitFrame() self._windowManager.processEvents() def onKeypress(self, keycode): """Handle a keypress. space -> Take a screenshot. tab -> Start/Stop recording a screencast. escape -> Quit. """ if keycode == 32: # space self._captureManager.writeImage('cameo/img/screenshot.png') elif keycode == 9: # tab if not self._captureManager.isWritingVideo: self._captureManager.startWritingVideo('cameo/img/screencast.avi') else: self._captureManager.stopWritingVideo() elif keycode == 27: # escape self._windowManager.destroyWindow()
class Cameo(object): def __init__(self): self._windowManager = WindowManager('Cameo', self.onKeypress) self._captureManager = CaptureManager(cv2.VideoCapture(0), self._windowManager, True) #kaz notes: enter a random color filter here #self._curveFilter = filters.BGRPortraCurveFilter() self._curveFilter = filters.BGRVelviaCurveFilter() #kaz note end def run(self): '''Run the main loop.''' self._windowManager.createWindow() while self._windowManager.isWindowCreated: self._captureManager.enterFrame() frame = self._captureManager.frame # TODO: Filter the frame (Chapter 3). #kaz notes: enter a random effect filter (blur, sharpen, colorize) here filters.strokeEdges(frame, frame) #filters.recolorCMV(frame, frame) self._curveFilter.apply(frame, frame) #kaz note end self._captureManager.exitFrame() self._windowManager.processEvents() def onKeypress(self, keycode): '''Handle a keypress. space -> Take a screenshot tab -> Start/stop recording a screencast. escape -> Quit. ''' if keycode == 32: # space self._captureManager.writeImage('C:\\Users\\Desktop02\\Documents\\OpenCV_pythonFiles\\opencv_python\\chapter3\\CaptureManager\\screenshotTest02.png') elif keycode == 9: # tab if not self._captureManager.isWritingVideo: self._captureManager.startWritingVideo('C:\\Users\\Desktop02\\Documents\\OpenCV_pythonFiles\\opencv_python\\chapter3\\CaptureManager\\screencast.avi') else: self._captureManager.stopWritingVideo() elif keycode == 27: # escape self._windowManager.destroyWindow()
class Cameo(object): def __init__(self): '''创建一个窗口,写上按键的回调方法''' self._windowManager = WindowManager('Cameo', self.onKeypress) # cameraCapture = cv2.VideoCapture(0) # 获取摄像头数据 cameraCapture = cv2.VideoCapture('/home/deepl/Documents/wb/opencv-3.0.0/samples/data/768x576.avi') '''告诉程序数据来自摄像头, 还有镜面效果''' self._captureManager = CaptureManager(cameraCapture, self._windowManager, True) def run(self): """Run the main loop.""" self._windowManager.createWindow() while self._windowManager.isWindowCreated: '''这里的enterFrame就是告诉程序从摄像头中取数据''' self._captureManager.enterFrame() '''下面的这个frame是原始帧数据,这里没有做任何修改,后面的教程会对这个帧数据进行修改''' frame = self._captureManager._frame '''exitFrame看起来是像是退出的意思,其实主要功能都是在这里方法里实现的,截屏、录像都是在这里''' self._captureManager.exitFrame() self._windowManager.processEvents() def onKeypress(self, keycode): ''' 快捷键设置: 当按下“空格”键的时候,会进行抓屏。 当按下‘tab’键的时候,就开始或者停止录像。 当然相应的目录也会生成图片或者视频文件 ''' if keycode == 32: # space '''告诉程序,截屏保存的文件名字''' self._captureManager.writeImage('changeOnePixel.png') elif keycode == 9:#tab if not self._captureManager.isWritingVideo: '''告诉程序,录像保存的文件名字''' self._captureManager.startWritingVideo('record.avi') else: self._captureManager.stopWritingVideo() elif keycode == 27: # escape self._windowManager.destroyWindow()
class BenFinder(object): BACKGROUND_VIDEO_FNAME = "background_video.png" BACKGROUND_DEPTH_FNAME = "background_depth.png" def __init__(self): self._windowManager = WindowManager('benFinder', self.onKeypress) device = depth.CV_CAP_FREENECT #device = 1 print "device=%d" % device self._captureManager = CaptureManager( device, self._windowManager, True) self._captureManager.channel = depth.CV_CAP_OPENNI_BGR_IMAGE self._faceTracker = FaceTracker() self._shouldDrawDebugRects = False self._backgroundSubtract = False self._autoBackgroundSubtract = False self._curveFilter = filters.BGRPortraCurveFilter() self.background_video_img = None self.background_depth_img = None self.autoBackgroundImg = None self._ts = TimeSeries() self._frameCount = 0 def loadBackgroundImages(self): """ Load the background images to be used for background subtraction from disk files. """ self.background_video_img = cv2.imread(BenFinder.BACKGROUND_VIDEO_FNAME) self.background_depth_img = cv2.imread(BenFinder.BACKGROUND_DEPTH_FNAME, cv2.CV_LOAD_IMAGE_GRAYSCALE) def showBackgroundImage(self): """ Display the background image used for subtraction in a separate window """ # Load the images from disk if necessary. if (not self.background_depth_img or not self.background_video_img): self.loadBackgroundImages() # Display the correct image if (self._autoBackgroundSubtract): cv2.imshow("Auto Background Image", self.autoBackgroundImg) else: if (self._captureManager.channel == \ depth.CV_CAP_OPENNI_DEPTH_MAP): cv2.imshow("background_depth_img",self.background_depth_img) elif (self._captureManager.channel == \ depth.CV_CAP_OPENNI_BGR_IMAGE): cv2.imshow("background_video_img",self.background_video_img) else: print "Error - Invalid Channel %d." % \ self._captureManager.channel def run(self): """Run the main loop.""" self._windowManager.createWindow() while self._windowManager.isWindowCreated: self._captureManager.enterFrame() frame = self._captureManager.frame if frame is not None: if (self._backgroundSubtract): if (self._autoBackgroundSubtract): if (self._captureManager.channel == \ depth.CV_CAP_OPENNI_DEPTH_MAP): if (self.autoBackgroundImg == None): self.autoBackgroundImg = numpy.float32(frame) # First work out the region of interest by # subtracting the fixed background image # to create a mask. absDiff = cv2.absdiff(frame,self.background_depth_img) benMask,maskArea = filters.getBenMask(absDiff,8) cv2.accumulateWeighted(frame, self.autoBackgroundImg, 0.05) # Convert the background image into the same format # as the main frame. bg = cv2.convertScaleAbs(self.autoBackgroundImg, alpha=1.0) # Subtract the background from the frame image cv2.absdiff(frame,bg,frame) # Scale the difference image to make it more sensitive # to changes. cv2.convertScaleAbs(frame,frame,alpha=100) #frame = cv2.bitwise_and(frame,frame,dst=frame,mask=benMask) frame = cv2.multiply(frame,benMask,dst=frame,dtype=-1) bri = filters.getMean(frame,benMask) #print "%4.0f, %3.0f" % (bri[0],self._captureManager.fps) self._ts.addSamp(bri[0]) if (self._frameCount < 15): self._frameCount = self._frameCount +1 else: self._ts.plotRawData() self._ts.findPeaks() self._frameCount = 0 else: print "Auto background subtract only works for depth images!" else: if (self._captureManager.channel == \ depth.CV_CAP_OPENNI_DEPTH_MAP): cv2.absdiff(frame,self.background_depth_img,frame) benMask = filters.getBenMask(frame,8) bri = filters.getMean(frame,benMask) print bri elif (self._captureManager.channel == \ depth.CV_CAP_OPENNI_BGR_IMAGE): cv2.absdiff(frame,self.background_video_img,frame) else: print "Error - Invalid Channel %d." % \ self._captureManager.channel #ret,frame = cv2.threshold(frame,200,255,cv2.THRESH_TOZERO) #self._faceTracker.update(frame) #faces = self._faceTracker.faces #if self._shouldDrawDebugRects: # self._faceTracker.drawDebugRects(frame) self._captureManager.exitFrame() self._windowManager.processEvents() def onKeypress(self, keycode): """Handle a keypress. space -> Take a screenshot. tab -> Start/stop recording a screencast. x -> Start/stop drawing debug rectangles around faces. a -> toggle automatic accumulated background subtraction on or off. b -> toggle simple background subtraction on or off. s -> Save current frame as background image. d -> Toggle between video and depth map view i -> Display the background image that is being used for subtraction. escape -> Quit. """ print "keycode=%d" % keycode if keycode == 32: # space self._captureManager.writeImage('screenshot.png') elif keycode == 9: # tab if not self._captureManager.isWritingVideo: print "Starting Video Recording..." self._captureManager.startWritingVideo( 'screencast.avi') else: print "Stopping video recording" self._captureManager.stopWritingVideo() elif keycode == 120: # x self._shouldDrawDebugRects = \ not self._shouldDrawDebugRects elif (chr(keycode)=='a'): # Autometic background subtraction if (self._autoBackgroundSubtract == True): print "Switching off auto background Subtraction" self.autoBackgroundImage = None self._autoBackgroundSubtract = False else: print "Switching on auto background subtraction" self._autoBackgroundSubtract = True elif (chr(keycode)=='b'): # Simple background subtraction if (self._backgroundSubtract == True): print "Switching off background Subtraction" self._backgroundSubtract = False else: print "Switching on background subtraction" self.loadBackgroundImages() self._backgroundSubtract = True elif (chr(keycode)=='d'): if (self._captureManager.channel == depth.CV_CAP_OPENNI_BGR_IMAGE): print "switching to depth map..." self._captureManager.channel = depth.CV_CAP_OPENNI_DEPTH_MAP else: print "switching to video" self._captureManager.channel = depth.CV_CAP_OPENNI_BGR_IMAGE elif (chr(keycode)=='i'): self.showBackgroundImage() elif (chr(keycode)=='s'): print "Saving Background Image" if (self._captureManager.channel == depth.CV_CAP_OPENNI_DEPTH_MAP): self._captureManager.writeImage(BenFinder.BACKGROUND_DEPTH_FNAME) elif (self._captureManager.channel == depth.CV_CAP_OPENNI_BGR_IMAGE): self._captureManager.writeImage(BenFinder.BACKGROUND_VIDEO_FNAME) else: print "Invalid Channel %d - doing nothing!" \ % self._captureManager.channel elif keycode == 27: # escape self._windowManager.destroyWindow()
class Tracker ( object ): def __init__( self, method, src ): ### Sensitivity of tracker params self._sampleFreq = 0.1 #in sec ### Set Camera params #self.resolution = (640, 480 ) self.resolution = (1280, 960) source = { 0:0, 1:1, 2:'led_move1.avi', 3:'screencast.avi', 4:'screencast 1.avi', 5: 'shortNoBox.avi', 6: 'longNoBox.avi', 7: 'H299.avi', 8: 'testRec.avi', 9: 'longDemo.avi', 10: 'worm2014_05_05-12-44-53.avi' } self.color = True self.captureSource = source[int(src)] ### Timing initialization self._startTime = time.time() self._lastCheck = self._startTime - self._sampleFreq ### Display params self.mirroredPreview = False ### Initialize Objects ##### Windows self._rawWindow = WindowManager( 'RawFeed', self.onKeypress ) ### Capture -- resolution set here self._cap = CaptureManager( cv2.VideoCapture(self.captureSource), self._rawWindow, self.mirroredPreview, self.resolution) actualCols, actualRows = self._cap.getResolution() ## from here on out use this resolution ### Arguments for finder self.finderArgs = { 'method' : method, 'gsize' : 45, 'gsig' : 9, 'window' : 3, 'boundBoxRow' : 150, 'boundBoxCol' : 150, 'limRow' : 100, 'limCol' : 100, 'MAXONEFRAME': 500, 'REFPING' : 600000, 'MAXREF': 1000, 'capCols':actualCols, 'capRows': actualRows, 'color' : self.color } self._wormFinder = WormFinder( **self.finderArgs ) ##### Debugging self._overlayWindow = WindowManager( 'Overlay', self.onKeypress ) self.motorsOn = False def run( self ): # Show windows self._rawWindow.createWindow() self._overlayWindow.createWindow() while self._rawWindow.isWindowCreated: self._cap.enterFrame() frame = self._cap.frame # Probably not useful, removes errors when playing from video # if not self._captureManager.gotFrame: # self.shutDown() # break # Display raw frame to rawWindow t1 = time.time() # Get frame frame = self._cap.frame # Show frame to raw feed self._rawWindow.show(frame) # If tracking is enabled or motors are on, start tracking if time.time() - self._lastCheck >= self._sampleFreq: if self.finderArgs['method'] in ['lazyc', 'lazyd']: self.gaussian = self._wormFinder.processFrame( frame ) self.overlayImage = copy.deepcopy(frame) if self.motorsOn: self._wormFinder.decideMove() self._lastCheck = time.time() self._wormFinder.drawDebugCropped( self.overlayImage) self._wormFinder.drawTextStatus(self.overlayImage,self._cap.isWritingVideo, self.motorsOn) self._overlayWindow.show(self.overlayImage) if self.finderArgs['method'] in ['test','conf']: self._wormFinder.drawTest( frame ) self._cap.exitFrame() self._rawWindow.processEvents() logt.debug('frame processing took: %0.6f' % (time.time() - t1)) @property def isDebug( self ): return logt.getEffectiveLevel() <= logging.INFO def shutDown( self ): self._rawWindow.destroyWindow() #if not self.isDebug: if self._cap.isWritingVideo: self._cap.stopWritingVideo() try: # self._wormFinder.writeOut('%s-%s' % (self.finderArgs['method'], self.captureSource)) self._wormFinder.servos.disableMotors() self._wormFinder.servos.closeSerial() except Exception as e: logt.exception(str(e)) def onKeypress ( self, keycode ): ''' Keypress options <SPACE> --- Motors On < TAB > --- start/stop recording screencast < ESC > --- quit ''' if keycode == 32: #space if self.motorsOn: self.motorsOn = False#_captureManager.writeImage('screenshot.png') if not self.isDebug: self._wormFinder.servos.disableMotors() #cv2.displayOverlay('Overlay','Motors disabled', 0) else: self.motorsOn = True self._wormFinder.launch = 0 if not self.isDebug: self._wormFinder.servos.enableMotors() self._wormFinder.launch = 0 time.sleep(2) #cv2.displayOverlay('Overlay','Motors enabled', 0) elif keycode == 9: #tab if not self._cap.isWritingVideo: self._cap.startWritingVideo( 'worm%s.avi' % time.strftime("%Y_%m_%d-%H-%M-%S", time.localtime(time.time())), cv2.cv.CV_FOURCC(*'MJPG')) # cv2.displayOverlay('Overlay','Writing Video', 0) else: self._cap.stopWritingVideo() # cv2.displayOverlay('Overlay','Not writing Video', 0) elif keycode == 27: #escape self.shutDown()
class Facedetect(object): def __init__(self): self._windowManager = WindowManager('Facedetect', self.onKeypress) self._captureManager = CaptureManager(cv2.VideoCapture(camera_nr), self._windowManager, True) self._faceTracker = FaceTracker() self._shouldDrawDebugRects = True self._curveFilter = filters.BGRPortraCurveFilter() def run(self): """Run the main loop.""" self._windowManager.createWindow() while self._windowManager.isWindowCreated: self._captureManager.enterFrame() frame = self._captureManager.frame if frame is not None: t = cv2.getTickCount() self._faceTracker.update(frame) faces = self._faceTracker.faces t = cv2.getTickCount() - t print("time taken for detection = %gms" % (t/(cv2.getTickFrequency())*1000.)) # uncomment this line for swapping faces #rects.swapRects(frame, frame, [face.faceRect for face in faces]) #filters.strokeEdges(frame, frame) #self._curveFilter.apply(frame, frame) if self._shouldDrawDebugRects: self._faceTracker.drawDebugRects(frame) self._faceTracker.drawLinesFromCenter(frame) self._captureManager.exitFrame() self._windowManager.processEvents() def onKeypress(self, keycode): """Handle a keypress. space -> Take a screenshot. tab -> Start/stop recording a screencast. x -> Start/stop drawing debug rectangles around faces. escape -> Quit. """ if keycode == 32: # space self._captureManager.writeImage('screenshot.png') elif keycode == 9: # tab if not self._captureManager.isWritingVideo: self._captureManager.startWritingVideo( 'screencast.avi') else: self._captureManager.stopWritingVideo() elif keycode == 120: # x self._shouldDrawDebugRects = \ not self._shouldDrawDebugRects elif keycode == 27: # escape self._windowManager.destroyWindow() # When everything is done, release the capture self._captureManager.release()
class Cameo(object): def __init__(self): self._windowManager = WindowManager('Cameo', self.onKeypress) self._captureManager = CaptureManager(cv2.VideoCapture(0), self._windowManager, True) self._curveFilter = filters.BGRProviaCurveFilter() self._faceTracker = FaceTracker() self._shouldDrawDebugRects = False def run(self): """ Run the main loop """ self._windowManager.createWindow() print("Window '{}' Created".format(self._windowManager.windowName)) print("\n{}\n{}\n{}\n{}".format("Controls:", "space --> Take a screenshot", "tab --> Start/stop recording a screencast", "escape --> Quit")) while self._windowManager.isWindowCreated: self._captureManager.enterFrame() frame = self._captureManager.frame self._faceTracker.update(frame) faces = self._faceTracker.faces rects.swapRects(frame, frame, [face.faceRect for face in faces]) # Add filtering to the frame filters.strokeEdges(frame,frame) self._curveFilter.apply(frame,frame) if self._shouldDrawDebugRects: self._faceTracker.drawDebugRects(frame) self._captureManager.exitFrame() self._windowManager.processEvents() def stop(self): print("[CAMEO] closing all processes") self._captureManager._capture.release() self._windowManager.destroyWindow() def onKeypress(self, keycode): """ Handle a keypress space --> Take a screenshot tab --> Start/stop recording a screencast x --> Toggle drawing debug rectangles around faces escape --> Quit """ if keycode == 32: # Space self._captureManager.writeImage('screenshot.png'); print("Writing image to file....") elif keycode == 9: # Tab if not self._captureManager.isWritingVideo: self._captureManager.startWritingVideo('screencast.avi') print("Writing video to file...") else: self._captureManager.stopWritingVideo() print("Stopped writing video") elif keycode == 120: # x self._shouldDrawDebugRects = not self._shouldDrawDebugRects print("Toggled drawing rectangles") elif keycode == 27: # escape print("Closing Window...") self._windowManager.destroyWindow()
class Browser(object): def __init__(self,video_source): self._windowManager = WindowManager('Browser', self.onKeypress) self._captureManager = CaptureManager(video_source, self._windowManager, True) self._faceTracker = FaceTracker() self._shouldDrawDebugRects = False self._curveFilter = filters.BGRPortraCurveFilter() def run(self): """Run the main loop.""" self._windowManager.createWindow() while self._windowManager.isWindowCreated: self._captureManager.enterFrame() frame = self._captureManager.frame if frame is not None: print "got frame" self._faceTracker.update(frame) faces = self._faceTracker.faces rects.swapRects(frame, frame, [face.faceRect for face in faces]) #filters.strokeEdges(frame, frame) #self._curveFilter.apply(frame, frame) if self._shouldDrawDebugRects: self._faceTracker.drawDebugRects(frame) else: print "got None frame" print "press any key to exit." cv2.waitKey(0) break self._captureManager.exitFrame() waitkey_time=1 if self._captureManager._video_source!=0: waitkey_time=500 self._windowManager.processEvents(waitkey_time) def onKeypress(self, keycode): """Handle a keypress. space -> Take a screenshot. tab -> Start/stop recording a screencast. x -> Start/stop drawing debug rectangles around faces. escape -> Quit. """ if keycode == 32: # space self._captureManager.writeImage('screenshot.png') elif keycode == 9: # tab if not self._captureManager.isWritingVideo: self._captureManager.startWritingVideo( '/Users/xcbfreedom/Documents/screencast.avi') else: self._captureManager.stopWritingVideo() elif keycode == 120: # x self._shouldDrawDebugRects = \ not self._shouldDrawDebugRects elif keycode == 27: # escape self._windowManager.destroyWindow()
class Tracker(object): def __init__(self, method, src): self.color = True self.motorsOn = False ### Sensitivity of tracker params self._sampleFreq = 0.1 # in sec ### Set Camera params # self.resolution = (640, 480 ) self.resolution = (1280, 960) source = { 0: 0, 1: 1, 2: "led_move1.avi", 3: "screencast.avi", 4: "screencast 1.avi", 5: "shortNoBox.avi", 6: "longNoBox.avi", 7: "H299.avi", 8: "testRec.avi", 9: "longDemo.avi", } self.captureSource = source[int(src)] ### Timing initialization self._startTime = time.time() self._lastCheck = self._startTime - self._sampleFreq ### Display params self.mirroredPreview = False ### Initialize Objects ##### Windows self._rawWindow = WindowManager("RawFeed", self.onKeypress) ### Capture -- resolution set here self._cap = CaptureManager( cv2.VideoCapture(self.captureSource), self._rawWindow, self.mirroredPreview, self.resolution ) actualCols, actualRows = self._cap.getResolution() self.centerPt = utils.Point(actualCols / 2, actualRows / 2) ## from here on out use this resolution boundCols = 600 boundRows = 600 ### Arguments for finder # --> Pairs are always COLS, ROWS !!!!!!! self.finderArgs = { "method": method, "gsize": 45, "gsig": 9, "window": 3, "MAXONEFRAME": 500, "REFPING": 600000, "MAXREF": 1000, "captureSize": utils.Rect(actualCols, actualRows, self.centerPt), "cropRegion": utils.Rect(100, 100, self.centerPt), "decisionBoundary": utils.Rect(boundCols, boundRows, self.centerPt), "color": self.color, "motorsOn": self.motorsOn, } self._wormFinder = WormFinder(**self.finderArgs) ##### Debugging # self._gaussianWindow = WindowManager('Gaussian', self.onKeypress) self._overlayWindow = WindowManager("Overlay", self.onKeypress) def run(self): # Show windows self._rawWindow.createWindow() self._overlayWindow.createWindow() i = 0 while self._rawWindow.isWindowCreated: self._cap.enterFrame() frame = self._cap.frame # Probably not useful, removes errors when playing from video # if not self._captureManager.gotFrame: # self.shutDown() # break # Display raw frame to rawWindow t1 = time.time() # Get frame frame = self._cap.frame # Show frame to raw feed self._rawWindow.show(frame) # If tracking is enabled or motors are on, start tracking if time.time() - self._lastCheck >= self._sampleFreq: if self.finderArgs["method"] in ["lazyc", "lazyd", "lazy"]: self.gaussian = self._wormFinder.processFrame(frame) self.overlayImage = copy.deepcopy(frame) if self.motorsOn: self._wormFinder.decideMove() self._lastCheck = time.time() self._wormFinder.drawDebugCropped(self.overlayImage) self._wormFinder.drawTextStatus(self.overlayImage, self._cap.isWritingVideo, self.motorsOn) self._overlayWindow.show(self.overlayImage) # if self.gaussian is not None: # self._gaussianWindow.show(self.gaussian) # cv2.imwrite('g-%d.jpg' % i, self.gaussian ) # cv2.imwrite('o-%d.jpg' % i, self.overlayImage ) if self.finderArgs["method"] in ["test", "conf"]: # self.overlayImage = copy.deepcopy(frame) self._wormFinder.drawTest(frame) # self.overlayImage) # self._overlayWindow.show(self.overlayImage) i += 1 self._cap.exitFrame() self._rawWindow.processEvents() logt.info("processing: %0.6f" % (time.time() - t1)) @property def isDebug(self): return logt.getEffectiveLevel() <= logging.INFO def shutDown(self): self._rawWindow.destroyWindow() if self._cap.isWritingVideo: self._cap.stopWritingVideo() try: self._wormFinder.servos.disableMotors() self._wormFinder.servos.closeSerial() except Exception as e: logt.exception(str(e)) def onKeypress(self, keycode): """ Keypress options <SPACE> --- Motors On < TAB > --- start/stop recording screencast < ESC > --- quit """ if keycode == 32: # space if self.motorsOn: self.motorsOn = False # _captureManager.writeImage('screenshot.png') if not self.isDebug: self._wormFinder.servos.disableMotors() else: self.motorsOn = True self._wormFinder.launch = 0 if not self.isDebug: self._wormFinder.servos.enableMotors() self._wormFinder.launch = 0 time.sleep(2) elif keycode == 9: # tab if not self._cap.isWritingVideo: self._cap.startWritingVideo( "worm%s.avi" % time.strftime("%Y_%m_%d-%H-%M-%S", time.localtime(time.time())), cv2.cv.CV_FOURCC(*"MJPG"), ) else: self._cap.stopWritingVideo() elif keycode == 27: # escape self.shutDown()