Libraryless. Click here for Pure Java version (8747L/60K/207K).
1 | !752 |
2 | |
3 | concepts. |
4 | |
5 | concept Example { |
6 | BWImage image; |
7 | S imageMD5; |
8 | S text; |
9 | |
10 | // new fields in this program: |
11 | L<Rect> rects; |
12 | BWImage visualizedSplit; |
13 | S guessedText; |
14 | //bool countMatch; |
15 | } |
16 | |
17 | static MultiMap<S, S> learnedChars; |
18 | |
19 | p { |
20 | loadConceptsFrom("#1006005"); |
21 | Concepts in = mainConcepts; |
22 | |
23 | for (Example e : in.list(Example)) |
24 | e.rects = horizontalAutoSplit2ThenAutoCrop(e.image); |
25 | |
26 | showConceptsTable_dropFields.set(ll("imageMD5")); |
27 | final JTable table = showConceptsTable(Example); |
28 | setFrameTitle(table, "Recognizing texts"); |
29 | tablePopupMenu(table, voidfunc(JPopupMenu menu, int row) { |
30 | final Example e = (Example) getConcept((long) getTableCell(table, row, 0)); |
31 | addMenuItem(menu, "Copy single character to clipboard...", r { |
32 | final JTextField tf = jTextField("1"); |
33 | showForm("Character index (1 to " + l(e.rects) + ")", tf, r { |
34 | copyBWImageToClipboard(e.image.clip(e.rects.get(parseInt(trim(tf.getText()))-1))); |
35 | }); |
36 | }); |
37 | }); |
38 | |
39 | learnedChars = getLearnedChars(); |
40 | |
41 | for (Example e : in.list(Example)) |
42 | guess(e); |
43 | |
44 | for (Example e : in.list(Example)) { |
45 | // first, auto-split |
46 | cset(e, visualizedSplit := new BWImage(mergeImagePartsHorizontally(e.image.toRGB(), e.rects))); |
47 | |
48 | new StringBuilder buf; |
49 | for (Rect r : e.rects) { |
50 | BWImage cImg = e.image.clip(r); |
51 | S md5 = md5OfBWImage(cImg); |
52 | L<S> l = learnedChars.get(md5); |
53 | S c = or(first(l), "?"); |
54 | buf.append(c); |
55 | } |
56 | cset(e, guessedText := str(buf)); |
57 | } |
58 | } |
59 | |
60 | svoid guess(Example e) { |
61 | if (nempty(e.text)) |
62 | learnedChars.setPut(e.imageMD5, e.text); |
63 | |
64 | L<Rect> rects = horizontalAutoSplit2ThenAutoCrop(e.image); |
65 | S text = e.text.replace(" ", ""); |
66 | bool countMatch = l(rects) == l(text); |
67 | if (!countMatch) ret; |
68 | print("Guessing " + text); |
69 | for i over rects: { |
70 | Rect r = rects.get(i); |
71 | BWImage cImg = e.image.clip(r); |
72 | S md5 = md5OfBWImage(cImg); |
73 | learnedChars.setPut(md5, substring(text, i, 1)); |
74 | } |
75 | } |
Began life as a copy of #1006062
download show line numbers debug dex old transpilations
Travelled to 14 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, sawdedvomwva, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment
Snippet ID: | #1006093 |
Snippet name: | Learn to read - recognize [v2, dev.] |
Eternal ID of this version: | #1006093/1 |
Text MD5: | a82ad654c6f5076d9669a0e9a5a090e4 |
Transpilation MD5: | 7a08c4a4a9131380d9893a2b549aaf48 |
Author: | stefan |
Category: | javax / gui |
Type: | JavaX source code |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2016-12-18 02:53:42 |
Source code size: | 2052 bytes / 75 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 488 / 610 |
Referenced in: | [show references] |