get("#388") -- rect functions get("#137") -- split get("#390") -- msinsert get("#348") -- rgb functions _debug = false function findSymbol(img, icon, minSimilarity) -- split icon into lines if type(icon) == 'string' then icon = split(icon, "\n") end local w, h = #icon[1], #icon if _debug then print("w/h, img="..w.."/"..h..", "..img.width.."/"..img.height) end -- count non-question marks local count = 0 for yy=1, h do line = icon[yy] for xx=1, w do c = line:sub(xx, xx) if c ~= '?' then count=count+1 end end end local limit = count*25/100 if _debug then print("count/limit: "..count.."/"..limit) end for y=0, img.height-h do for x=0, img.width-w do if _debug then print("Testing "..x.."/"..y) end local total, innerPixels = 0, {} local sim for yy=y, y+h-1 do local line = icon[yy-y+1] for xx=x, x+w-1 do local pix = img.getInt(xx, yy) local c = line:sub(xx-x+1, xx-x+1) if c == '?' then msinsert(innerPixels, pix) else local b = math.floor(bright(rgb(pix))*25+0.5) local lb = string.byte(c)-string.byte("A") local diff = math.abs(b-lb) total = total+diff if total > limit then if _debug then print("limit reached") end goto out end end end end sim = math.floor(100*(1-total/(count*25))+0.5) if _debug then print("Similarity at "..x.."/"..y..": "..sim.."%") end if sim >= minSimilarity then return newRectangle(x, y, w, h) end ::out:: if _debug then print("Skipping "..x.."/"..y) end end end end
Began life as a copy of #394
test run test run with input download show line numbers
Travelled to 12 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment
Snippet ID: | #413 |
Snippet name: | Symbol Finder (include) |
Eternal ID of this version: | #413/1 |
Text MD5: | 611aae6e3a63f444cf32a79858d87464 |
Author: | stefan |
Category: | image recognition |
Type: | Lua code |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2015-02-06 02:14:10 |
Source code size: | 1888 bytes / 77 lines |
Pitched / IR pitched: | No / Yes |
Views / Downloads: | 807 / 166 |
Referenced in: | #412 - LXTerminal Cursor Finder #3000382 - Answer for ferdie (>> t = 1, f = 0) #3000383 - Answer for funkoverflow (>> t=1, f=0 okay) |