!7 cmodule TestAutoRecognizer > DynSingleFunctionWithPrintLog { replace Recognizer with ChessPieceRecognizer. S scoreModule; transient L results = syncList(); new Best best; transient ChessOCR_SquareImagesCollector images; transient JProgressBar progressBar; // result for segmenter srecord noeq Result( S candidateName, Recognizer segmenter, double score, Map individualScores) {} // individual test result srecord noeq TestResult( TestImage test, S pieceFound, double confidence ) {} srecord noeq TestImage(S caseName, BufferedImage img, S piece) { toString { ret caseName; } } bool spaceToSpare() { ret toMB(dataSize) < maxMBs; } void doIt { prepare(); results.clear(); dm_call(scoreModule, 'clear); Cl presets = agiBlue_chessBoardRecognizerPresetNames(); for ping (S preset : iterateUpdatingProgressBar(progressBar, presets)) testRecognizer(preset, parameterizedRecognizerFromAGIBlue(preset)); } void prepare { if (empty(images)) loadImages(); if (!dm_moduleExists(scoreModule)) setField(scoreModule := dm_showNewModule("#1024787/ScoreMatrix")); else dm_activateModule(scoreModule); } Result scoreRecognizer(S name, Recognizer rec) { Result result = new(name, rec, 0, new LinkedHashMap); try { new Scorer scorer; for (TestImage img : images) { Pair out = rec.recognize(img.img); Rect r = first(out); double tolerance = imageDiameter(img.img)/48; double score2 = video_scoreRect_score(img.boardLocation, r, tolerance); scorer.add(eq(out.a, ); result.individualScores.put(new TestResult(img, out), score2); } print(scorer); result.score = scorer.score(); } catch print e { print("RECOGNIZER TOTAL FAIL"); } ret result; } void loadImages { for (S piece, BufferedImage img : unpair chessOCR_squareImagesCollectorFromAGIBlue().allImages()) { images.add(new TestImage(md5OfBufferedImage(img), img, location)); dataSize += bufferedImageDataSize(img); print("Have " + nImages(images) + ", data size: " + toM(dataSize) + " MB"); } } print("Loading done"); } start { setFunctionName("Run tests"); } visual centerAndSouthWithMargin(super, withMargin(progressBar = jProgressBarWithText())); // API void testRecognizer(S name, Recognizer seg) { prepare(); Result r = scoreRecognizer(name, seg); print("Score for " + name + ": " + r.score); results.add(r); if (best.put(name, r.score)) print("NEW BEST!"); change(); dm_call(scoreModule, 'add, dm_call(scoreModule, 'newEntry, r.segmenterName, r.score, r.individualScores)); } }