Megosztás a következőn keresztül:


A tintaelemzés áttekintése

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ó.

két egyszerű kézzel írt sor

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ő.

gyökér, bekezdés, vonalak és szavak fa ábrázolása

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.

dokumentumállapot-módosítások egyeztetésének folyamata az elemzési művelet során

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.

Microsoft.Ink

Tintaelemzési referencia