Как работает распознавание
Как работает распознавание
Эта страница подробно объясняет, что AsposeOcr.Recognize() на самом деле делает внутри, от проверки ввода до финального RecognitionResult. Вызов AsposeOcr.Recognize(OcrInput) запускает фиксированный восьмишаговый конвейер. Каждый шаг ниже основан на реализации самой библиотеки — нет настраиваемых этапов.
1. Проверка ввода
Прежде чем будет загружена какая-либо модель, Recognize() проверяет OcrInput: он отклоняет null ввод (ArgumentNullException), неподдерживаемый InputType (NotSupportedException) и любой указанный путь, который не существует на диске (FileNotFoundException). Сессия ONNX не создаётся, пока все входные данные не пройдут проверку.
2. Рендеринг PDF или загрузка растра
Для InputType.PDF, каждая страница рендерится в 24-битное 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. Постобработка регионов
Карты вероятности текста и связей детектора порогируются, затем группируются с помощью четырёхсвязного обхода в ширину (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 настроенных внутрипроцессных потоков.