Hur igenkänning fungerar
Hur igenkänning fungerar
Den här sidan går igenom vad AsposeOcr.Recognize() faktiskt gör internt, från inmatningsvalidering till den slutliga RecognitionResult. Att anropa AsposeOcr.Recognize(OcrInput) kör en fast, åtta-stegs pipeline. Varje steg nedan är förankrat i bibliotekets egen implementation — det finns inga konfigurerbara steg.
1. Inmatningsvalidering
Innan någon modell laddas, validerar Recognize() OcrInput: den avvisar en null-inmatning (ArgumentNullException), ett ej-stött InputType (NotSupportedException), och alla köade sökvägar som inte finns på disk (FileNotFoundException). Ingen ONNX-session skapas förrän varje inmatning har passerat.
2. PDF-rendering eller rasterladdning
För InputType.PDF, varje sida renderas till en 24-bit RGB-bild vid 150 DPI using Aspose.PDF.FOSS. För InputType.SingleImage, rasterfilen laddas direkt. Upplösningen för rendering på 150 DPI är fast och kan inte konfigureras.
3. Detektor-förbehandling
Bilden konverteras till gråskala med hjälp av Rec. 709 luma-vikter, vilket bevarar upplevd ljusstyrka mer exakt än ett enkelt kanalgenomsnitt. Om bildens längsta sida överstiger 1000 pixlar, skalas den ner med en separabel Lanczos-8 filter (två endimensionella pass) för att matcha detektormodellens förbehandling under träning. En 32-pixel vit remsa läggs till längst ner på bilden av samma anledning.
4. Regiondetektering
Den förbehandlade bilden skickas genom den första inbäddade ONNX-modellen, som producerar sannolikhetskartor för text och mellansteg visuella funktioner. En andra ONNX-modell — förfiningsmodellen — stärker länkarna mellan intilliggande tecken så att en hel textrad detekteras som en region snarare än flera fragment. Båda modellerna körs på CPU med Microsoft.ML.OnnxRuntime konfigurerad för 8 intra-operations-worker-trådar.
5. Region efterbehandling
Detektorns sannolikhetskartor för text och länkar trösklas, sedan grupperas med en fyrkantigt ansluten bredd-först flödesfyllning. Varje resulterande region dilateras, anpassas med en minsta-area rektangel, skalas tillbaka till källbildens koordinater och reduceras till icke-nästlade, axel-justerade linjerektanglar. Dessa rektanglar är vad RecognitionResult.LinesResult.Line slutligen returnerar.
6. Linjeigenkänning
Varje upptäckt rektangel paddas med två pixlar, beskärs från källbilden och skalas om — med bevarande av bildförhållandet — till en fast 1200×32 vit duk. Resultatet konverteras till en NHWC-gråskale-tensor och skickas till igenkänningsmodellen.
7. CTC-avkodning
Den råa utdata från igenkänningsmodellen avkodas med en girig CTC (anslutningsbaserad tidsklassificering) avkodning: upprepade förutsagda klasser kollapsas, den tomma klassen tas bort, och de återstående klasserna mappas genom modellens inbäddade latinska alfabet för att producera radens igenkända text.
8. Resultatmontering
Kända rader paras ihop med sina källbildsrektanglar för att bygga varje RecognitionResult.LinesResult. Alla icke-tomma rader förenas med plattformsradbrytningar för att producera RecognitionResult.RecognitionText.
Sekventiellt vs. parallellt arbete
Indatafiler och, för PDF-filer, enskilda sidor bearbetas sequentially — det finns ingen input-level multithreading API. Parallellism finns endast inom varje ONNX inference-anrop, där Microsoft.ML.OnnxRuntime parallelliserar grafexekveringen över dess 8 konfigurerade intra-operation-trådar.