def _draw_control_pane(self, pane): pane.data[:] = to_255(self.settings.window_background) with self.state.lock: layer_idx = self.state.layer_idx loc = self.settings.caffevis_control_loc[::-1] # Reverse to OpenCV c,r order strings = [] defaults = {'face': getattr(cv2, self.settings.caffevis_control_face), 'fsize': self.settings.caffevis_control_fsize, 'clr': to_255(self.settings.caffevis_control_clr), 'thick': self.settings.caffevis_control_thick} for ii in range(len(self.layer_print_names)): fs = FormattedString(self.layer_print_names[ii], defaults) this_layer = self.state._layers[ii] if self.state.backprop_selection_frozen and this_layer == self.state.backprop_layer: fs.clr = to_255(self.settings.caffevis_control_clr_bp) fs.thick = self.settings.caffevis_control_thick_bp if this_layer == self.state.layer: if self.state.cursor_area == 'top': fs.clr = to_255(self.settings.caffevis_control_clr_cursor) fs.thick = self.settings.caffevis_control_thick_cursor else: if not (self.state.backprop_selection_frozen and this_layer == self.state.backprop_layer): fs.clr = to_255(self.settings.caffevis_control_clr_selected) fs.thick = self.settings.caffevis_control_thick_selected strings.append(fs) cv2_typeset_text(pane.data, strings, loc, line_spacing = self.settings.caffevis_control_line_spacing, wrap = True)
def _draw_input_label_pane(self, pane, label): defaults = { 'face': getattr(cv2, self.settings.kerasvis_class_face), 'fsize': self.settings.kerasvis_class_fsize, 'clr': to_255(self.settings.kerasvis_class_clr_0), 'thick': self.settings.kerasvis_class_thick } loc = self.settings.kerasvis_class_loc[:: -1] # Reverse to OpenCV c,r order clr_0 = to_255(self.settings.kerasvis_class_clr_0) clr_1 = to_255(self.settings.kerasvis_class_clr_1) strings = [] fs = FormattedString('Actual Label:', defaults) fs.clr = clr_0 strings.append([fs]) if hasattr(self, 'labels') and self.labels is not None: lbl = self.labels[np.argmax(label)] else: lbl = np.argmax(label) fs = FormattedString(' {}'.format(lbl), defaults) fs.clr = clr_1 strings.append([fs]) pane.data[:] = to_255(self.settings.window_background) cv2_typeset_text( pane.data, strings, loc, line_spacing=self.settings.kerasvis_class_line_spacing)
def _draw_prob_labels_pane(self, pane): '''Adds text label annotation atop the given pane.''' if not self.labels or not self.state.show_label_predictions or not self.settings.caffevis_prob_layer: return #pane.data[:] = to_255(self.settings.window_background) defaults = {'face': getattr(cv2, self.settings.caffevis_class_face), 'fsize': self.settings.caffevis_class_fsize, 'clr': to_255(self.settings.caffevis_class_clr_0), 'thick': self.settings.caffevis_class_thick} loc = self.settings.caffevis_class_loc[::-1] # Reverse to OpenCV c,r order clr_0 = to_255(self.settings.caffevis_class_clr_0) clr_1 = to_255(self.settings.caffevis_class_clr_1) probs_flat = self.net.blobs[self.settings.caffevis_prob_layer].data.flatten() top_5 = probs_flat.argsort()[-1:-6:-1] strings = [] pmax = probs_flat[top_5[0]] for idx in top_5: prob = probs_flat[idx] text = '%.2f %s' % (prob, self.labels[idx]) fs = FormattedString(text, defaults) #fs.clr = tuple([clr_1[ii]*prob/pmax + clr_0[ii]*(1-prob/pmax) for ii in range(3)]) fs.clr = tuple([max(0,min(255,clr_1[ii]*prob + clr_0[ii]*(1-prob))) for ii in range(3)]) strings.append([fs]) # Line contains just fs cv2_typeset_text(pane.data, strings, loc, line_spacing = self.settings.caffevis_class_line_spacing)