!7 // uses only one prototype image // goes through different granularities at once cmodule ImageRecogSpike { S prototypeImageID = #1102884; S inputImageID = #1102883; transient L widths = ll(32, 64, 128); transient new L integralImages; transient BWIntegralImage baseImage; transient JTabbedPane tabs = jTabbedPane(); /*class OneLevel { L rectQueue; public bool step() { if (nempty(rectQueue)) ret true with tryRect(popFirst(rectQueue)); if (segmenterStream.hasNext()) { Segmenter seg = segmenterStream.next(); if (seg == null) true; L rects = seg.get(inputImage); addAll(rectQueue, rects); if (verbose) print("Segmenter " + seg + " returned: " + rects); true; } false; } // returns true if rect not seen before bool tryRect(Rect r) { r = rectSetHeightToWidth(r); // square it if (!rectsTried.add(r)) false; // seen BufferedImage board = clipBufferedImage(inputImage, r); S fen, double score = unpair chessOCR_recognizeBoard_FENAndScore(board, pieceRecognizer); if (verbose) print("Score " + score + " for rect: " + r); best.put(pair(r, fen), score); true; }*/ start-thread { if (baseImage == null) baseImage = BWIntegralImage(loadImage2(inputImageID)); for (int w : widths) { IBWIntegralImage ii = scaledIBWIntegralImage(baseImage, w); integralImages.add( addTab(tabs, "w=" + w, jImageSurface(iBWIntegralImageToBWImage(ii))); } } visual tabs; }