Kipróbáltam a MobiMouse-t, amivel ha az egérkurzort egy szó fölé viszem, akkor kiírja a szó jelentését. Tudja valaki hogyan szerzi meg a kurzor alatti szót? Ha csak Windows kontrollokkal működne, akkor még érteném, de Firefox alatt is működött weboldalakon, pedig a FF a saját módszerével jeleníti meg a weboldalakat, nem standard windows kontrollokat használva, de onnan is ki tudta szedni. Hogyan?
Nagyon régen, még a MobiMouse első verziójában tudni vélem, hogy hogy működött a dolog, mert akkoriban beszéltem a sráccal aki csinálta ezt a részt:
Ha jól emlékszem, egyszerűen lelopta a képernyőtartalmat pixelesen a memóriába, majd egy limitált OCR-t végzett az egérkurzor alatti szövegre. Ha jól emlékszem ez a limitált OCR abból állt, hogy végig enumerálta a rendszerben az aktuálisan elérhető fontokat, ezekből maszkokat hozott létre, és ha nem is egy-az-egyben egyezőséget, de csak valami primitív matching algoritmust alkalmazott ezekre a maszkokra.
Mondjuk csak hallomásból tudok a dologról, és amúgyis azóta ezerszer megváltozhatott...
Ha ismert a kurzorpozíció akkor ki lehet számolni, hogy melyik karakter fölött van az egér. Egy browseren belül ez nem jelent gondot mert ismert a viselkedése, nem kell azon rágódni, hogy vajon hogyan renderelődik a szöveg. Extrém, sok layeres, összevissza pozicionált dives oldalak esetében lehet nincs megoldás, de az esetek nagy részében kell működjön. Ha ismert a karakter, akkor már csak a szóhatárokat kell megkeresni mindkét irányban, ami nem olyan triviális, de nem is lehetetlen. Jó lenne tudni, hogy a Mobimouse Firefox pluginja ugyanúgy működik-e, mint a Windowsos változat, mert ezáltal konkrétabban lehetne következtetni a háttérre.
Így van, de feltételeztem,hogy a Firefox-hoz nincs semmi "belső" kapcsolata, hanem csak abból szedi ki a szöveget, amit kívülről lát belőle.
Egyébként, ahogy lent is szó volt róla, Firefox-on sem látja mindig a szöveget. Ha lenne valami belső hozzáférése, akkor ilyen nem fordulhatna elő, hogy ugyanazon a lapon az egyik bekezdésben el tudja olvasni a szöveget, a másikban pedig nem.
Egyébként az idézet link alapján egyértelműnek tűnik, hogy az általa ismert betűtípusokat hasonlítgatja a grafikus képernyőtartalommal:
"A játékprogram "közönséges" windowsos betűtípusokat használ. Ekkor a MoBiMouse használható, legfeljebb az adott betűtípust fel kell venni a Hozzáadott betűtípusok közé a Betűtípusok beállítása dialógusban."
Ugyanott írja a működésről: "1. A játékprogram grafikusan (bitmapesen) írja ki a szöveget. Ekkor a MoBiMouse nem használható. 2. A játékprogram "közönséges" windowsos betűtípusokat használ." Ez ellentmond az OCR használatának, ugyanis az OCR lényege pont az, hogy pixelekből csinál karaktereket. A ""Beszkennelt" (lapolvasóval beolvasott) szöveget fel lehet ismerni a MoBiMouse-szal?" rész is érdekes, ugyanis explicit írja, hogy szkennelt szöveget nem ismer fel, azt előbb szöveggé kell konvertálni karakterfelismerő (OCR) programmal. Viszont ha nem OCR, akkor nincs magyarázat a "félig látszó szónak csak felét akarja fordítani" viselkedésre és a betűtípusok megadásának szükségességére.
Lehet meg kellene kérdezni a fejlesztőt a működésről :-)
Kösz, hogy kipróbáltad a screenshot-ot. Ezek szerint nem vacakoltak, hanem egy univerzális megoldást választottak, ami mindenhol működhet, ha van rá betűmintájuk.
Mindenesetre böngészőn belül valószínűleg meg lehet oldani, hogy bármilyen szóra működjön betűtípustól függetlenül. Majd megpróbálok összedobni rá egy megoldást. Igaz, máshol nem fog menni, csak böngészőkben (nem csak FF), de manapság a dolgok többsége úgyis egyre inkább ott zajlik.
már írták. A mobimouse a képből próbálja kitalálni a szót. Ezért kell installkor minden betűtípust (még a különböző méreteket is) felvinni a progiba.
valakik itt írták, hogy a böngészőből nem nagy ügy kivenni egy-egy szót, hisz az a html kódban úgyis ott van. Azért én megnézném, hogy hogyan kezeli le, hogy pont az egér alatti szöveget be tudja olvasni. (sehogy)
A mobimouse működését jól megfigyelheted egy screenshoton, vagy példul ha a webböngésző ablakát kisebbre veszed, úgy hogy előjöjjön a vízszintes csúszka, és ha ilyenkor egy hosszabb szó lemarad a képről... ekkor a mobimouse csak a látható részt próbálja lefordítani.
Én kábé így kezdenék neki egy ilyen proginak:
az egér pozícióját tudjuk. GetCursorPos API függvény Aztán a képernyő adott pontjának színét is le tudjuk kérdezni: GetPixel (api függvény)
Namost én az egérmutató körül egy kis négyzetet feltérképeznék, és ha találok benne karakterre hasonlító dolgot (bár ezt az összehasonlítást nemtom hogy írnám meg), akkor OK. Ha nem, akkor egyre nagyobb és nagyobb négyzetet térképeznék fel az egér körül. (hátha egy jó nagy betűméretű szó fölött vagyok -az installkor felvitt legnagyobb betű határozza meg a maximális keresési területet)
Szóval mondjuk, hogy megvan az első értelmes karakter. Innentől már könnyebb bevonni letapogatásra kijelölt területet, hisz a betűtípustól- és mérettől függően adott, hogy mekkora területet (újabb n égyzeteket) kell bevonni a letapogatásba. (jobbra-balra)
A folyamat ilyenkor már be is gyorsulhat hisz elég csak az első karakter betűtípusának karakterivel összehasonlítani a képet.
Ha majd megnézed (én kipróbáltam) a Mobimouse sem tudja értelmezni ha a wordbe egy olyan szót írsz, aminek az egyik fele 10-es a másik 12-es mérettel van írva. Mindig csak azt a felét látja, amelyiken a kurzor épp áll. (vagyis ők is ezt a gyorsítást alkalmazzák)
Egy jólnevelt browserből nem nehéz kiszedni a szöveget, mert ott van a DOM-ban szövegesen. A Firebug a teljes forrást kiszedi neked ha akarod, és open source. Inkább a szóhatárok beazonosítása nehezebb a html kódok miatt.
És ha csinálsz screenshot-ot, a képen is megtalálja a szavakat? Ezzel eldőlne, hogy csinál-e betűfelismerést, mintegy utolsó próbaképp. Azért a bitképes betűtípusok felismerése egy kicsit távol van az igazi OCR-től, persze...
Nem tudom, hogy a mostani verzió hogy működik, de a régiben az első induláskor ki kellett választani a használt fontkészleteket. Ha keveset választott ki az ember akkor nem ismerte fel, ha sokat akkor belassult a progi. Ha nem ismerte fel a szöveget akkor hozzá lehetett adni újabb készletet, de a kijelölés is segített ha pl. csak egy-két karaktert látott a szóból.
Ez kétség kívül megmagyarázná azt, hogy ugyanazon az oldalon az egyik szöveget kezelte nekem, a másikat meg nem. Az egyikhez talált betűtípus mintát, a másikhoz pedig nem.
Az OCR azért elég kifinomult dolog. :-) De igazából nem tudom. 10 éve van Mobim még anno pénzért vettem az azóta ingyenes verziót. Akkor még nem kezelte a pdf-et. Később külön lehetett megvenni a pdf-es verziót. A Firefox esetében még működhet a közvetlen hozzáférés, ha ismerik a renderelő modult. De szerintem nem vacakoltak vele külön, hanem betárazzák a .ttf fájlokat és felismertetik. Ezért van, hogy a cifrább betűtípusokkal nem boldogul. Ha a karakterkódot használná akkor mindegy lenne neki a kinézet.
Win control-ból gondolom nem nagy ügy. A többi esetben, meg talán ismerik a renderelő részt. Végül is a kijelölés működik, vagyis van rá hívás. De azért annyira nem lehet egyszerű, mert elég gyakran hibázik. A korai verziónak pl. be kellett olvasnia a betűkészletet ahhoz hogy felismerje. Ez alapján pixeles felismerésre tippelek.
Sőt. A pdf-ből is kiszedi. :-) Azt hiszem, a megoldás a Morhologic jogvédett tulajdona. Volt itt már egy topic róluk. Valszeg írtak vagy vásároltak erre a 2-3 esetre külön modult.
Angol nyelvű szó fölé vittem, és kiírta a jelentését. Triviális szavakkal próbáltam, úgyhogy menni kellett volna.
De nem a hiba az igazán érdekes, hanem hogy ahol ki tudta szedni, ott hogyan tudta? A Firefox saját maga rajzolja a cuccokat az oldal renderelésekor, ezért egy pixelhalmazon kívül szerintem ott nem láthatna mást, mégis ki tudta szedni valahogy.
Egyébként Firefox-on sem ment tökéletesen, mert egy bekezdésben működött, de ha a bekezdés címére mentem (ami ugyanolyan sima szöveg volt, csak H1), akkor abból nem tudta kiszedni, szóval nem világos hogyan működik, mert a kétféle text között HTML és browser szinten nem kellene, hogy különbség legyen.