Beispiel #1
0
    def __init__(
        self,
        reference_detection_controller,
        reference_location_storage,
        reference_edit_controller,
    ):
        self._reference_detection_controller = reference_detection_controller
        self._reference_location_storage = reference_location_storage
        self._reference_edit_controller = reference_edit_controller
        self.menu = ui.Growing_Menu("Reference Locations")
        self.menu.collapsed = True

        reference_detection_controller.add_observer(
            "on_detection_started", self._on_started_reference_detection)
Beispiel #2
0
    def init_gui(self):
        def open_close_window(new_state):
            if new_state:
                self.visualizer.open_window()
            else:
                self.visualizer.close_window()

        self.menu = ui.Growing_Menu('Binocular 3D gaze mapper')
        self.g_pool.sidebar.insert(3, self.menu)
        # self.menu.append(ui.Text_Input('last_gaze_distance',self))
        self.menu.append(
            ui.Switch('debug window',
                      setter=open_close_window,
                      getter=lambda: bool(self.visualizer.window)))
Beispiel #3
0
    def init_gui(self):
        # initialize the menu
        self.menu = ui.Scrolling_Menu('Gaze Polyline')
        self.g_pool.gui.append(self.menu)
        self.menu.append(ui.Button('Close',self.unset_alive))
        self.menu.append(ui.Slider('thickness',self,min=1,step=1,max=15,label='Line thickness'))

        color_menu = ui.Growing_Menu('Color')
        color_menu.collapsed = True
        color_menu.append(ui.Info_Text('Set RGB color component values.'))
        color_menu.append(ui.Slider('r',self,min=0.0,step=0.05,max=1.0,label='Red'))
        color_menu.append(ui.Slider('g',self,min=0.0,step=0.05,max=1.0,label='Green'))
        color_menu.append(ui.Slider('b',self,min=0.0,step=0.05,max=1.0,label='Blue'))
        self.menu.append(color_menu)
    def update_gui_markers(self):
        pass
        self.menu.elements[:] = []
        self.menu.append(
            ui.Info_Text(
                'The offline marker tracker will look for markers in the entire video. By default it uses surfaces defined in capture. You can change and add more surfaces here.'
            ))
        self.menu.append(
            ui.Info_Text(
                'Please note: Unlike the real-time marker detector the offline marker detector works with a fixed min_marker_perimeter of 20.'
            ))
        self.menu.append(ui.Button('Close', self.close))
        self.menu.append(
            ui.Selector('mode',
                        self,
                        label='Mode',
                        selection=[
                            "Show Markers and Frames", "Show marker IDs",
                            "Surface edit mode", "Show Heatmaps",
                            "Show Metrics"
                        ]))
        self.menu.append(
            ui.Info_Text(
                'To see heatmap or surface metrics visualizations, click (re)-calculate gaze distributions. Set "X size" and "Y size" for each surface to see heatmap visualizations.'
            ))
        self.menu.append(
            ui.Button("(Re)-calculate gaze distributions", self.recalculate))
        self.menu.append(
            ui.Button("Export gaze and surface data",
                      self.save_surface_statsics_to_file))
        self.menu.append(
            ui.Button("Add surface", lambda: self.add_surface('_')))
        for s in self.surfaces:
            idx = self.surfaces.index(s)
            s_menu = ui.Growing_Menu("Surface %s" % idx)
            s_menu.collapsed = True
            s_menu.append(ui.Text_Input('name', s))
            s_menu.append(ui.Text_Input('x', s.real_world_size,
                                        label='X size'))
            s_menu.append(ui.Text_Input('y', s.real_world_size,
                                        label='Y size'))
            s_menu.append(ui.Button('Open Debug Window', s.open_close_window))

            #closure to encapsulate idx
            def make_remove_s(i):
                return lambda: self.remove_surface(i)

            remove_s = make_remove_s(idx)
            s_menu.append(ui.Button('remove', remove_s))
            self.menu.append(s_menu)
