Jak działa rozpoznawanie

Jak działa rozpoznawanie

Jak działa rozpoznawanie

Ta strona opisuje, co AsposeOcr.Recognize() faktycznie robi wewnętrznie, od walidacji danych wejściowych po ostateczny RecognitionResult. Wywołanie AsposeOcr.Recognize(OcrInput) uruchamia stały, ośmiostopniowy pipeline. Każdy poniższy krok opiera się na własnej implementacji biblioteki — nie ma konfigurowalnych etapów.


1. Walidacja danych wejściowych

Zanim zostanie załadowany jakikolwiek model, Recognize() waliduje OcrInput: odrzuca null wejście (ArgumentNullException), nieobsługiwany InputType (NotSupportedException) oraz każdą zakolejkowaną ścieżkę, która nie istnieje na dysku (FileNotFoundException). Sesja ONNX nie jest tworzona, dopóki wszystkie dane wejściowe nie przejdą walidacji.

2. Renderowanie PDF lub ładowanie rastrowe

Dla InputType.PDF, każda strona jest renderowana do 24-bitowego obrazu RGB przy 150 DPI using Aspose.PDF.FOSS. Dla InputType.SingleImage, plik rastrowy jest ładowany bezpośrednio. Rozdzielczość renderowania 150 DPI jest stała i nie podlega konfiguracji.

3. Wstępne przetwarzanie detektora

Obraz jest konwertowany na odcienie szarości przy użyciu wagi luminancji Rec. 709, które zachowują postrzeganą jasność dokładniej niż prosta średnia kanałów. Jeśli najdłuższy bok obrazu przekracza 1000 pikseli, jest skalowany w dół przy użyciu rozdzielnego Lanczos-8 filtr (dwa jednowymiarowe przejścia), aby dopasować przetwarzanie wstępne modelu detektora w czasie treningu. Biały pasek o szerokości 32 pikseli jest dołączany do dolnej części obrazu z tego samego powodu.

4. Wykrywanie regionów

Obraz wstępnie przetworzony jest przekazywany przez pierwszy wbudowany model ONNX, który generuje mapy prawdopodobieństwa tekstu oraz pośrednie cechy wizualne. Drugi model ONNX — model refinenmentu — wzmacnia połączenia między sąsiadującymi znakami, tak aby pełna linia tekstu była wykrywana jako jeden region, a nie jako kilka fragmentów. Oba modele działają na CPU z Microsoft.ML.OnnxRuntime skonfigurowanym na 8 wątków wewnątrzoperacyjnych.

5. Post-przetwarzanie regionów

Mapy prawdopodobieństwa tekstu i połączeń detektora są progowane, a następnie grupowane przy użyciu czterokierunkowego wypełniania metodą breadth-first. Każdy uzyskany region jest dylatowany, dopasowywany do prostokąta o minimalnym polu, skalowany z powrotem do współrzędnych obrazu źródłowego i redukowany do nie-zagnieżdżonych, osiowo wyrównanych prostokątów linii. Te prostokąty są tym, co RecognitionResult.LinesResult.Line ostatecznie zwraca.

6. Rozpoznawanie linii

Każdy wykryty prostokąt jest otoczony dwoma pikselami, wycinany z obrazu źródłowego i skalowany — zachowując proporcje — na stały 1200×32 biały płótno. Wynik jest konwertowany na tensor w skali szarości w formacie NHWC i przekazywany do modelu rozpoznawania.

7. Dekodowanie CTC

Surowy wynik modelu rozpoznawania jest dekodowany metodą zachłanną CTC (Klasyfikacja Czasowa Połączeniowa) dekodowanie: powtarzające się przewidywane klasy są łączone, klasa pustka jest usuwana, a pozostałe klasy są mapowane przy użyciu wbudowanego w model alfabetu łacińskiego, aby uzyskać rozpoznany tekst wiersza.

8. Składanie Wyników

Rozpoznane linie są łączone z ich prostokątami źródłowego obrazu w celu zbudowania każdego RecognitionResult.LinesResult. Wszystkie niepuste linie są łączone przy użyciu znaków końca linii platformy, aby uzyskać RecognitionResult.RecognitionText.


Praca sekwencyjna vs. równoległa

Pliki wejściowe oraz, w przypadku plików PDF, poszczególne strony są przetwarzane sequentially — nie ma wielowątkowości na poziomie danych wejściowych API. Równoległość istnieje tylko wewnątrz każdego wywołania inferencji ONNX, gdzie Microsoft.ML.OnnxRuntime równolegle wykonuje graf przy użyciu 8 skonfigurowanych wątków intraoperacyjnych.

Zobacz także

 Polski