Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az InkAnalysis API-k hatékony eszközöket biztosítanak a táblagép-fejlesztőknek a szabadkézi bevitel programozott kódokkal történő vizsgálatához. Az API értelmes kategóriákba sorolja a tintanyomokat, például szavakat, vonalakat, bekezdéseket és rajzokat.
Az egyes besorolásokat többféleképpen is használhatja, például javíthatja a kézírás felismerésének eredményeit.
A tintaelemzés alapjai
Ez a szakasz bemutatja a Tablet PC Platform tintaelemzési technológiáit, és elmagyarázza, hogy mikor és hogyan kell használni.
Az InkAnalysis API-k hatékonyan egyesítik a két különböző, de ingyenes technológiát: a kézírás-felismerési és az elrendezési besorolást. A két technológia kombinálása végleg nagyobb eredményt ad, mint az önállóan készített alkatrészek.
A kézírás-felismerés a kézzel írt digitális tinta számítási elemzése, amely egy adott nyelven visszaadja a karakteralapú értelmezést. Vagyis a kézírás-felismerés az, ahogyan a számítógép "felolvassa" egy személy kézírását.
A tintaelemzés tovább bontható tintabesorolásra és elrendezéselemzésre. A tintabesorolás a tinta számítógépes felosztása szemantikailag jelentéssel bíró egységekre, például bekezdésekre, vonalakra, szavakra és rajzokra. Az elrendezéselemzés a tintabemenet elhelyezkedését meghatározó számítógépes vizsgálat, amely meghatározza a tinta helyét a tintafelületen, valamint a vonások térbeli és szemantikai kapcsolatait. Az elrendezéselemzés például jelezheti, hogy egy adott tintajelet egy széljegyzetnek vagy kiemelésnek kell tekinteni.
Elismerés
Az InkAnalysis API-ban a tintaelemzés és a felismerés kombinációjának egyik példája a felismerési eredmények fejlesztése, ami nagyban segíti a fejlesztőket. A tablet kézírásfelismerő motorjai elsősorban egyetlen vízszintes tintasor felismerésére lettek tervezve. Az emberek azonban általában több sort írnak jegyzeteléskor, és ezek a sorok nem garantáltan vízszintesek az oldalhoz képest. Az InkAnalysis API-val a szabadkézi elemeket az elemző előre feldolgozza, mielőtt elküldi őket a felismerőnek. Az elemzett tinta a felismerés előtt vízszintessé alakul, ezzel javítva a felismerési eredményeket.
A felismerés további előnyei abból adódnak, hogy a tintaelemző kijavítja a hibás tollvonássorrend-információkat, mielőtt elküldi a tintát a felismerőnek. Emellett a felismerési eredmények szelektíven érhetők el. Vagyis a fejlesztő egy hívásban gyorsan lekérheti egyetlen szó, sor vagy bekezdés felismerési eredményeit.
Tinta besorolás
Természetesen számos forgatókönyv létezik, amelyekben a szabadkézi adatokat érintetlenül tarthatja ahelyett, hogy azonnal szöveggé alakítaná őket. A tintavizsgálat itt is előnyökkel jár. Az InkAnalysis API-k lehetővé teszik a tollvonások felosztását attól függően, hogy írásról vagy rajzról van-e szó. Az írásként besorolt tollvonások szavakat vagy karaktereket alkotnak. Minden más vonás rajzok. Ez új módot kínál a tinta adatok elérésére, és új felhasználói forgatókönyveket tesz lehetővé. Előfordulhat például, hogy a kijelölést úgy valósítja meg, hogy az eltérő legyen attól függően, hogy a felhasználó milyen típusú vonásra koppint; ha egy felhasználó egy írási vonásra koppint, az alkalmazás kijelöli a szót megíró teljes vonáskészletet, ha a felhasználó egy rajzszékre koppint, az alkalmazás csak azt a tollvonást választja ki.
Elrendezéselemzés
A hasznos elrendezéselemzés valójában messze túlmutat a tinta írási és rajzösszetevőkre való viszonylag egyszerű lebontásán.
A tintaelemzés az írási és rajzvonások részletesebb lebontását is magában foglalja. Nagyon egyszerű példaként vegyünk egy tintapacát, ahogy az az alábbi ábrán látható.
Miután a platform elemezte ezeket a vonásokat, visszaadja ezeknek a vonásoknak a fa ábrázolását az alábbi ábra szerint. Ebben az egyszerű esetben a fa csak bekezdés-, sor- és szóinformációkat tartalmaz, de a fa gazdagsága a szabadkézi dokumentum összetettségének növekedésével nő.
Mivel ezek az információk mostantól kezelhető egységekre oszlanak, hatékonyabb funkciókat hozhat létre. Az alkalmazás például kibővítheti azt a funkciót, amelyre a felhasználó koppintva kijelölhet egy szót egy olyan funkcióba, amelyben a felhasználó egyszer koppint a szó kijelöléséhez, kétszer koppint a teljes sor kijelöléséhez, és háromszor koppint a teljes bekezdés kijelöléséhez. Az elemzési művelet által visszaadott faszerkezet kihasználásával az alkalmazás összekapcsolhatja a leképezett területet a fán lévő lökettel. Miután az alkalmazás talált egy vonást, feljebb léphet a fa hierarchiájában, hogy megállapítsa, hogyan válassza ki és melyik szomszédos vonást válassza ki.
Egy egész sor kiválasztása egyszerű példa a tintaelemzés előnyeire, de a lehetőségek nagyobbá válnak, ha figyelembe vesszük a különböző hierarchikus struktúrákat, amelyeket a tintaelemző képes észlelni.
- Rendezett és rendezetlen listák
- Alakzatok
- A szöveggel beágyazott jegyzetelés
A funkciók típusai alkalmazásonként változnak, és a követelményeken, valamint a rendelkezésre álló tintaelemző és -felismerő motorokon alapulnak.
A kulcsfontosságú tintaelemzési funkciók
Az InkAnalysis API fő képességei a következő funkciókat tartalmazzák:
- Inkrementális elemzés
- Kitartás
- Adathelyettes
- Egyeztetés
- Bővíthetőség
Növekményes elemzés
Amikor a végfelhasználók tintával dolgoznak, általában kézírásként kezelik. A tintát folyamatosan szerkesztési műveleteknek vetik alá, mint például az új tinta hozzáadása, a meglévő tinta törlése és a tinta tulajdonságainak módosítása, mindezt ugyanúgy történik, mint ahogy a kézírást folyamatosan szerkesztik. Ezek a szerkesztési műveletek befolyásolják az elemzési eredményeket. Ha szerkesztés történik, azokat általában el lehet különíteni a dokumentum bizonyos szakaszaihoz adott időpontban. Tegyük fel például, hogy egy felhasználó öt sor tintával ír. Az alkalmazások szokásos módja a tinta elemzésére az, hogy megvárják, amíg a felhasználó be nem fejezi mind az öt sornyi tintával végzett írást – például egy bekezdés esetén –, majd szinkron vagy aszinkron módban elemzik az eredményeket.
Az öt sor elemzésével töltött teljes időt optimalizálhatja úgy, hogy elkülöníti azokat a területeket, amelyeket írás közben elemeznek, majd csak a megváltozott eredmények részeit vizsgálja újra. Az első sor elemzése után soha többé nem lesz felismerve, hacsak a végfelhasználó nem módosítja. A második sor felismerése független felismerési műveletként történik.
Ez a fokozatos megközelítés jól működik a felismerési műveletek sorszinten, de magasabb szinten kell működnie a tintaelemzési művelethez. Mivel a tintaelemző képes különböző magasabb szintű besorolásokat észlelni ezen öt tintasor esetében (például lehet egy standard bekezdés vagy öt elem egy listában), a tintaelemzőnek növekményesen kell elemeznie ezeket a magasabb struktúrákat. Vagyis miután a tintaelemző vonalként osztályozza az első vonalat, újra ellenőrzi, hogy még mindig vonal-e, amikor a második vonalat osztályozza. A tintaelemző azonban elkülöníti ezt a kettős ellenőrzést a bekezdéshez, és figyelmen kívül hagyja az első bekezdést a második bekezdés elemzésekor, és a második bekezdést független tintaelemző műveletként kezeli. Ez a növekményes elemzési módszer jelentősen lerövidíti a feldolgozási időt, ha nagy mennyiségű tinta van jelen az alkalmazásban.
Kitartás
A növekményes elemzés jól működik egy InkAnalyzer objektum adott munkamenetén vagy példányán belül. Azonban az első generációs táblagép platform API-k nem képesek növekményes elemzésre, miután a tinta a lemezre lett mentve. Az InkAnalysis API lehetővé teszi a tinta lemezre mentését, valamint a hosszan megőrzött elemzési eredmények mentését. Az elemzési eredmények betölthetők, amikor a tinta betöltődik, és be lehet injektálni egy InkAnalyzerúj példányába. A InkAnalyzer objektum új példánya ekkor ugyanazzal az eredményállapotmal rendelkezik, mint korábban, és mostantól a meglévő állapot növekményes módosításaként is elfogadhatja a módosításokat ahelyett, hogy mindent újra elemezni szeretne.
Adatproxy
Sok alkalmazás már rendelkezik valamilyen meglévő dokumentumstruktúrával az alkalmazásaikban; például egy gráfot vagy egy adatbázist. Az InkAnalyzer is strukturált formában jeleníti meg az eredményeket, ContextNode objektumok fájában. Az InkAnalyzer struktúrájának és az alkalmazás meglévő struktúrájának két irányban kell együttműködnie: az eredményeket a InkAnalyzer az alkalmazásba kell lekérni, és az állapotot az alkalmazásból be kell tolni a InkAnalyzer-be.
Ha az InkAnalyzer eredményeit az alkalmazás szerkezetébe kellene behúzni, az viszonylag egyszerű lenne. Az alkalmazások iterálnak az eredményfán, és az összes szükséges eredményt átmásolnák (integrálnák) a meglévő adatstruktúrájukba. Mivel azonban számos vízszintes alkalmazás növekményes elemzést és a lemezen való megőrzését igényli, a probléma kétirányúvá válik. Az állapotot (korábbi eredményeket) ki kell vonni az alkalmazás struktúrájából, és át kell küldeni az InkAnalyzer-be.
Ennek a követelménynek való megfelelés érdekében az InkAnalyzer olyan események sorozatát tartalmazza, amelyeket az elemzési művelet során a megfelelő időpontban hoz létre, hogy lehetővé tegye az alkalmazások számára az adatok kérésének a meglévő struktúrákhoz való proxyzását. Ezek az események csak a növekményes művelet által megkövetelt ContextNode objektumokhoz jönnek létre.
Egyeztetés
A legtöbb alkalmazás szeretné elemezni a festéket a háttérben, hogy a felhasználói felület megszakításai minimálisra maradjanak. Az, hogy a háttérben lévő tintát elemzik, problémákat okoz, ha a felhasználó megváltoztatja az elemzett tintát (vagy a szomszédos tintát). Ha például a felhasználó törli a tintát a háttérművelet során, az eredményként kapott struktúra a dokumentum állapotát tükrözné a háttérművelet indításakor, nem pedig azt, hogy mikor fejeződött be.
Az alkalmazások támogatásához az InkAnalyzer egyezteti az elemzési művelet kezdete és vége közötti dokumentumállapot-különbségeket. A felhasználó vagy alkalmazás által a háttérben futó elemzés során végrehajtott módosítások mindig felülbírálják a háttérben kiszámított eredményeket. Az egyeztetés után a rendszer csak az eredménystruktúra azon részeit jelenti, amelyek nem ütköznek a dokumentum módosításaival, és az ütköző vonások fel vannak címkézve a jövőbeli elemzéshez. A háttérelemzési művelet következő futtatásakor a rendszer újraszámítja az eredményeket az új állapot alapján.
Az alábbi ábrán ez a folyamat látható. Az idő lineárisan van kifejezve felülről lefelé a diagramban.
- Az 1. időpontban (t1) az alkalmazás tintát gyűjt a végfelhasználótól, beleértve bármilyen tintamódosítást, például hozzáadást, eltávolítást vagy módosítást.
- T2 időpontban az alkalmazás meghívja a háttérelemzési műveletet. A InkAnalyzer határozza meg, hogy melyik tinta nem rendelkezik eredményekkel, és melyik tintát kell duplán ellenőrizni. Átmásolja a szükséges tintaadatokat, hogy a háttérszál önállóan hajthassa végre a műveletet.
- T3 időpontban az InkAnalyzer visszaadja a felhasználói felület szálvégrehajtását az alkalmazásnak. A InkAnalyzer létrehoz egy második szálat, a háttérelemzési szálat, és a tintaelemző és felismerő motorok elemzik a másolt tintaadatokat.
- Míg az elemzési művelet a második háttérszálon történik, a végfelhasználó továbbra is szerkeszti a dokumentumot, hozzáadja és eltávolítja a stroke-adatokat t4 és t5 időpontban. Ezek a módosítások ütközhetnek a háttérben folyamatban lévő munkával.
- A t6-nál a háttérszál befejezte az elemzési műveletet, és az eredmények készen állnak. Mielőtt a InkAnalyzer közli az eredményeket az alkalmazással, egy egyeztetési algoritmust futtat annak megállapítására, hogy az elemzési művelet során végrehajtott felhasználói módosítások (t4 és t5) ütköznek-e az eredményekkel. Ha bármilyen ütközést észlel, a rendszer újraelemzésre megjelöli az ütköző vonásokat, ami akkor következik be, amikor az alkalmazás legközelebb meghívja a háttérelemzési műveletet.
- Végül a t7-nél az összes ütközés észlelésekor az InkAnalyzer bemutatja az eredményeket az alkalmazásnak.
Bővíthetőség
Az InkAnalysis API-k lehetővé teszik, hogy az alkalmazások új típusú elemzési motorokat használjanak anélkül, hogy az alkalmazásnak újra kellene írnia az InkAnalysis API összes előnyét, beleértve az egyeztetést, az adatproxyt, az adatmegőrzést és a növekményes elemzést.
Kapcsolódó témakörök