Як працює розпізнавання

Як працює розпізнавання

Як працює розпізнавання

Ця сторінка пояснює, що AsposeOcr.Recognize() насправді робить всередині, від перевірки вводу до фінального RecognitionResult. Виклик AsposeOcr.Recognize(OcrInput) запускає фіксований восьмикроковий конвеєр. Кожен крок нижче базується на власній реалізації бібліотеки — немає налаштовуваних етапів.


1. Перевірка вводу

Перш ніж буде завантажена будь-яка модель, Recognize() перевіряє OcrInput: вона відхиляє null ввід (ArgumentNullException), непідтримуваний InputType (NotSupportedException) та будь-який шлях у черзі, який не існує на диску (FileNotFoundException). Сесія ONNX не створюється, доки всі вхідні дані не пройдуть перевірку.

2. Рендеринг PDF або завантаження растеру

Для InputType.PDF, кожна сторінка рендериться у 24-bit RGB зображення за 150 DPI using Aspose.PDF.FOSS. Для InputType.SingleImage, растровий файл завантажується безпосередньо. Роздільна здатність рендерингу 150 DPI є фіксованою і не налаштовується.

3. Попередня обробка детектора

Зображення конвертується у відтінки сірого за допомогою ваги яскравості Rec. 709, які зберігають сприйману яскравість точніше, ніж просте середнє каналів. Якщо найдовша сторона зображення перевищує 1000 пікселів, вона зменшується за допомогою сепарабельного Lanczos-8 фільтр (два одномірних проходи), щоб відповідати передобробці під час навчання моделі детектора. Білий смужка шириною 32 пікселя додається до нижньої частини зображення з тієї ж причини.

4. Виявлення регіону

Попередньо оброблене зображення передається через перший вбудований ONNX-модель, яка генерує карти ймовірності тексту та проміжні візуальні ознаки. Друга ONNX-модель — модель уточнення — посилює зв’язки між сусідніми символами, щоб повний рядок тексту визначався як один регіон, а не кілька фрагментів. Обидві моделі працюють на CPU з Microsoft.ML.OnnxRuntime, налаштованим на 8 воркер-потоків всередині операції.

5. Постобробка регіону

Карти ймовірності тексту та зв’язків детектора підлягають пороговій обробці, після чого групуються за допомогою чотиризв’язного breadth-first flood fill. Кожен отриманий регіон розширюється, підбирається мінімальний прямокутник за площею, масштабуються назад до координат вихідного зображення та зводяться до незасічених, вирівняних по осях прямокутників-ліній. Ці прямокутники — це те, що RecognitionResult.LinesResult.Line зрештою повертає.

6. Розпізнавання рядка

Кожен виявлений прямокутник доповнюється двома пікселями, вирізається з вихідного зображення та змінюється у розмірі — зберігаючи його співвідношення сторін — на фіксовану 1200×32 біле полотно. Результат перетворюється у тензор NHWC у відтінках сірого і передається до моделі розпізнавання.

7. Декодування CTC

Необроблений вихід моделі розпізнавання декодується жадібним CTC (Зв’язкова тимчасова класифікація) декодування: повторювані передбачені класи зводяться, порожній клас видаляється, а залишені класи відображаються через вбудований у модель латинський алфавіт, щоб отримати розпізнаний текст рядка.

8. Збір результату

Розпізнані рядки поєднуються з їхніми прямокутниками у вихідному зображенні для створення кожного RecognitionResult.LinesResult. Усі непорожні рядки об’єднуються за допомогою розривів рядків платформи, щоб отримати RecognitionResult.RecognitionText.


Послідовна vs. Паралельна робота

Вхідні файли та, для PDF, окремі сторінки обробляються sequentially — немає багатопоточності на рівні вводу API. Паралелізм існує лише всередині кожного виклику інференції ONNX, де Microsoft.ML.OnnxRuntime паралелізує виконання графа на його 8 налаштованих внутрішньоопераційних потоків.

Дивіться також

 Українська