Warning: session_start(): open(/var/lib/php/sessions/sess_ct6kliot11g1i0e2lhmh2ud3tv, 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
!7
cmodule TrainChessRecognizer > DynSingleFunctionWithPrintLog {
transient Map segmenters = autoCIMap parameterizedSegmenterFromAGIBlue();
transient Set imageMD5s;
transient LPair allImages;
start-thread {
//temp dm_tempDisableAllButtons();
loadImages();
}
void doIt {
new ChessPieceRecognizer pieceRecognizer;
pieceRecognizer.load();
new Best best;
for (double factor = 0.2; factor <= 2.0; factor += 0.2)
best.put(factor, scoreForFactor(pieceRecognizer, factor));
print(best);
}
double scoreForFactor(ChessPieceRecognizer pieceRecognizer, double factor) {
try {
pieceRecognizer.magicCombineFactor = factor;
new Scorer scorer;
for (unpair S piece, BufferedImage img : cloneList(allImages)) {
scorer.add(eqic(pairA(pieceRecognizer.recognize(img)), piece));
}
print(scorer);
ret scorer.score();
} catch print e {
print("RECOGNIZER TOTAL FAIL");
ret 0;
}
}
void loadImages {
allImages = syncList();
imageMD5s = new Set;
for (S name, fen : unpair agiBlue_chess_trainingImagesWithPositions()) {
SS map = pairsToCIMap(agiBlue_lookupMultipleKeys(agiBlue_chessBoardRecognitionTrainingImagesSliceID(),
name, ll("Input image", "Segmenter used", "Chess board found")));
S segmenter = map.get("Segmenter used");
if (!isYes(map.get("Chess board found"))) continue with print("Chess board not found, skipping");
print(name + " => " + segmenter);
ParameterizedSegmenter seg = timed("Get segmenter " + segmenter, () -> segmenters.get(segmenter));
BufferedImage img = loadImage2(parseImageSnippetURL(map.get("input image")));
Rect r = first(seg.get(img));
if (r == null) continue with print("No board? Skipping");
print("Board: " + r.w + "*" + r.h);
if (abs(r.w-r.h) > 3) continue with print("Board not square, skipping");
BufferedImage board = clipBufferedImage(img, r);
LS position = chess_parseFEN(fen);
printStruct(+position);
LL squareImages = map2 cloneBufferedImage(bufferedImageMNGrid(board, 8, 8));
for row to 8: {
S fenLine = position.get(row);
L images = squareImages.get(row);
for col to 8:
if (imageMD5s.add(imageMD5(images.get(col))))
allImages.add(pair(chess_parseFENSymbol(fenLine.charAt(col)),
images.get(col)));
}
}
print("Have " + nImages(allImages));
}
}