Delen via


Overzicht van inktanalyse

De InkAnalysis-API's bieden Tablet PC-ontwikkelaars krachtige hulpprogramma's om inktinvoer programmatisch te onderzoeken. De API classificeert inkt in zinvolle categorieën, zoals woorden, regels, alinea's en tekeningen.

U kunt elke classificatie op verschillende manieren gebruiken, waaronder het verbeteren van herkenningsresultaten voor handschrift.

Basisbeginselen van inktanalyse

In deze sectie maakt u kennis met de technologie voor inktanalyse van Tablet PC Platform en wordt uitgelegd wanneer en hoe u deze kunt gebruiken.

De InkAnalysis API's combineren effectief twee afzonderlijke maar complementaire technologieën: handschriftherkenning en lay-outclassificatie. Het combineren van deze twee technologieën geeft definitief meer resultaten dan de onderdelen die alleen worden genomen.

Handschriftherkenning is de rekenkundige analyse van handgeschreven digitale inkt om op tekens gebaseerde interpretatie in een bepaalde taal te retourneren. Dat wil gezegd, handschriftherkenning is hoe de computer het handschrift van een persoon 'leest'.

Inktanalyse kan verder worden onderverdeeld in inktclassificatie en indelingsanalyse. Inktclassificatie is de rekenkundige verdeling van inkt in semantisch zinvolle eenheden, zoals alinea's, regels, woorden en tekeningen. Indelingsanalyse is het rekenkundige onderzoek van inktinvoer om de positie van de inkt op het inktoppervlak te bepalen en hoe de stroken zich ruimtelijk en zelfs semantisch met elkaar verhouden. Een indelingsanalyse kan u bijvoorbeeld vertellen dat een bepaald stukje inkt een aantekening of een aanroep is.

Erkenning

Een voorbeeld van hoe de combinatie van herkenning met inktanalyse in de InkAnalysis-API de ontwikkelaar helpt, is de verbetering van de herkenningsresultaten. De Tablet PC handschriftherkenningsengines zijn voornamelijk ontworpen om één horizontale lijn inkt te herkennen. Mensen schrijven echter vaak meerdere regels bij het maken van notities en deze regels zijn niet gegarandeerd horizontaal ten opzichte van de pagina. Met de InkAnalysis-API wordt inkt vooraf verwerkt door de inktanalyse voordat deze naar de recognizer wordt verzonden. De geanalyseerde inkt wordt omgezet in horizontaal voordat deze wordt herkend, waardoor de herkenningsresultaten worden verbeterd.

Andere voordelen van herkenning worden afgeleid door de inktanalyse onjuiste pennenvolgordegegevens te laten corrigeren voordat de inkt naar de recognizer wordt verzonden. Verder zijn de herkenningsresultaten nu selectief beschikbaar. Dat wil zeggen dat de ontwikkelaar snel de herkenningsresultaten voor één woord, regel of alinea in één aanroep kan ophalen.

Inktclassificatie

Er zijn natuurlijk verschillende scenario's waarin u de inktgegevens intact kunt houden in plaats van deze onmiddellijk te converteren naar tekst. Inktanalyse biedt hier ook voordelen. Met name de InkAnalysis-API's bieden de mogelijkheid om pennenstreken te splitsen op basis van het feit of ze schrijven of tekeningen zijn. Pennestreken die als schrijven worden geclassificeerd, zijn pennestreken die een woord of tekens vormen. Alle andere pennenstreken zijn tekeningen. Dit biedt u een nieuwe manier om toegang te krijgen tot inktgegevens, waardoor nieuwe gebruikersscenario's mogelijk worden. U kunt bijvoorbeeld selectie implementeren zodat deze anders is op basis van het type pennenstreek waarop de gebruiker tikt; als een gebruiker op een schrijfstreek tikt, selecteert de toepassing de hele reeks pennenstreken die het woord opstellen. Als de gebruiker op een tekenstok tikt, selecteert de toepassing alleen die pennenstreek.

Indelingsanalyse

Nuttige indelingsanalyse gaat eigenlijk veel verder dan de relatief eenvoudige uitsplitsing van inkt in schrijf- en tekenonderdelen.

Inktanalyse bevat ook een uitgebreidere uitsplitsing van de schrijf- en tekenstreken. Als zeer eenvoudig voorbeeld kunt u een blob met inkt gebruiken, zoals wordt weergegeven in de volgende afbeelding.

twee eenvoudige handgeschreven regels

Nadat het platform deze stroken heeft geanalyseerd, retourneert het een structuurweergave van deze stroken, zoals wordt weergegeven in de volgende afbeelding. In dit eenvoudige geval bevat de structuur alleen alinea-, lijn- en woordgegevens, maar de rijkdom van deze boom neemt toe naarmate de complexiteit van het inktdocument toeneemt.

structuurweergave van hoofd-, alinea-, lijnen en woorden