Beispiel #5
0
    def init_gui(self):
        def close():
            self.alive = False

        help_str = "Synchonize time of Pupil Captures across the local network."
        self.menu = ui.Growing_Menu('Network Time Sync')
        self.menu.append(ui.Button('Close', close))
        self.menu.append(ui.Info_Text(help_str))
        help_str = "All pupil nodes of one group share a Master clock."
        self.menu.append(ui.Info_Text(help_str))
        self.menu.append(
            ui.Text_Input('node_name',
                          self,
                          label='Node Name',
                          setter=self.restart_discovery))
        self.menu.append(
            ui.Text_Input('sync_group',
                          self,
                          label='Sync Group',
                          setter=self.change_sync_group))

        def sync_status():
            if self.follower_service:
                return str(self.follower_service)
            else:
                return 'Clock Master'

        self.menu.append(
            ui.Text_Input('sync status',
                          getter=sync_status,
                          setter=lambda _: _,
                          label='Status'))

        def set_bias(bias):
            if bias < 0:
                bias = 0.
            self.base_bias = bias
            self.announce_clock_master_info()
            self.evaluate_leaderboard()

        help_str = "The clock service with the highest bias becomes clock master."
        self.menu.append(ui.Info_Text(help_str))
        self.menu.append(
            ui.Text_Input('base_bias',
                          self,
                          label='Master Bias',
                          setter=set_bias))
        self.menu.append(
            ui.Text_Input('leaderboard', self, label='Master Nodes in Group'))
        self.g_pool.sidebar.append(self.menu)
Beispiel #6
0
    def init_gui(self):
        def close():
            self.alive = False

        help_str = 'Pupil Remote using ZeroMQ REQ REP scheme.'
        self.menu = ui.Growing_Menu('Pupil Remote')
        self.menu.append(ui.Button('Close', close))
        self.menu.append(ui.Info_Text(help_str))
        self.menu.append(
            ui.Text_Input('address',
                          self,
                          setter=self.start_server,
                          label='Address'))
        self.g_pool.sidebar.append(self.menu)
    def init_gui(self):
        self.menu = ui.Growing_Menu('Surface Tracker')
        self.g_pool.sidebar.append(self.menu)

        self.button = ui.Thumb('running', self, label='Track', hotkey='t')
        self.button.on_color[:] = (.1, .2, 1., .8)
        self.g_pool.quickbar.append(self.button)
        self.add_button = ui.Thumb('add_surface',
                                   setter=self.add_surface,
                                   getter=lambda: False,
                                   label='Add surface',
                                   hotkey='a')
        self.g_pool.quickbar.append(self.add_button)
        self.update_gui_markers()
Beispiel #8
0
    def init_gui(self):
        menu_width = 400
        menu_height = 500
        x = random.random()
        y = random.random()
        x = int(x * (width - menu_width))
        y = int(y * (height - menu_height))

        self.menu = ui.Scrolling_Menu(unicode(self.sensor),
                                      size=(menu_width, menu_height),
                                      pos=(x, y))
        self.uvc_menu = ui.Growing_Menu("UVC Controls")
        self.gui.append(self.menu)
        self.update_control_menu()
    def __init__(self, detection_controller, general_settings, index_range_as_str):
        self._detection_controller = detection_controller
        self._general_settings = general_settings
        self._index_range_as_str = index_range_as_str

        self.menu = ui.Growing_Menu(self.menu_label)
        self.menu.collapsed = False

        detection_controller.add_observer(
            "on_detection_started", self._on_detection_started
        )
        detection_controller.add_observer(
            "on_detection_ended", self._on_detection_ended
        )
