+ if config.config['ml_quick_label_skip_where_model_agrees']:
+ model_says = helper.ask_current_model_about_example(image, features, filtered_lines)
+ if model_says and label:
+ if model_says[0] == int(label):
+ logger.warning(
+ '%s/%s: Model agrees with current label (%s), skipping.',
+ image,
+ features,
+ label,
+ )
+ continue
+
+ print(f'{image}/{features}: The model disagrees with the current label.')
+ print(f' ...model says {model_says[0]} with probability {model_says[1]}.')
+ print(f' ...the example is currently labeled {label}')
+
+ filtered_images.append((image, features))
+ return filtered_images
+
+
+def _make_prompt(
+ helper: QuickLabelHelper,
+ cursor: int,
+ filtered_images: List[Tuple[str, str]],
+ image: str,
+ features: str,
+ labeled_features: Dict[Tuple[str, str], str],
+) -> None:
+ label_label = helper.get_label_feature()
+ filtered_lines = []
+ label = labeled_features.get((image, features), None)
+ with open(features, 'r') as rf:
+ lines = rf.readlines()
+ for line in lines:
+ line = line[:-1]
+ if len(line) == 0:
+ continue
+ if not line.startswith(label_label):
+ filtered_lines.append(line)
+ else:
+ assert not label
+ label = line
+
+ # Prompt...
+ helper.render_example(image, features, filtered_lines)
+ print(f'{cursor}/{len(filtered_images)} ({cursor/len(filtered_images)*100.0:.1f}%) | ', end='')
+ print(f'{ansi.bold()}{image} / {features}{ansi.reset()}:')
+ print(f' ...{len(labeled_features)} currently unsaved labels ("W" to save).')
+ if label:
+ if (image, features) in labeled_features:
+ print(f' ...This example is labeled but not yet saved: {label}')
+ else:
+ print(f' ...This example is already labeled on disk: {label}')
+ else:
+ print(' ...This example is currently unlabeled')
+ guess = helper.ask_current_model_about_example(image, features, filtered_lines)
+ if guess:
+ print(f' ...The ML Model says {guess}')
+ print()
+
+
+def _write_labeled_features(
+ helper: QuickLabelHelper,
+ labeled_features: Dict[Tuple[str, str], str],
+ skip_list: Set[str],
+) -> None:
+ label_label = helper.get_label_feature()
+ for image_features, label in labeled_features.items():
+ image = image_features[0]
+ features = image_features[1]