!7 static volatile BufferedImage img, recognizedImage; static L texts; static ImageSurface is, isWord; static volatile int score; static volatile L posTexts, negTexts; p-subst-autorestart { repeat with sleep 0 { //print("Shooting"); //img = shootScreenHidingConsole(); img = shootScreen2(); //print("Recognizing"); time { L texts = ocr_recognizeMultiLine_scored(img); L lines = mapMethod('text, texts); MultiSet multiSet = asCIMultiSet(onlyStringsLongerThan(1, words(lines(lines)))); //pnl(multiSetAsMap_popularFirst(multiSet)); Set positiveWords = mechSetCI("Positive words"); Set negativeWords = mechSetCI("Negative words"); Set set = asCISet(keys(multiSet)); final MultiSet plus = multiSetSetIntersection(multiSet, positiveWords); final MultiSet minus = multiSetSetIntersection(multiSet, negativeWords); score = l(plus)-l(minus); posTexts = [RecognizedText r : texts | containsOneOfTheWords(r.text(), keys(plus))]; negTexts = [RecognizedText r : texts | containsOneOfTheWords(r.text(), keys(minus))]; L popPlus = mostPopularEntriesFromMultiMap(3, plus); L popMinus = mostPopularEntriesFromMultiMap(3, minus); S text = "Score: " + score; if (score >= 0 && nempty(popPlus)) text += "\n" + joinWithComma(popPlus); if (score <= 0 && nempty(popMinus)) text += "\n" + joinWithComma(popMinus); //infoBox(text); flatInfoBox(escapeNewLines(text)); S imageID = score == 0 ? #1101256 : score > 0 ? #1101255 : #1101254; recognizedImage = img; bool first = quickShowImage_isFirst(); ImageSurface is = quickShowImage(loadImage2(imageID)); if (first) { alwaysOnTopFrame(is); addToWindowWithMargin(is, jfullcenter(isWord = jImageSurface())); enlargeFrameLeftAndBottom(is, 50); isWord.setZoom(2); awtEvery(isWord, 333, f cycleWord); } //packFrame/*InTopRightCorner*/(is); } } } svoid cycleWord { if (recognizedImage == null) ret; RecognizedText hilite = null; if (score > 0) hilite = random(posTexts); else if (score < 0) hilite = random(negTexts); if (hilite != null) isWord.setImage(clipBufferedImage(recognizedImage, hilite.r)); else isWord.setImage(newBufferedImage(1, 1, Color.white)); }