!7 cmodule TrainChessRecognizer > DynSingleFunctionWithPrintLog { void doIt { Map segmenters = autoCIMap parameterizedSegmenterFromAGIBlue(); 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 (abs(r.w-r.h) > 3) continue with print("Not square, skipping"); BufferedImage board = clipBufferedImage(img, r); print("Board: " + board.getWidth() + "*" + board.getHeight()); LS position = chess_parseFEN(fen); printStruct(+position); } } }