Cum funcționează recunoașterea
Cum funcționează recunoașterea
Această pagină parcurge ce face efectiv AsposeOcr.Recognize() în interior, de la validarea intrării până la RecognitionResult finală. Apelarea lui AsposeOcr.Recognize(OcrInput) rulează un pipeline fix, format din opt pași. Fiecare pas de mai jos se bazează pe implementarea proprie a bibliotecii — nu există etape configurabile.
1. Validarea intrării
Înainte de a încărca orice model, Recognize() validează OcrInput: respinge un null input (ArgumentNullException), un InputType neacceptat (NotSupportedException) și orice cale pusă în coadă care nu există pe disc (FileNotFoundException). Nicio sesiune ONNX nu este creată până când fiecare intrare trece de validare.
2. Randare PDF sau încărcare raster
Pentru InputType.PDF, fiecare pagină este redată ca o imagine RGB de 24 de biți la 150 DPI using Aspose.PDF.FOSS. Pentru InputType.SingleImage, fișierul raster este încărcat direct. Rezoluția de redare de 150 DPI este fixă și nu poate fi configurată.
3. Preprocesare detector
Imaginea este convertită în tonuri de gri folosind ponderi de luma Rec. 709, care păstrează luminozitatea percepută mai exact decât o simplă medie a canalelor. Dacă latura cea mai lungă a imaginii depășește 1000 de pixeli, ea este redimensionată cu un filtru separabil Lanczos-8 filtru (două treceri unidimensionale) pentru a se potrivi cu preprocesarea în timpul antrenamentului modelului detector. O bandă albă de 32 de pixeli este adăugată în partea de jos a imaginii din același motiv.
4. Detectarea regiunilor
Imaginea preprocesată este trecută prin primul model ONNX încorporat, care generează hărți de probabilitate a textului și caracteristici vizuale intermediare. Un al doilea model ONNX — modelul de rafinare — consolidează legăturile dintre caracterele adiacente astfel încât o linie completă de text să fie detectată ca o singură regiune, nu ca mai multe fragmente. Ambele modele rulează pe CPU cu Microsoft.ML.OnnxRuntime configurat pentru 8 fire de lucru intra-operație.
5. Postprocesarea regiunilor
Hărțile de probabilitate a textului și a legăturilor ale detectorului sunt supuse unei praguri, apoi grupate cu o umplere prin inundație în lățime cu conexiune pe patru vecini. Fiecare regiune rezultată este dilatată, încadrarea cu un dreptunghi cu arie minimă, scalată înapoi la coordonatele imaginii sursă și redusă la dreptunghiuri de linie neîncadrate, aliniate pe axă. Aceste dreptunghiuri sunt cele pe care RecognitionResult.LinesResult.Line le returnează în final.
6. Recunoașterea liniei
Fiecare dreptunghi detectat este completat cu două pixeli, decupat din imaginea sursă și redimensionat — păstrând raportul de aspect — pe o 1200×32 pânză albă. Rezultatul este convertit într-un tensor în nuanțe de gri NHWC și transmis modelului de recunoaștere.
7. Decodare CTC
Ieșirea brută a modelului de recunoaștere este decodată cu greedy CTC (Clasificare Temporală Conexistă) decodare: clasele prezise repetate sunt colapsate, clasa goală este eliminată, iar clasele rămase sunt mapate prin alfabetul latin încorporat în model pentru a produce textul recunoscut al liniei.
8. Asamblarea rezultatului
Liniile recunoscute sunt asociate cu dreptunghiurile imaginii sursă pentru a construi fiecare RecognitionResult.LinesResult. Toate liniile ne-goale sunt unite cu întreruperi de linie ale platformei pentru a produce RecognitionResult.RecognitionText.
Lucru secvențial vs. paralel
Fișierele de intrare și, pentru PDF-uri, paginile individuale sunt procesate sequentially — nu există multithreading la nivel de intrare API. Paralelismul există numai în interiorul fiecărui apel de inferență ONNX, unde Microsoft.ML.OnnxRuntime paralelizează execuția graficului pe cele 8 fire de execuție intra-operație configurate.