Omdat deze informatie nu is gescheiden in beheerbare eenheden, kunt u nu krachtigere functies maken. De toepassing kan bijvoorbeeld de functie uitbreiden waarin de gebruiker tikt om een woord te selecteren in een functie waarin de gebruiker eenmaal tikt om het woord te selecteren, twee keer tikt om de hele regel te selecteren en drie keer tikt om de hele alinea te selecteren. Door gebruik te maken van de boomstructuur die door de analysebewerking wordt geretourneerd, kan de toepassing het aangeraakte gebied herleiden naar een pennenstreek in de boom. Nadat de toepassing een streek heeft gevonden, kan deze de boom oplopen om te bepalen hoe en welke aangrenzende streken moeten worden geselecteerd.

Het selecteren van een hele lijn is een simplistisch voorbeeld van de voordelen van inktanalyse, maar de mogelijkheden worden geweldig wanneer men rekening houdt met de verschillende typen hiërarchische structuren die de inktanalyse kan detecteren:

  • Geordende en niet-geordende lijsten
  • Vormen
  • Aantekeningsopmerkingen die inline met de tekst zijn geschreven

De typen functies variëren van toepassing tot toepassing en zijn gebaseerd op vereisten en de beschikbare inktanalyse- en herkenningsengines.

Belangrijke functies voor inktanalyse

De belangrijkste mogelijkheden van de InkAnalysis-API omvatten de volgende functies:

  • Incrementele analyse
  • Volharding
  • Gegevensproxy
  • Verzoening
  • Uitbreidbaarheid

Incrementele analyse

Wanneer eindgebruikers met inkt werken, behandelen ze het meestal als handschrift. De inkt is voortdurend onderhevig aan bewerkingen zoals het toevoegen van nieuwe inkt, het verwijderen van bestaande inkt en de wijziging van inkteigenschappen, allemaal op dezelfde manier als het handschrift voortdurend wordt bewerkt. Deze bewerkingen zijn van invloed op de analyseresultaten. Wanneer er bewerkingen plaatsvinden, kunnen ze meestal worden geïsoleerd in secties van het document op specifieke tijdstippen. Stel dat een gebruiker vijf regels inkt schrijft. De standaardmethode voor het analyseren van inkt is om te wachten totdat de gebruiker klaar is met het schrijven van alle vijf regels inkt, bijvoorbeeld een alinea, en vervolgens de resultaten te analyseren, synchroon of asynchroon.

U kunt de totale tijd optimaliseren die is besteed aan het analyseren van deze vijf regels door de gebieden te isoleren die worden geanalyseerd terwijl ze worden geschreven en vervolgens alleen de delen van de resultaten die zijn gewijzigd, opnieuw te analyseren. Nadat de eerste regel is geanalyseerd, wordt deze nooit meer herkend, tenzij deze door de eindgebruiker wordt gewijzigd. De herkenning van de tweede regel wordt behandeld als een onafhankelijke herkenningsbewerking.

Deze incrementele benadering werkt goed op lijnniveau voor de herkenningsbewerkingen, maar moet op een hoger niveau werken voor de inktanalysebewerking. Omdat de inktanalyse verschillende classificaties op een hoger niveau kan detecteren voor deze vijf regels inkt (het kan bijvoorbeeld een standaardalinea of vijf items in een lijst zijn), is de incrementele benadering voor de inktanalyse dat deze hogere structuren moeten worden geanalyseerd. Dat wil zeggen dat, nadat de inkanalyzer de eerste inktlijn als een lijn classificeert, hij controleert of het nog steeds een lijn is wanneer hij de tweede lijn classificeert. De ink analyzer isoleert deze dubbele controle echter naar de alinea en negeert de eerste alinea bij het analyseren van een tweede alinea, waarbij de tweede alinea wordt behandeld als een onafhankelijke analysebewerking voor inkt. Deze incrementele benadering voor analyse bespaart de verwerkingstijd aanzienlijk wanneer er al grote hoeveelheden inkt in de toepassing aanwezig zijn.

Volharding

Incrementele analyse werkt goed binnen een bepaalde sessie of instantie van een InkAnalyzer-object. De api's van het tablet-pc-platform van de eerste generatie kunnen echter geen incrementele analyse uitvoeren nadat de inkt op schijf is opgeslagen. Met de InkAnalysis-API kunt u inkt opslaan op schijf, samen met een persistente vorm van de analyseresultaten. De analyseresultaten kunnen worden geladen wanneer de inkt wordt geladen en kunnen worden geïnjecteerd in een nieuw exemplaar van een InkAnalyzer-. Een nieuw exemplaar van het InkAnalyzer object heeft vervolgens dezelfde resultatenstatus als het eerder had en kan nu wijzigingen accepteren als incrementele wijzigingen in de bestaande status, in plaats van alles opnieuw te analyseren.

Gegevensproxy