Beispiel #10
0
    def update_gui_markers(self):
        self.menu.elements[:] = []
        self.menu.append(
            ui.Info_Text(
                'This plugin detects and tracks fiducial markers visible in the scene. You can define surfaces using 1 or more marker visible within the world view by clicking *add surface*. You can edit defined surfaces by selecting *Surface edit mode*.'
            ))
        self.menu.append(
            ui.Switch('robust_detection', self, label='Robust detection'))
        self.menu.append(
            ui.Switch('invert_image', self, label='Use inverted markers'))
        self.menu.append(
            ui.Slider('min_marker_perimeter', self, step=1, min=10, max=100))
        self.menu.append(ui.Switch('locate_3d', self, label='3D localization'))
        self.menu.append(
            ui.Selector('mode',
                        self,
                        label="Mode",
                        selection=[
                            'Show Markers and Surfaces', 'Show marker IDs',
                            'Show Heatmaps'
                        ]))
        self.menu.append(
            ui.Button(
                "Add surface",
                lambda: self.add_surface('_'),
            ))

        for s in self.surfaces:
            idx = self.surfaces.index(s)
            s_menu = ui.Growing_Menu("Surface {}".format(idx))
            s_menu.collapsed = True
            s_menu.append(ui.Text_Input('name', s))
            s_menu.append(ui.Text_Input('x', s.real_world_size,
                                        label='X size'))
            s_menu.append(ui.Text_Input('y', s.real_world_size,
                                        label='Y size'))
            s_menu.append(
                ui.Text_Input('gaze_history_length',
                              s,
                              label='Gaze History Length [seconds]'))
            s_menu.append(ui.Button('Open Debug Window', s.open_close_window))

            #closure to encapsulate idx
            def make_remove_s(i):
                return lambda: self.remove_surface(i)

            remove_s = make_remove_s(idx)
            s_menu.append(ui.Button('remove', remove_s))
            self.menu.append(s_menu)
Beispiel #11
0
    def init_gui(self):
        self.menu = ui.Growing_Menu('Recorder')
        self.g_pool.sidebar.insert(3, self.menu)
        self.menu.append(
            ui.Info_Text(
                'Pupil recordings are saved like this: "path_to_recordings/recording_session_name/nnn" where "nnn" is an increasing number to avoid overwrites. You can use "/" in your session name to create subdirectories.'
            ))
        self.menu.append(
            ui.Info_Text(
                'Recordings are saved to "~/pupil_recordings". You can change the path here but note that invalid input will be ignored.'
            ))
        self.menu.append(
            ui.Text_Input('rec_dir',
                          self,
                          setter=self.set_rec_dir,
                          label='Path to recordings'))
        self.menu.append(
            ui.Text_Input('session_name',
                          self,
                          setter=self.set_session_name,
                          label='Recording session name'))
        self.menu.append(
            ui.Switch('show_info_menu',
                      self,
                      on_val=True,
                      off_val=False,
                      label='Request additional user info'))
        self.menu.append(
            ui.Info_Text(
                'Recording the raw eye video is optional. We use it for debugging.'
            ))
        self.menu.append(
            ui.Switch('record_eye',
                      self,
                      on_val=True,
                      off_val=False,
                      label='Record eye'))
        self.menu.append(
            ui.Selector('audio_src',
                        self,
                        selection=self.audio_devices_dict.keys()))

        self.button = ui.Thumb('running',
                               self,
                               setter=self.toggle,
                               label='Record',
                               hotkey='r')
        self.button.on_color[:] = (1, .0, .0, .8)
        self.g_pool.quickbar.insert(1, self.button)
Beispiel #12
0
    def update_gui_markers(self):
        self.menu.elements[:] = []
        self.menu.append(
            ui.Info_Text(
                "This plugin detects and tracks fiducial markers visible in the scene. You can define surfaces using 1 or more marker visible within the world view by clicking *add surface*. You can edit defined surfaces by selecting *Surface edit mode*."
            ))
        self.menu.append(
            ui.Switch("robust_detection", self, label="Robust detection"))
        self.menu.append(
            ui.Switch("invert_image", self, label="Use inverted markers"))
        self.menu.append(
            ui.Slider("min_marker_perimeter", self, step=1, min=30, max=100))
        self.menu.append(ui.Switch("locate_3d", self, label="3D localization"))
        self.menu.append(
            ui.Selector(
                "mode",
                self,
                label="Mode",
                selection=[
                    "Show Markers and Surfaces",
                    "Show marker IDs",
                    "Show Heatmaps",
                ],
            ))
        self.menu.append(
            ui.Button("Add surface", lambda: self.add_surface("_")))

        for s in self.surfaces:
            idx = self.surfaces.index(s)
            s_menu = ui.Growing_Menu("Surface {}".format(idx))
            s_menu.collapsed = True
            s_menu.append(ui.Text_Input("name", s))
            s_menu.append(ui.Text_Input("x", s.real_world_size,
                                        label="X size"))
            s_menu.append(ui.Text_Input("y", s.real_world_size,
                                        label="Y size"))
            s_menu.append(
                ui.Text_Input("gaze_history_length",
                              s,
                              label="Gaze History Length [seconds]"))
            s_menu.append(ui.Button("Open Debug Window", s.open_close_window))

            # closure to encapsulate idx
            def make_remove_s(i):
                return lambda: self.remove_surface(i)

            remove_s = make_remove_s(idx)
            s_menu.append(ui.Button("remove", remove_s))
            self.menu.append(s_menu)
