Runs the demo
| 42 | |
| 43 | |
| 44 | class LiveVis(object): |
| 45 | '''Runs the demo''' |
| 46 | |
| 47 | def __init__(self, settings): |
| 48 | self.settings = settings |
| 49 | self.bindings = bindings |
| 50 | |
| 51 | self.app_classes = OrderedDict() |
| 52 | self.apps = OrderedDict() |
| 53 | |
| 54 | for module_path, app_name in settings.installed_apps: |
| 55 | module = importlib.import_module(module_path) |
| 56 | print 'got module', module |
| 57 | app_class = getattr(module, app_name) |
| 58 | print 'got app', app_class |
| 59 | self.app_classes[app_name] = app_class |
| 60 | |
| 61 | for app_name, app_class in self.app_classes.iteritems(): |
| 62 | app = app_class(settings, self.bindings) |
| 63 | self.apps[app_name] = app |
| 64 | self.help_mode = False |
| 65 | self.window_name = 'Deep Visualization Toolbox' |
| 66 | self.quit = False |
| 67 | self.debug_level = 0 |
| 68 | |
| 69 | self.debug_pane_defaults = { |
| 70 | 'face': getattr(cv2, self.settings.help_face), |
| 71 | 'fsize': self.settings.help_fsize, |
| 72 | 'clr': pane_debug_clr, |
| 73 | 'thick': self.settings.help_thick |
| 74 | } |
| 75 | self.help_pane_defaults = { |
| 76 | 'face': getattr(cv2, self.settings.help_face), |
| 77 | 'fsize': self.settings.help_fsize, |
| 78 | 'clr': to_255(self.settings.help_clr), |
| 79 | 'thick': self.settings.help_thick |
| 80 | } |
| 81 | |
| 82 | |
| 83 | def init_window(self): |
| 84 | cv2.namedWindow(self.window_name) |
| 85 | max_i, max_j = 0, 0 |
| 86 | if len(self.settings.window_panes) == 0: |
| 87 | raise ImproperlyConfigured('settings.window_panes is empty.') |
| 88 | self.panes = OrderedDict() |
| 89 | for pane_name, pane_dimensions in self.settings.window_panes: |
| 90 | if len(pane_dimensions) != 4: |
| 91 | raise ImproperlyConfigured('pane dimensions should be a tuple of length 4, but it is "%s"' % repr(pane_dimensions)) |
| 92 | i_begin, j_begin, i_size, j_size = pane_dimensions |
| 93 | max_i = max(max_i, i_begin + i_size) |
| 94 | max_j = max(max_j, j_begin + j_size) |
| 95 | if pane_name in self.panes: |
| 96 | raise Exception('Duplicate pane name in settings: %s' % pane_name) |
| 97 | self.panes[pane_name] = Pane(i_begin, j_begin, i_size, j_size) |
| 98 | self.buffer_height = max_i |
| 99 | self.buffer_width = max_j |
| 100 | |
| 101 | self.window_buffer = np.tile(np.array(np.array(self.settings.window_background) * 255, 'uint8'), |