Veel toepassingen hebben al een soort bestaande documentstructuur in hun toepassingen; bijvoorbeeld een grafiek of een database. De InkAnalyzer- geeft ook resultaten weer in een gestructureerde vorm, in een structuur van ContextNode objecten. De InkAnalyzer structuur en de bestaande structuur van de toepassing moeten in twee richtingen samenwerken: resultaten worden opgehaald uit de InkAnalyzer- in de toepassing en de status wordt vanuit de toepassing naar de InkAnalyzergepusht.

Als het alleen nodig was om de resultaten van de InkAnalyzer in de structuur van de toepassing op te nemen, zou dat relatief eenvoudig zijn. Toepassingen doorlopen de resultatenstructuur en kopiëren (integreren) alle onderdelen van de resultaten die ze nodig hebben in hun bestaande gegevensstructuur. Echter, omdat veel horizontale toepassingen incrementele analyse en persistentie naar de schijf vereisen, wordt het probleem tweeledig. De status (eerdere resultaten) moet worden opgehaald uit de structuur van de toepassing en in de InkAnalyzerworden ingevoerd.

Om aan deze vereiste te voldoen, bevat de InkAnalyzer een reeks gebeurtenissen die op het juiste moment tijdens een analyseproces worden gegenereerd, zodat toepassingen de aanvraag voor gegevens naar hun bestaande structuren kunnen doorsturen. Deze gebeurtenissen worden alleen gegenereerd voor de ContextNode objecten die vereist zijn voor de incrementele bewerking.

Verzoening

De meeste toepassingen willen de inkt op de achtergrond analyseren om onderbrekingen van de gebruikersinterface tot een minimum te beperken. Het analyseren van inkt op de achtergrond veroorzaakt echter problemen als de gebruiker de inkt (of aangrenzende inkt) wijzigt die wordt geanalyseerd. Als de gebruiker bijvoorbeeld de inkt verwijdert tijdens de achtergrondbewerking, geeft de resulterende structuur de status van het document weer wanneer de achtergrondbewerking is gestart, in plaats van wanneer deze is voltooid.

Om toepassingen te helpen stemt de InkAnalyzer de verschillen in documentstatus tussen het begin en het einde van het analyseproces af. Wijzigingen die door de gebruiker of toepassing zijn aangebracht terwijl de analyse op de achtergrond wordt uitgevoerd, overschrijven altijd de resultaten die op de achtergrond worden berekend. Na afstemming worden alleen de delen van de resultatenstructuur die niet conflicteren met documentwijzigingen gerapporteerd en worden de conflicterende stroken gelabeld voor toekomstige analyse. De volgende keer dat de achtergrondanalysebewerking wordt uitgevoerd, worden de resultaten opnieuw berekend op basis van de nieuwe status.

In het volgende diagram ziet u dit proces. De tijd wordt lineair uitgedrukt van boven naar beneden in het diagram.

proces voor het afstemmen van documentstatuswijzigingen tijdens de analysebewerking

  1. Op het moment 1 (t1) verzamelt de toepassing inkt van de eindgebruiker, met inbegrip van een soort inktwijziging, zoals toevoegen, verwijderen of wijzigen.
  2. Op t2 roept de toepassing de bewerking voor achtergrondanalyse aan. De InkAnalyzer bepaalt welke inkt geen resultaten heeft en welke inkt moet worden gecontroleerd. Hiermee worden de benodigde inktgegevens gekopieerd zodat de achtergrondthread onafhankelijk kan worden uitgevoerd.
  3. Op t3 geeft de InkAnalyzer de uitvoer van de gebruikersinterface-thread terug aan de toepassing. De InkAnalyzer maakt een tweede thread, de achtergrondanalysethread en de inktanalyse- en herkenningsengines analyseren de gekopieerde inktgegevens.
  4. Terwijl de analysebewerking plaatsvindt op de tweede achtergrondthread, blijft de eindgebruiker het document bewerken, stroken toevoegen en verwijderen, op t4 en t5. Deze bewerkingen kunnen conflicteren met het werk dat op de achtergrond wordt verwerkt.
  5. Bij t6 is de analysebewerking voltooid door de achtergrondthread en zijn de resultaten gereed. Voordat de InkAnalyzer de resultaten aan de toepassing communiceert, wordt er een afstemmingsalgoritmen uitgevoerd om te bepalen of de bewerkingen van de gebruiker tijdens het berekenen van de analysebewerking (t4 en t5) conflicteren met de resultaten. Als er conflicten worden gedetecteerd, worden de botsende stroken gemarkeerd voor opnieuw analyseren. Dit gebeurt de volgende keer dat de toepassing de achtergrondanalysebewerking aanroept.
  6. Ten slotte geeft de InkAnalyzer op t7, met alle gedetecteerde botsingen, de resultaten voor de toepassing weer.

Uitbreidbaarheid

Met de InkAnalysis-API's kunnen nieuwe typen analyse-engines worden gebruikt door toepassingen, zodat de toepassing niet alle voordelen van de InkAnalysis-API hoeft te herschrijven, waaronder afstemming, gegevensproxy, persistentie en incrementele analyse.

Microsoft.Ink-

Inktanalyse Referentie