def add_export(self): # on MacOS we will not use os.fork, elsewhere this does nothing. forking_enable(0) logger.debug("Adding new export.") should_terminate = RawValue(c_bool, False) frames_to_export = RawValue(c_int, 0) current_frame = RawValue(c_int, 0) data_dir = self.data_dir start_frame = self.start_frame.value end_frame = self.end_frame.value plugins = [] # Here we make clones of every plugin that supports it. # So it runs in the current config when we lauch the exporter. for p in self.g_pool.plugins: try: p_initializer = p.get_class_name(), p.get_init_dict() plugins.append(p_initializer) except AttributeError: pass out_file_path = verify_out_file_path(self.rec_name.value, self.data_dir) process = Process(target=export, args=(should_terminate, frames_to_export, current_frame, data_dir, start_frame, end_frame, plugins, out_file_path)) process.should_terminate = should_terminate process.frames_to_export = frames_to_export process.current_frame = current_frame process.out_file_path = out_file_path self.new_export = process
def main(): # To assign camera by name: put string(s) in list # Parse command line arguments parser = argparse.ArgumentParser(description='GUI for gaze tracking and pupillometry') parser.add_argument('-eye', dest='eye_file', type=str, help="Work with existing video recording, instead of live feed", default='') parser.add_argument('-world', dest='world_file', type=str, help="Work with existing video recording, instead of live feed", default='') args = parser.parse_args() # to use a pre-recorded video. # Use a string to specify the path to your video file as demonstrated below if args.eye_file == '': eye_src = ["UI154xLE-M", "USB Camera-B4.09.24.1", "FaceTime Camera (Built-in)", "Microsoft", "6000","Integrated Camera"] # to assign cameras directly, using integers as demonstrated below # eye_src = 1 else: # print "Using provide file: %s" % args.filename eye_src = args.eye_file if args.world_file == '': world_src = ["Logitech Camera","(046d:081d)","C510","B525", "C525","C615","C920","C930e"] # to assign cameras directly, using integers as demonstrated below # world_src = 0 else: world_src = args.world_file # Camera video size in pixels (width,height) eye_size = (260,216) #(1280,1024) world_size = (640,480) # on MacOS we will not use os.fork, elsewhere this does nothing. forking_enable(0) # Create and initialize IPC g_pool = Temp() g_pool.pupil_queue = Queue() g_pool.eye_rx, g_pool.eye_tx = Pipe(False) g_pool.quit = RawValue(c_bool,0) # this value will be substracted form the capture timestamp g_pool.timebase = RawValue(c_double,0) # make some constants avaiable g_pool.user_dir = user_dir g_pool.rec_dir = rec_dir g_pool.version = version g_pool.app = 'capture' # set up subprocesses p_eye = Process(target=eye, args=(g_pool,eye_src,eye_size)) # Spawn subprocess: p_eye.start() if platform.system() == 'Linux': # We need to give the camera driver some time before requesting another camera. sleep(0.5) world(g_pool,world_src,world_size) # Exit / clean-up p_eye.join()
def main(): # To assign camera by name: put string(s) in list eye_src = ["Microsoft", "6000", "Integrated Camera"] world_src = [ "Logitech Camera", "(046d:081d)", "C510", "B525", "C525", "C615", "C920", "C930e" ] # to assign cameras directly, using integers as demonstrated below # eye_src = 1 # world_src = 0 # to use a pre-recorded video. # Use a string to specify the path to your video file as demonstrated below # eye_src = '/Users/mkassner/Pupil/datasets/p1-left/frames/test.avi' # world_src = "/Users/mkassner/Desktop/2014_01_21/000/world.avi" # Camera video size in pixels (width,height) eye_size = (640, 360) world_size = (1280, 720) # on MacOS we will not use os.fork, elsewhere this does nothing. forking_enable(0) # Create and initialize IPC g_pool = Temp() g_pool.pupil_queue = Queue() g_pool.eye_rx, g_pool.eye_tx = Pipe(False) g_pool.quit = RawValue(c_bool, 0) # this value will be substracted form the capture timestamp g_pool.timebase = RawValue(c_double, 0) # make some constants avaiable g_pool.user_dir = user_dir g_pool.rec_dir = rec_dir g_pool.version = version g_pool.app = 'capture' # set up subprocesses p_eye = Process(target=eye, args=(g_pool, eye_src, eye_size)) # Spawn subprocess: p_eye.start() if platform.system() == 'Linux': # We need to give the camera driver some time before requesting another camera. sleep(0.5) world(g_pool, world_src, world_size) # Exit / clean-up p_eye.join()
def add_exports(self): # on MacOS we will not use os.fork, elsewhere this does nothing. forking_enable(0) outfiles = set() for d in self.new_exports: logger.debug("Adding new export.") should_terminate = RawValue(c_bool, False) frames_to_export = RawValue(c_int, 0) current_frame = RawValue(c_int, 0) start_frame = None end_frame = None data_dir = d plugins = [] # Here we make clones of every plugin that supports it. # So it runs in the current config when we lauch the exporter. for p in self.g_pool.plugins: try: p_initializer = p.get_class_name(), p.get_init_dict() plugins.append(p_initializer) except AttributeError: pass #make a unique name created from rec_session and dir name rec_session, rec_dir = data_dir.rsplit(os.path.sep, 2)[1:] out_name = rec_session + "_" + rec_dir + ".avi" out_file_path = os.path.join(self.destination_dir.value, out_name) if out_file_path in outfiles: logger.error( "This export setting would try to save %s at least twice please rename dirs to prevent this. Skipping File" % out_file_path) else: outfiles.add(out_file_path) logger.info("Exporting to: %s" % out_file_path) process = Process(target=export, args=(should_terminate, frames_to_export, current_frame, data_dir, start_frame, end_frame, plugins, out_file_path)) process.should_terminate = should_terminate process.frames_to_export = frames_to_export process.current_frame = current_frame process.out_file_path = out_file_path self.exports.append(process)