Warning: session_start(): open(/var/lib/php/sessions/sess_2j6i60ggjeff3lseepbgqrophk, 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 PipelinedRecognizer > DynImageSurface {
transient ChessOCR_Pipeline activePipeline;
transient JTable tblBoardsFound;
transient ChessPieceRecognizer pieceRecognizer;
transient ReliableSingleThread rst = dm_rst(module(), r newRecognition);
transient S status;
transient bool preparing;
start {
if (!hasImage()) setImage(whiteImage(100));
onNewImage = rst;
rst.trigger();
doEvery(1.0, r updateStatus);
}
void updateStatus {
ChessOCR_Pipeline pipeline = activePipeline;
if (!preparing && (pipeline == null || pipeline.idle()))
setField(status := "Idle");
else if (pipeline != null)
setField(status := "Recognizing. Segmenters: " + pipeline.segmenters.stats() + ", possible board positions: " + pipeline.possibleBoardPositions.stats());
}
void newRecognition {
dispose activePipeline;
if (!hasImage()) ret;
temp dm_tempSetField(preparing := true);
setField(status := "Recognizing...");
new ChessOCR_Pipeline pipeline;
pipeline.inputImage = getImage();
if (pieceRecognizer == null)
pieceRecognizer = chessOCR_pieceRecognizer();
pipeline.pieceRecognizer = pieceRecognizer;
pipeline.boardsFound.onChange.add(r updateTable);
pipeline.boardsFound.onImprovedScore.add(voidfunc(S fen, Rect r) {
pipeline.possibleBoardPositions.addAll(wiggleRect(r));
});
activePipeline = pipeline;
pipeline.addSegmenter(parameterizedSegmenterFromAGIBlue("GingerGM fullscreen find chess board #1"));
}
void updateTable {
dataToTable(tblBoardsFound, sortedByMapElementDesc Score(map(activePipeline.boardsFound.byFEN,
(fen, data) -> litorderedmap(
"Score" := formatDouble(data.bestScore, 2),
"FEN" := fen,
"Best position" := strOrNull(data.bestPosition),
"#" := l(data.boardPositions)))));
}
visual centerAndSouthWithMargins(
jvsplit(super,
jCenteredSection("Boards found", tblBoardsFound = sexyTable())),
dm_label status());
L wiggleRect(Rect r) {
new L out;
for y to 2: x to 2: if (x > 0 || y > 0)
out.add(intersectRects(imageRect(r), growRectRightAndBottom(r, x, y)));
ret out;
}
}