sclass ChessOCR_TwoStageRecognizer implements Steppable { BufferedImage inputImage; Iterator rectStream; ChessPieceRecognizer pieceRecognizer; new Set rectsTried; new Best> best; // rect + FEN *() {} *(BufferedImage *inputImage, Iterator rectStream) {} bool step { if (!rectStream.hasNext()) false; Rect r = rectStream.next(); tryRect(r); true; } void tryRect(Rect r) { Rect r = rectSetHeightToWidth(r); // square it if (!rectsTried.add(r)) ret; // seen BufferedImage board = clipBufferedImage(inputImage, r); S fen, double score = unpair chessOCR_recognizeBoard_FENAndScore(board, pieceRecognizer); best.put(pair(r, fen), score); } }