Beispiel #13
0
    def _update_ui(self):
        self.menu.elements[:] = []
        self.menu.append(ui.Text_Input('source_dir', self, label='Recording Source Directory', setter=self.set_src_dir))
        self.menu.append(ui.Text_Input('destination_dir', self, label='Recording Destination Directory', setter=self.set_dest_dir))
        self.menu.append(ui.Button('start export', self.start))

        for idx, job in enumerate(self.exports[::-1]):
            submenu = ui.Growing_Menu("Export Job {}: '{}'".format(idx, job.out_file_path))
            progress_bar = ui.Slider('progress', getter=job.status, min=0, max=job.frames_to_export.value)
            progress_bar.read_only = True
            submenu.append(progress_bar)
            submenu.append(ui.Button('cancel', job.cancel))
            self.menu.append(submenu)
        if not self.exports:
            self.menu.append(ui.Info_Text('Please select a Recording Source directory from with to pull all recordings for export.'))
Beispiel #14
0
    def init_ui(self):
        self.add_menu()
        self.menu.label = 'Fixation Circle'
        self.menu.append(ui.Slider('radius',self,min=1,step=1,max=100,label='Radius'))
        self.menu.append(ui.Slider('thickness',self,min=1,step=1,max=15,label='Stroke width'))
        self.menu.append(ui.Switch('fill',self,label='Fill'))

        color_menu = ui.Growing_Menu('Color')
        color_menu.collapsed = True
        color_menu.append(ui.Info_Text('Set RGB color components and alpha (opacity) values.'))
        color_menu.append(ui.Slider('r',self,min=0.0,step=0.05,max=1.0,label='Red'))
        color_menu.append(ui.Slider('g',self,min=0.0,step=0.05,max=1.0,label='Green'))
        color_menu.append(ui.Slider('b',self,min=0.0,step=0.05,max=1.0,label='Blue'))
        color_menu.append(ui.Slider('a',self,min=0.0,step=0.05,max=1.0,label='Alpha'))
        self.menu.append(color_menu)
Beispiel #15
0
    def _update_ui(self):
        del self.menu.elements[:]
        self.menu.append(ui.Info_Text('Supply export video recording name. The export will be in the recording dir. If you give a path the export will end up there instead.'))
        self.menu.append(ui.Text_Input('rec_name',self,label='export name'))
        self.menu.append(ui.Info_Text('Select your export frame range using the trim marks in the seek bar. This will affect all exporting plugins.'))
        self.menu.append(ui.Text_Input('in_mark',getter=self.g_pool.seek_control.get_trim_range_string,setter=self.g_pool.seek_control.set_trim_range_string,label='frame range to export'))
        self.menu.append(ui.Info_Text("Press the export button or type 'e' to start the export."))

        for job in self.exports[::-1]:
            submenu = ui.Growing_Menu(job.out_file_path)
            progress_bar = ui.Slider('progress', getter=job.status, min=0, max=job.frames_to_export.value)
            progress_bar.read_only = True
            submenu.append(progress_bar)
            submenu.append(ui.Button('cancel',job.cancel))
            self.menu.append(submenu)
    def init_gui(self):
        super().init_gui()
        self.monitor_idx = 0
        self.monitor_names = [glfwGetMonitorName(m) for m in glfwGetMonitors()]

        #primary_monitor = glfwGetPrimaryMonitor()
        self.info = ui.Info_Text("Calibrate gaze parameters using a screen based animation.")
        self.g_pool.calibration_menu.append(self.info)

        self.menu = ui.Growing_Menu('Controls')
        self.g_pool.calibration_menu.append(self.menu)
        self.menu.append(ui.Selector('monitor_idx',self,selection = range(len(self.monitor_names)),labels=self.monitor_names,label='Monitor'))
        self.menu.append(ui.Switch('fullscreen',self,label='Use fullscreen'))
        self.menu.append(ui.Slider('marker_scale',self,step=0.1,min=0.5,max=2.0,label='Marker size'))
        self.menu.append(ui.Slider('sample_duration',self,step=1,min=10,max=100,label='Sample duration'))
