elkövette: Varga Gábor és Tóth Gábor
LEÍRÁS
===========================================
5K RECOGNITION
===========================================
Szövegfelismerő script PHP 4.3.0-hoz.
Funkció
-------
A script a felhasználó által elkészített képen végez karakterfel-
ismerést. Felületet biztosít szakaszokból és tört vonalakból álló
kép elkészítésére, valamint értelmezi az kész ábrát.
Használat
---------
A kezelőfelület közepén található világoskék téglalap a rajzmező.
Ezen kattintva jelölhetjük meg a rajzolandó pontot, mely az oldal
frissülése után meg is jelenik. Ismételt kattintásokkal adható meg
a törtvonal következő pontja. Ilyen törtvonalakból rajzolhatod ki
az angol ábécé nyomtatott nagybetűinek valamelyikét, vagy akár egy
teljes szót. Ha új betűt, vagy egy betű új alkotóelemét szeretnéd
elkezdeni, kattints az ÚJ VONAL linkre. Ha egy pontot rossz helyre
tettél, vagy elfelejtettél új görbét kezdeni, használhatod a
VISSZAVONÁS funkciót. A TÖRLÉS a teljes rajzmező kiürítésére szolgál,
ezt nyomd meg, ha új szót kívánsz leírni.
Ha elkészültél a leírt szöveggel, az ÉRTELMEZÉS linkre kattintva
megtudhatod, hogy a script milyen karaktersorozatot vélt felismerni
a kézírásodban. Kérünk, hogy törekedj nyomtatott nagybetűk írására,
ugyanis a script ezeket keresi.
Működés
-------
A script az ÉRTELMEZÉS link meghívásakor fut le, és a megrajzolt
szöveget koordinátákkal kódolva kapja meg. A koordinátákat tömbbe
rendezi annak megfelelően, hogy melyik görbe koordinátája, továb-
bá, hogy x, vagy y koordináta-e. Az így szétválasztott görbéket
megvizsgálja, hogy azok vajon egy betű alkotóelemei-e, vagy nincs
köztük összefüggés. Az ily módon szortírozott görbehalmazokat -
melyek az egyes betűk -, egy tömbbe rendezve értelmezi tovább.
Az angol ábécé minden betűjéhez tartozik egy minta, melyek kódolt
formájából ezen a ponton képeket állít elő a script. A minta
kezelése GD-vel történik. A minták 50×50-es szürkeárnyalatú képek,
melyek formájukban a mintázott betűre hasonlítanak, ám szórtabbak,
hogy a felhasználók kézírása közti különbségeket tolerálják. A
mintákkal való összevetés első lépése a görbehalmazok 50×50-es
méretűvé konvertálása, mely még mindig a koordináták alapján
történik. Ezután az egyes görbecsoportokat GD-vel kirajzolja a
script, és a létrehozott minták mindegyikével összehasonlítja őket.
Az összehasonlítás a legkisebb négyzetek elvével történik, melynek
lényege, hogy minden képpontra veszi a minta és a görbecsoport közti
különbséget, képezi ezek négyzetösszegét, majd amelyik mintára ez a
legkisebb, az annak megfelelő betűt adja eredményül. Miután minden
görbecsoportot megvizsgált, azok eredményét egy stringbe fűzi, és
azt visszaadja értelmezésként.
Bővebb tudnivalók a függvényreferenciában.
Cél
---
A script lényege, hogy demonstrálja az egyszerű statisztikai elvek
robusztusságát és gyorsaságát. A teljes script kitömörítve kb. 10K
méretű, mely elég kicsi ahhoz, hogy egyszerű érintőképernyős eszkö-
zökön, esetleg palmtopokon vagy más, a billentyűzetet kiváltó -
kézírás alapú - technológiák alapjául szolgáljon. Nem titkolt cél,
hogy a konferencia révén teret nyissunk az ilyen egyszerű scripteknek
a tömeges felhasználás felé. Reméljük segítségére lesz ennek a forrás-
kód nyílttá tétele.
Függvényreferencia
------------------
parse_coord_string()
A felhasználó által megadott koordináták sorozatából előálló
görbéket tömbökbe rendezi, melyek külön tartalmazzák az x és y
koordinátákat. Értelmezés során ez a script végzi a karakterek
50×50 pixeles méretűre történő transzformálását is.
draw_image()
Megrajzolja a görbéket tartalmazó tömbök által leírt képet.
Minták generálásakor, illetve értelmezéskor szórást visz a
folyamatba.
create_pattern()
A függvény tartalmazza a mintákat leíró kódokat, melyek a betűk
pontjait egy 5×5-ös mátrixban definiálják. Ezeket koordinátákká
alakítja, majd ezekből megrajzolja a betű képét. Ezeket elemzi,
és egy tömbben adja vissza az eredményt. Egy betűnek így több
minta is megfelel, figyelembe véve a betűk többféle írásképét.
analyse()
Ez a függvény végzi a képek értelmezését. A kép pixelei szürke
komponensének értékeiből készít tömböt.
convex_husk()
Konvexburok-függvény. A kapott x koordinátatömbből és a hozzá
tartozó y koordinátákat rendre tartalmazó tömbből előálló pontok
konvex burkát állítja elő.
convex_arr()
A kapott két alakzat (x, y koordináták és az indexeket
megadó tömb) kitöltött sokszögét készítí el későbbi
összevetés céljából.
cmp()
Az usort függvény rendező algoritmusa, mely a betűk, mint görbe-
csoportok görbéit rendezi.
break_chars()
A kapott koordinátasorozatból előálló görbék csoportjait
képzi a fenti 3 függvény segítségével. Az elv, hogy minden
görbecsoport összefüggő, ha konvexburkaiknak van közös
pontja, de előzetes szűrésként megnézi, hogy az x koordináták
közt van-e átfedés. A kimenete egy tömb, melyben a betűk, mint
görbehalmazok a bemenő string formátumában szerepelnek. A
betűket x tengely mentén sorba rendezi.
match()
A betű értelmezett képének és keresi a párját a mintákat tartalmazó
tömbből, a tömbök elemei négyzetes különbségei összegének a minimumát
keresi, és azt a betűt adja, amelyikhez tartozó minta a legkisebb
eltérést mutatja az illesztendő betűtől.
Készítők
--------
Varga Gábor (vargusz##kukac##fazekas.hu)
Tóth Gábor (totge##kukac##startadsl.hu)
Budapest, 2003.03.10.
|