Warning: session_start(): open(/var/lib/php/sessions/sess_cpauonhtactjl5019n53qlsh6l, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
abstract sclass ChessOCR_DynTestPieceRecognizers extends DynSingleFunctionWithPrintLog {
replace Recognizer with ChessPieceRecognizer.
S scoreModule;
transient L results = syncList();
new Best best;
transient new L images;
transient JProgressBar progressBar;
transient O onRecognition; // voidfunc(Recognizer, TestImage, Pair out)
// result for recognizer
srecord noeq Result(
Recognizer recognizer,
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 + ": " + piece; }
}
void doIt {
prepare();
results.clear();
dm_call(scoreModule, 'clear);
testRecognizers();
}
// override me
void testRecognizers {
new ChessPieceRecognizer rec;
rec.version = 2;
rec.load();
testRecognizer(rec);
testRecognizer(chessOCR_defaultPieceRecognizer());
}
void prepare {
if (empty(images)) loadImages();
if (!dm_moduleExists(scoreModule))
setField(scoreModule := dm_showNewModule("#1024827/ScoreMatrix"));
else
dm_activateModule(scoreModule);
}
Result scoreRecognizer(S name, Recognizer rec) {
Result result = new(rec, 0, new LinkedHashMap);
try {
new Scorer scorer;
for (TestImage img : images) {
Pair out = rec.recognize(img.img);
callF(onRecognition, rec, img, out);
bool ok = eqic(pairA(out), img.piece);
scorer.add(ok);
result.individualScores.put(new TestResult(img, out.a, out.b), ok ? 1.0 : 0.0);
}
print(scorer);
result.score = scorer.score();
} catch print e {
print("RECOGNIZER TOTAL FAIL");
}
ret result;
}
void loadImages {
for (unpair S piece, BufferedImage img :
//chessOCR_squareImagesCollectorFromAGIBlue().allImages()
map(p -> pair(p.b, loadImage2(p.a)), chessPieceImagesFromAGIBlue())
) {
images.add(new TestImage(md5OfBufferedImage(img), img, piece));
}
print("Loading done");
}
start { setFunctionName("Run tests"); }
visual centerAndSouthWithMargin(super, withMargin(progressBar = jProgressBarWithText()));
// API
void testRecognizer(Recognizer rec) {
S name = str(rec);
prepare();
long time = sysNow();
Result r = scoreRecognizer(name, rec);
time = sysNow()-time;
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.recognizer, r.score, renderElapsedTimePleasantly(time), r.individualScores));
}
}