Beispiel #17
0
    def update_gui_markers(self):
        self.menu.elements[:] = []
        self.menu.append(ui.Button('Close', self.close))
        self.menu.append(
            ui.Info_Text(
                'This plugin detects and tracks fiducial markers visible in the scene. You can define surfaces using 1 or more marker visible within the world view by clicking *add surface*. You can edit defined surfaces by selecting *Surface edit mode*.'
            ))
        self.menu.append(
            ui.Switch('robust_detection', self, label='Robust detection'))
        self.menu.append(
            ui.Slider('min_marker_perimeter', self, step=1, min=10, max=80))
        self.menu.append(ui.Switch('locate_3d', self, label='3D localization'))
        self.menu.append(
            ui.Selector('mode',
                        self,
                        label="Mode",
                        selection=[
                            'Show markers and frames', 'Show marker IDs',
                            'Surface edit mode'
                        ]))
        self.menu.append(
            ui.Button(
                "Add surface",
                lambda: self.add_surface('_'),
            ))

        # disable locate_3d if camera intrinsics don't exist
        if self.camera_intrinsics is None:
            self.menu.elements[4].read_only = True

        for s in self.surfaces:
            idx = self.surfaces.index(s)

            s_menu = ui.Growing_Menu("Surface %s" % idx)
            s_menu.collapsed = True
            s_menu.append(ui.Text_Input('name', s, label='Name'))
            #     self._bar.add_var("%s_markers"%i,create_string_buffer(512), getter=s.atb_marker_status,group=str(i),label='found/registered markers' )
            s_menu.append(ui.Text_Input('x', s.real_world_size, 'x_scale'))
            s_menu.append(ui.Text_Input('y', s.real_world_size, 'y_scale'))
            s_menu.append(ui.Button('Open debug window', s.open_close_window))

            #closure to encapsulate idx
            def make_remove_s(i):
                return lambda: self.remove_surface(i)

            remove_s = make_remove_s(idx)
            s_menu.append(ui.Button('Remove', remove_s))
            self.menu.append(s_menu)
Beispiel #18
0
    def init_gui(self):
        if self.g_pool.app == 'capture':
            self.menu = ui.Growing_Menu("My Broadcast Server")
            self.g_pool.sidebar.append(self.menu)
        elif self.g_pool.app == 'player':
            self.menu = ui.Scrolling_Menu("My Broadcast Server")
            self.g_pool.gui.append(self.menu)

        self.menu.append(ui.Button('Close', self.close))
        help_str = "Pupil Message server: Using ZMQ and the *Publish-Subscribe* scheme"
        self.menu.append(ui.Info_Text(help_str))
        self.menu.append(
            ui.Text_Input('address',
                          self,
                          setter=self.set_server,
                          label='Address'))
Beispiel #19
0
    def init_gui(self):

        monitor_names = [glfwGetMonitorName(m) for m in glfwGetMonitors()]
        #primary_monitor = glfwGetPrimaryMonitor()
        self.info = ui.Info_Text("Estimate Camera intrinsics of the world camera. Using an 11x9 asymmetrical circle grid. Click 'C' to capture a pattern.")
        self.g_pool.calibration_menu.append(self.info)

        self.menu = ui.Growing_Menu('Controls')
        self.menu.append(ui.Button('show Pattern',self.open_window))
        self.menu.append(ui.Selector('monitor_idx',self,selection = range(len(monitor_names)),labels=monitor_names,label='Monitor'))
        self.menu.append(ui.Switch('fullscreen',self,label='Use Fullscreen'))
        self.g_pool.calibration_menu.append(self.menu)

        self.button = ui.Thumb('collect_new',self,setter=self.advance,label='Capture',hotkey='c')
        self.button.on_color[:] = (.3,.2,1.,.9)
        self.g_pool.quickbar.insert(0,self.button)
