!7 srecord Entry(RGB color, double maxDistance) {} cmodule LearnActiveTab > DynSingleFunctionWithPrintLog { LPair scaledImages; void doIt { LPair data = gatherMarkedThingInImages(listImageFiles( //ai_browserTabsTrainingDataDir() aiImageAlbumDir() ), "Active tab"); pnlStruct(data); int gridSize = 4; scaledImages = new L; for (Pair p : data) { BufferedImage img = loadImage2(p.a); RGBImage rgb = RGBImage(scaleImageWithFactor(1.0/gridSize, img)); add(scaledImages, pair(rgb, scaleRect(p.b, 1.0/gridSize))); } RandomAndVary_Record rav = new(Entry, color := new RandomAndVary_RGB, maxDistance := new RandomAndVary_Double); Entry e = pairA(racerOptimize(rav, f score, minRuntimeUnless100 := 10.0)); print(e); F1 pred = CloseToColorPredicate(e.color.asInt(), e.maxDistance); showImage(mergeImagesVertically(map(pairsA(scaledImages), img -> renderColorPredicate(pred, img)))); } double score(Entry e) { ret scoreRectDetectorByDistanceToColor(e.color, e.maxDistance, scaledImages); } }