Not logged in.  Login/Logout/Register | List snippets | | Create snippet | Upload image | Upload data

116
LINES

< > BotCompany Repo | #1006104 // Show & recognize

JavaX source code [tags: use-pretranspiled] - run with: x30.jar

Libraryless. Click here for Pure Java version (10123L/72K/249K).

!752

concept GrabbedImage {
  long lastScreenshotTime;
  Rect lastRect;
  BWImage image;
  S md5;
  int count;
  
  BWImage visualizedSplit;
  new L<Rect> rects;
  new L<BWImage> characters;
  new L<S> characterMD5s;
  S recognition;
}

concept RecogInfo {
  new L<S> lines;
}

static SimpleRecognizer sr;
static Concepts in;
static JTable table;
  
p {
  in = new Concepts("#1005951").load();
  conceptsAndBot();
  sr = new SimpleRecognizer;
  sr.load(joinLines(uniq(RecogInfo).lines));

  update();
}

svoid update {
  try {
    if (table != null) {
      frameIcon(table, "#1005541");
      setFrameTitle(table, "Calculating - Recognitions");
    }
    new L<L> data;
    for (GrabbedImage gi : sortByFieldDesc(in.list(GrabbedImage), "lastScreenshotTime")) {
      if (gi.visualizedSplit == null) {
        L<Rect> rects = horizontalAutoSplit2ThenAutoCrop(gi.image);
        cset(gi, visualizedSplit := new BWImage(mergeImagePartsHorizontally(gi.image.toRGB(), rects)));
        for (Rect r : rects) {
          BWImage cImg = gi.image.clip(r);
          gi.rects.add(r);
          gi.characters.add(cImg);
          gi.characterMD5s.add(md5OfBWImage(cImg));
        }
      }
      S rec = sr.recognizeCheat(gi.image);
      if (rec != null)
        gi.recognition = "! " + rec;
      else
        gi.recognition = sr.recognize(gi.image);
      data.add(ll(gi.md5, gi.image.getBufferedImage(), gi.recognition, gi.visualizedSplit.getBufferedImage(), join(" ", gi.characterMD5s)));
    }
    
    bool first = table == null;
    table = showTableWithImages("Recognitions", splitAtSlash("MD5/Image/Recognition/Split/Character MD5s"), data, table);
    
    if (!first) ret;
    
    awt {
      table.setRowHeight(25);
      tablePopupMenu(table, voidfunc(JPopupMenu menu, final int row) {
        addMenuItem(menu, "Teach...", r {
          S md5 = cast getTableCell(table, row, 0);
          final GrabbedImage gi = findConcept(in, GrabbedImage, +md5);
          final new JTextField tf;
          final JCheckBox grouped = jCheckBox("grouped", true);
          final JButton btnSubmit = jbutton("Submit", r {
            S s = trim(tf.getText());
            bool group = isChecked(grouped);
            L<Rect> rects = gi.rects;
            if (group) {
              rects = ocr_groupRects(rects, s);
              s = ocr_unmerge(s);
            }
            L<S> characterMD5s = md5OfBWImageParts(gi.image, rects);
            S line = "The images " + quote(join(" ", characterMD5s)) + " are the " + (group ? "grouped " : "") + "characters " + quote(s) + ".";
            print(">> " + line);
            RecogInfo ri = uniq(RecogInfo);
            if (setAdd(ri.lines, line)) {
              sr.load(line);
              ri.change();
            }
            disposeFrame(tf);
          });
          onUpdateAndNow(ll(tf, grouped), r {
            btnSubmit.setEnabled(ocr_charCountDropSpaces(trim(tf.getText()), isChecked(grouped)) == l(gi.characters));
          });
          showFormTitled("Teach",
            "Image:" , new ImageSurface(gi.image.getBufferedImage()),
            "Split:" , new ImageSurface(gi.visualizedSplit.getBufferedImage()),
            "Meaning:", tf,
            "", grouped,
            "", btnSubmit);
        });
        addMenuItem(menu, "Mark on screen", r-thread {
          Rect r;
          pointArrowsToArea(r = parseRect(getTableLine(table, row).get(3)));
          print("Marking: " + r);
        });
      });
    
      gcAndPrintMemoryInfo();
      
      awtCalcOnConceptChanges(table, 1000, 1000, func update, false);
    }
  } finally {
    frameIcon(table, null);
    setFrameTitle(table, "Recognitions");
  }
}

Author comment

Began life as a copy of #1005971

download  show line numbers  debug dex  old transpilations   

Travelled to 15 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, ddnzoavkxhuk, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, sawdedvomwva, tslmcundralx, tvejysmllsmz, vouqrxazstgt

No comments. add comment

Snippet ID: #1006104
Snippet name: Show & recognize
Eternal ID of this version: #1006104/1
Text MD5: 3c040049ab45bfb67b803e3765ae2221
Transpilation MD5: 1e2ca71b40b3cbe27099c3bff6a8bf48
Author: stefan
Category: javax / gui / ocr
Type: JavaX source code
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2016-12-22 23:35:51
Source code size: 3787 bytes / 116 lines
Pitched / IR pitched: No / No
Views / Downloads: 628 / 1683
Referenced in: [show references]