Beispiel #20
0
    def init_gui(self,sidebar):
        self.menu = ui.Growing_Menu('Pupil Detector')
        self.info = ui.Info_Text("Switch to the algorithm display mode to see a visualization of pupil detection parameters overlaid on the eye video. "\
                                +"Adjust the pupil intensity range so that the pupil is fully overlaid with blue. "\
                                +"Adjust the pupil min and pupil max ranges (red circles) so that the detected pupil size (green circle) is within the bounds.")
        self.menu.append(self.info)
        self.menu.append(ui.Switch('coarse_detection',self,label='Use coarse detection'))
        self.menu.append(ui.Slider('intensity_range',self,label='Pupil intensity range',min=0,max=60,step=1))
        self.menu.append(ui.Slider('pupil_min',self,label='Pupil min',min=1,max=250,step=1))
        self.menu.append(ui.Slider('pupil_max',self,label='Pupil max',min=50,max=400,step=1))
        self.menu.append(ui.Button('Open debug window',self.toggle_window))

        # self.advanced_controls_menu = ui.Growing_Menu('Advanced Controls')
        # self.advanced_controls_menu.append(ui.Slider('min_contour_size',self,label='Contour min length',min=1,max=200,step=1))
        # self.menu.append(self.advanced_controls_menu)
        sidebar.append(self.menu)
Beispiel #21
0
    def init_gui(self):
        # initialize the menu
        self.menu = ui.Scrolling_Menu('Gaze Cross')
        self.g_pool.gui.append(self.menu)
        self.menu.append(ui.Button('Close',self.unset_alive))
        self.menu.append(ui.Slider('inner',self,min=0,step=10,max=200,label='Inner Offset Length'))
        self.menu.append(ui.Slider('outer',self,min=0,step=10,max=2000,label='Outer Length'))
        self.menu.append(ui.Slider('thickness',self,min=1,step=1,max=15,label='Stroke width'))

        color_menu = ui.Growing_Menu('Color')
        color_menu.collapsed = True
        color_menu.append(ui.Info_Text('Set RGB color component values.'))
        color_menu.append(ui.Slider('r',self,min=0.0,step=0.05,max=1.0,label='Red'))
        color_menu.append(ui.Slider('g',self,min=0.0,step=0.05,max=1.0,label='Green'))
        color_menu.append(ui.Slider('b',self,min=0.0,step=0.05,max=1.0,label='Blue'))
        self.menu.append(color_menu)
    def init_gui(self):

        self.info = ui.Info_Text(
            "Calibrate gaze parameters using a handheld marker.")
        self.g_pool.calibration_menu.append(self.info)

        self.menu = ui.Growing_Menu('Controls')
        self.g_pool.calibration_menu.append(self.menu)

        self.button = ui.Thumb('active',
                               self,
                               setter=self.toggle,
                               label='Calibrate',
                               hotkey='c')
        self.button.on_color[:] = (.3, .2, 1., .9)
        self.g_pool.quickbar.insert(0, self.button)
Beispiel #23
0
    def _update_gui(self):
        self.menu.elements[:] = []
        self.menu.append(ui.Button('Close',self.unset_alive))
        self.menu.append(ui.Info_Text('Supply export video recording name. The export will be in the recording dir. If you give a path the export will end up there instead.'))
        self.menu.append(ui.Text_Input('rec_name',self,label='export name'))
        self.menu.append(ui.Info_Text('Select your export frame range using the trim marks in the seek bar.'))
        self.menu.append(ui.Text_Input('in_mark',getter=self.g_pool.trim_marks.get_string,setter=self.g_pool.trim_marks.set_string,label='frame range to export'))
        self.menu.append(ui.Button('new export',self.add_export))

        for job in self.exports[::-1]:
            submenu = ui.Growing_Menu(job.out_file_path)
            progress_bar = ui.Slider('progress', getter=job.status, min=0, max=job.frames_to_export.value)
            progress_bar.read_only = True
            submenu.append(progress_bar)
            submenu.append(ui.Button('cancel',job.cancel))
            self.menu.append(submenu)
