!7 replace Finder with F1. sbool withNoFace = false; p-exp { int w = 32; int limit = 95; // search for smallest finder with at least 95% accuracy File dir = ai_faceFinderDir(); if (withNoFace) dir = newFile(dir, "with-no-face"); L marked = markedFaces_scaledToWidth(w, +withNoFace); FaceFinderByPictures1 finder = new(w, nonNulls(rgbImageAndRects_getClip(marked))); saveTextFileWithBackupVerbose(newFile(dir, "full-finder.struct"), struct(finder)); new Best best; video_scoreRect_step(best, marked, finder); //showImage(mergeRGBImagesAndRects(callFaceFinder(finder, rgbImageAndRects_images(marked)))); new Best best3; while (nempty(finder.pictures) && best.score() >= limit) { // Make finder smaller by removing pictures new Best best2; for (int i = 0; i < l(finder.pictures); i++) { FaceFinderByPictures1 newFinder = shallowClone(finder); newFinder.pictures = listWithoutIndex(newFinder.pictures, i); //print("Took out image " + (i+1) + "/" + l(finder.pictures)); video_scoreRect_step(best2, marked, newFinder, print := false); copyBestIfAtLeast(best2, best3, limit); } finder = (FaceFinderByPictures1) best2!; print("Got new finder with score " + best2.score() + ": " + finder); } saveTextFileWithBackupVerbose(newFile(dir, "smallest-finder-over-" + limit + ".struct"), struct(best3!)); }