Download Jar. Uses 3874K of libraries. Click here for Pure Java version (15490L/111K).
!7 static int topTenSize = 1000, maxImages = 1000; static MultiSetAndTopTen<S> mstt; // holds md5 static SS comments; p-subst { autoRestart(); comments = persistentHashMap("Comments"); mstt = new MultiSetAndTopTen( l_persistentTreeMap("Images + count"), l_persistentList("Top Ten")); mstt.maxEntries = maxImages; mstt.setTopTenSize(topTenSize); thread "Collect" { repeat with sleep 10 { deleteUnusedImages(); collectIt(); } } showButtons( "Top " + topTenSize, f showTopTen, "Clear", rThread(f clearIt), "Current Screen", rThread(f currentScreen)); } svoid collectIt { print("Collecting..."); lock dbLock(); long time = sysNow(); BWImage img = shootScreenBW(); L<Rect> segments = autoSegment(img); for (Rect r : segments) { RGBImage clip = img.clip(r).toRGB(); S md5 = rgbMD5(clip); mstt.add(md5); File f = imgFile(md5); if (!f.exists()) savePNG(f, clip); } print(n(segments, "segment") + " on screen. " + n(mstt.numEntries(), "image") + " in DB. " + n(mstt.numOccurrences(), "occurrence") + ". DB size: " + toM(guessClusteredDirSize(programDir())) + " MB"); done2(time); } static File imgFile(S md5) { ret screenClipFileForMD5(md5); } svoid showTopTen { final L data = map(mstt.topTen(), func(S md5) { litorderedmap( "Image" := loadBufferedImageOpt(imgFile(md5)), "Comment" := unnull(comments.get(md5)), "MD5" := md5, "Occurrences" := mstt.get(md5)) }); final JTable table = setRowHeight(40, showTable(data, "Top " + l(data))); tablePopupMenuItemAndDoubleClick(table, "Comment...", voidfunc(final Int row) { fS md5 = getString(data.get(row), "MD5"); final JTextField tf = jtextfield(comments.get(md5)); showFormTitled("Comment image " + md5, //"MD5", md5, "Image", new ImageChooser(loadBufferedImage(imgFile(md5))), "Comment", tf, r { S text = getTextTrim(tf); comments.put(md5, nullIfEmpty(text)); ((DefaultTableModel) table.getModel()).setValueAt(text, row, 1); }); }); } // Keep all images commented on & all in top 1000 svoid deleteUnusedImages { Set set = ciSet(); set.addAll(mstt.entries()); set.addAll(keys(comments)); for (File f : filesEndingWith(screenClipsDir(), ".png")) if (!set.contains(toLower(dropSuffix(".png", f.getName())))) { print("Deleting " + f); f.delete(); } } svoid clearIt { lock dbLock(); mstt.clear(); } svoid currentScreen { clearIt(); collectIt(); showTopTen(); }
download show line numbers debug dex old transpilations
Travelled to 14 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, onxytkatvevr, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment
Snippet ID: | #1010705 |
Snippet name: | Teach things on screen [don't use, doesn't use new comments system, also collects every 10] |
Eternal ID of this version: | #1010705/52 |
Text MD5: | ed6987e5631bbf8d9df2b3655e34558e |
Transpilation MD5: | bd588a8dec705687b1682b3dcf9d5207 |
Author: | stefan |
Category: | javax / ocr |
Type: | JavaX source code (desktop) |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2018-05-10 17:43:14 |
Source code size: | 2658 bytes / 99 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 541 / 2348 |
Version history: | 51 change(s) |
Referenced in: | #1005951 - Auto-Shooter (collect random images from screen) - replaced by #1010705 #1015138 - thingsOnScreenDefinitionsDBID #1015144 - Migrate files #1015187 - Migrate symbol comments from #1010705 #3000526 - Smart Bot's answer to: !fresh latestPrograms() #3000527 - Smart Bot's answer to: !eval lines(collect('title, latestPrograms())) |