Beispiel #24
0
    def init_gui(self):
        #lets make a menu entry in the sidebar
        self.menu = ui.Growing_Menu('My Plugin')
        self.g_pool.sidebar.append(self.menu)

        #add a button to close the plugin
        self.menu.append(ui.Button('close Example_Plugin', self.close))

        #add a button to invoke event capture
        self.button = ui.Thumb('event',
                               self,
                               setter=self.add_event,
                               getter=lambda: True,
                               label='Event Capture',
                               hotkey='e')
        self.button.on_color[:] = (1, .0, .0, .8)
        self.g_pool.quickbar.insert(1, self.button)
Beispiel #25
0
    def update_gui_markers(self):
        def close():
            self.alive = False

        self.menu.elements[:] = []
        self.menu.append(ui.Button('Close', close))
        self.menu.append(
            ui.Info_Text(
                'The offline screen tracker will look for a screen for each frame of the video. By default it uses surfaces defined in capture. You can change and add more surfaces here.'
            ))

        self.menu.append(
            ui.Info_Text(
                'Before starting, you must update the screen detector cache:'))
        self.menu.append(ui.Button("Update Cache", self.update_cache_hack))

        self.menu.append(
            ui.Info_Text(
                'Then you can add a screen. Move to a frame where the screen was detected (in blue) then press the add screen surface button.'
            ))
        self.menu.append(
            ui.Button("Add screen surface", lambda: self.add_surface()))

        self.menu.append(
            ui.Info_Text(
                "Press the export button to export data from the current section."
            ))

        for s in self.surfaces:
            idx = self.surfaces.index(s)
            s_menu = ui.Growing_Menu("Surface %s" % idx)
            s_menu.collapsed = True
            s_menu.append(ui.Text_Input('name', s))
            s_menu.append(ui.Text_Input('x', s.real_world_size,
                                        label='X size'))
            s_menu.append(ui.Text_Input('y', s.real_world_size,
                                        label='Y size'))
            s_menu.append(ui.Button('Open Debug Window', s.open_close_window))

            #closure to encapsulate idx
            def make_remove_s(i):
                return lambda: self.remove_surface(i)

            remove_s = make_remove_s(idx)
            s_menu.append(ui.Button('remove', remove_s))
            self.menu.append(s_menu)
Beispiel #26
0
    def __init__(
        self,
        optimization_controller,
        general_settings,
        optimization_storage,
        index_range_as_str,
    ):
        self._optimization_controller = optimization_controller
        self._general_settings = general_settings
        self._optimization_storage = optimization_storage
        self._index_range_as_str = index_range_as_str

        self.menu = ui.Growing_Menu(self.menu_label)
        self.menu.collapsed = False

        optimization_controller.add_observer("on_optimization_completed",
                                             self._on_optimization_completed)
Beispiel #27
0
    def open_info_menu(self):
        self.info_menu = ui.Growing_Menu('additional Recording Info',size=(300,300),pos=(300,300))
        self.info_menu.configuration = self.info_menu_conf

        def populate_info_menu():
            self.info_menu.elements[:-2] = []
            for name in self.user_info.iterkeys():
                self.info_menu.insert(0,ui.Text_Input(name,self.user_info))

        def set_user_info(new_string):
            self.user_info = new_string
            populate_info_menu()

        populate_info_menu()
        self.info_menu.append(ui.Info_Text('Use the *user info* field to add/remove additional fields and their values. The format must be a valid Python dictionary. For example -- {"key":"value"}. You can add as many fields as you require. Your custom fields will be saved for your next session.'))
        self.info_menu.append(ui.Text_Input('user_info',self,setter=set_user_info,label="User info"))
        self.g_pool.gui.append(self.info_menu)
