!7 cmodule PipelinedRecognizer > DynImageSurface { transient ChessOCR_Pipeline activePipeline; transient JTable tblBoardsFound; transient ChessPieceRecognizer pieceRecognizer; start { onNewImage = r newRecognition; if (!hasImage()) setImage(whiteImage(100)); } void newRecognition { dispose activePipeline; if (!hasImage()) ret; new ChessOCR_Pipeline pipeline; pipeline.inputImage = getImage(); if (pieceRecognizer == null) pieceRecognizer = chessOCR_pieceRecognizer(); pipeline.pieceRecognizer = pieceRecognizer; pipeline.boardsFound.onChange.add(r updateTable); activePipeline = pipeline; } void updateTable { dataToTable(table, sortedByMapElementDesc Score(map(activePipeline.boardsFound.byFEN, (fen, data) -> litorderedmap("Score" := data.bestScore, "FEN" := fen)))); } visual jvsplit(super, jCenteredSection("Boards found", tblBoardsFound = sexyTable())); }