sclass ChessOCR_Pipeline { replace Segmenter with IF1>. transient BufferedImage inputImage; new SeenAndQueue possibleBoardPositions; new ChessOCR_BoardsFound boardsFound; ChessPieceRecognizer pieceRecognizer; // segmenters new SeenAndQueue segmenters; *() { possibleBoardPositions.rst(r processPositions); segmenters.rst(r runSegmenters); } void addSegmenter(Segmenter s) { segmenters.add(s); } void addPossiblePosition(Rect r) { possibleBoardPositions.add(r); } // internal void processPositions() { for (Rect r : possibleBoardPositions.queueIterator()) boardsFound.add(pieceRecognizer.recognizeBoard(clipBufferedImage(inputImage, r))); } void runSegmenters() { for (Segmenter seg : segmenters.queueIterator()) possibleBoardPositions.addAll(seg.get(inputImage)); } void cleanMeUp { // cancels the threads too cleanUpAll(rstProcessPositions, rstRunSegmenters); } }