!7 cmodule LearnActiveTab > DynSingleFunctionWithPrintLog { LPair scaledImages; void doIt { // load scaled down test images LPair data = gatherMarkedThingInImages(listImageFiles(aiImageAlbumDir()), "Active tab"); pnlStruct(data); int gridSize = 4; scaledImages = scaleDownTestImagesWithRect(gridSize, data); // make "random & vary" module RandomAndVary_Record rav = new(CloseToColorPredicate, color := new RandomAndVary_RGBInt, maxDistance := new RandomAndVary_Double); // optimize CloseToColorPredicate e = pairA(racerOptimize(rav, func(CloseToColorPredicate e) -> double { scoreColorPredicateByRect(e, scaledImages) }, minRuntimeUnless100 := 10.0)); print(e); showImage(renderColorPredicateOnTestImages(e, pairsA(scaledImages)); // use centroid to detect rects for (Pair p : scaledImages) { DoublePt pt = centroidForColorPredicate(e, p.a); if (pt == null) continue with print("No result"); double dist = ptDistance(pt, centerOfRect(p.b)); print(pt + " / " + centerOfRect(p.b)); print("Error: " + percentRatio(dist, hypotenuse(p.a.getWidth(), p.a.getHeight())) + "%"); } } }