Beispiel #28
0
    def append_section_menu(self, sec):
        section_menu = ui.Growing_Menu('Gaze Section')
        section_menu.color = RGBA(*sec['color'])

        def make_validate_fn(sec, key):
            def validate(input_obj):
                try:

                    assert type(input_obj) in (tuple,list)
                    assert type(input_obj[0]) is int
                    assert type(input_obj[1]) is int
                    assert 0 <= input_obj[0] <= input_obj[1] <=len(self.g_pool.timestamps)
                except:
                    pass
                else:
                    sec[key] = input_obj
            return validate

        def make_calibrate_fn(sec):
            def calibrate():
                self.calibrate_section(sec)
            return calibrate

        def make_remove_fn(sec):
            def remove():
                del self.menu[self.sections.index(sec)-len(self.sections)]
                del self.sections[self.sections.index(sec)]
                self.correlate_and_publish()

            return remove

        section_menu.append(ui.Selector('calibration_method', sec,
                                        label="Calibration Method",
                                        labels=['Circle Marker', 'Natural Features'],
                                        selection=['circle_marker', 'natural_features']))
        section_menu.append(ui.Selector('mapping_method', sec, label='Calibration Mode',selection=['2d','3d']))
        section_menu.append(ui.Text_Input('status', sec, label='Calbiration Status', setter=lambda _: _))
        section_menu[-1].read_only = True
        section_menu.append(ui.Text_Input('calibration_range', sec, label='Calibration range',
                                          setter=make_validate_fn(sec, 'calibration_range')))
        section_menu.append(ui.Text_Input('mapping_range', sec, label='Mapping range',
                                          setter=make_validate_fn(sec, 'mapping_range')))
        section_menu.append(ui.Button('Recalibrate', make_calibrate_fn(sec)))
        section_menu.append(ui.Button('Remove section', make_remove_fn(sec)))
        self.menu.append(section_menu)
Beispiel #29
0
    def update_gui_markers(self):
        def close():
            self.alive = False

        self.menu.elements[:] = []
        self.menu.append(ui.Button('Close', close))
        self.menu.append(
            ui.Info_Text(
                'This plugin detects the outmost screen visible in the scene. Ideal screen is white rect in a black backgroud. You can define a surface using 1 visible screen within the world view by clicking *add surface*.'
            ))
        self.menu.append(
            ui.Switch('robust_detection', self, label='Robust detection'))
        self.menu.append(
            ui.Slider('min_marker_perimeter', self, step=1, min=10, max=500))
        self.menu.append(ui.Switch('locate_3d', self, label='3D localization'))
        self.menu.append(
            ui.Selector(
                'mode',
                self,
                label="Mode",
                selection=['Show Markers and Surfaces', 'Show marker IDs']))
        self.menu.append(
            ui.Button(
                "Add surface",
                lambda: self.add_surface('_'),
            ))

        for s in self.surfaces:
            idx = self.surfaces.index(s)
            s_menu = ui.Growing_Menu("Surface %s" % idx)
            s_menu.collapsed = True
            s_menu.append(ui.Text_Input('name', s))
            s_menu.append(ui.Text_Input('x', s.real_world_size,
                                        label='X size'))
            s_menu.append(ui.Text_Input('y', s.real_world_size,
                                        label='Y size'))
            s_menu.append(ui.Button('Open Debug Window', s.open_close_window))

            #closure to encapsulate idx
            def make_remove_s(i):
                return lambda: self.remove_surface(i)

            remove_s = make_remove_s(idx)
            s_menu.append(ui.Button('remove', remove_s))
            self.menu.append(s_menu)
Beispiel #30
0
    def re_build_ndsi_menu(self):
        del self.menu[1:]
        from pyglui import ui

        ui_elements = []
        ui_elements.append(ui.Info_Text("Remote Pupil Mobile sources"))
        ui_elements.append(
            ui.Info_Text("Pupil Mobile Commspec v{}".format(__protocol_version__))
        )

        host_sel, host_sel_labels = self.host_selection_list()
        ui_elements.append(
            ui.Selector(
                "selected_host",
                self,
                selection=host_sel,
                labels=host_sel_labels,
                setter=self.view_host,
                label="Remote host",
            )
        )

        self.menu.extend(ui_elements)
        self.add_auto_select_button()

        if not self.selected_host:
            return
        ui_elements = []

        host_menu = ui.Growing_Menu("Remote Host Information")
        ui_elements.append(host_menu)

        src_sel, src_sel_labels = self.source_selection_list()
        host_menu.append(
            ui.Selector(
                "selected_source",
                selection=src_sel,
                labels=src_sel_labels,
                getter=lambda: None,
                setter=self.activate,
                label="Source",
            )
        )

        self.menu.extend(ui_elements)