Amazon Textract

В Amazon Textract можно распознавать печатный и рукописный текст, извлекать поля форм, таблицы, отметки, подписи, реквизиты счетов и чеков, данные удостоверений и сведения из ипотечных пакетов. Пользователь загружает PDF, TIFF, JPEG или PNG, выбирает нужный тип анализа, а затем получает структурированный результат с текстом, координатами, связями между элементами и оценками уверенности.

В демонстрации консоли работа начинается с выбора сценария: обычный анализ документа, расходы, удостоверение личности, ипотечный пакет, массовая загрузка или пользовательские запросы. После выбора файла слева остаётся изображение страницы, а справа открываются вкладки с распознанным текстом и структурой. Для быстрой проверки достаточно загрузить собственный образец, но для производственного процесса обычно настраивают вызовы API, хранение исходников в Amazon S3 и обработку ответа приложением.

Результат не ограничивается строкой распознанного текста. Каждый найденный объект описывается блоком: у него есть тип, текстовое значение, уровень уверенности, номер страницы, геометрия и связи с другими блоками. Благодаря этому можно восстановить строки таблицы, сопоставить подпись с полем формы, показать рамку вокруг значения, отфильтровать сомнительные ответы и передать выбранные реквизиты в бухгалтерскую систему, хранилище документов или CRM.

Открыть Amazon Textract

Оценка 9.7 Рекомендуем
  • Редактирование PDF
  • Русский интерфейс
  • Просто новичкам
Скачать бесплатно на Windows
Лучшая альтернатива
Amazon Textract
Оценка 8.5
  • Нужна учётная запись AWS
  • Нет русского распознавания
  • JSON требует обработки
Открыть Amazon Textract онлайн
Сервис откроется в новой странице

Как устроен рабочий экран

В левой панели консоли собраны демонстрационные режимы и служебные инструменты. В разделе Analyze Document проверяются обычный текст, формы, таблицы, запросы и подписи. Отдельные пункты Analyze Expense, Analyze ID и Analyze Lending используют специализированные схемы ответа. Bulk Document Uploader нужен для сравнительной проверки набора документов, а Custom Queries — для создания адаптеров, повышающих точность ответов на заданные вопросы.

Центральная область показывает выбранный документ. На страницах с результатами доступны масштабирование, перемещение между страницами и визуальные рамки вокруг найденных объектов. Правая часть меняется в зависимости от функции: там появляются вкладки Raw text, Forms, Tables, Queries или Signatures, списки полей расходов, карточки распознанных реквизитов и оценки уверенности. Такой экран удобен для проверки качества, однако он не заменяет полноценное приложение для редактирования PDF: изменения в исходный документ не записываются.

В демонстрации можно переключаться между встроенным образцом и собственным файлом. Это позволяет быстро понять, правильно ли распознаются конкретные бланки, чеки или сканы, прежде чем писать код. При проверке важно использовать реальные варианты документов: чистый экспортированный PDF, скан со смещением, фотографию с перспективой, экземпляр с рукописными пометками и страницу с таблицей. Один идеальный образец не показывает, как решение поведёт себя на потоке.

Amazon Textract: сводные поля счета в консоли

Выбор операции для конкретной задачи

Для простого OCR используется DetectDocumentText. Операция возвращает страницы, строки и слова, их координаты и уверенность. Она подходит для полнотекстового индекса, поиска по коллекции документов, передачи текста в NLP-модель и предварительного определения содержимого. Если нужны ключи и значения, таблицы, запросы, подписи или структура макета, применяется AnalyzeDocument с соответствующими значениями FeatureTypes.

AnalyzeExpense следует выбирать для счетов и кассовых чеков. В ответе появляются нормализованные типы полей, например идентификатор счета, дата, итог, налог, поставщик и строки покупок. AnalyzeID предназначен для удостоверений личности, прежде всего паспортов и водительских удостоверений США. AnalyzeLending принимает пакет ипотечных документов, классифицирует страницы, выбирает специализированный анализ и формирует как подробные извлечения, так и сводку пакета.

Выбор функции влияет не только на схему JSON, но и на стоимость обработки, доступные ограничения и последующий код. Не следует запускать все виды анализа на всякий случай. Если потоку достаточно сырого текста, AnalyzeDocument создаст лишние данные и расходы. Если нужно извлечь итог счета, обычное распознавание потребует самостоятельного поиска метки, нормализации вариантов написания и привязки суммы; специализированный режим уже возвращает унифицированный тип поля.

  • DetectDocumentText — строки и слова без смысловой разметки.
  • AnalyzeDocument — формы, таблицы, запросы, подписи и макет.
  • AnalyzeExpense — сводные поля и позиции счета или чека.
  • AnalyzeID — нормализованные поля удостоверений.
  • AnalyzeLending — классификация и извлечение ипотечного пакета.

Поддерживаемые файлы и ограничения ввода

Сервис принимает JPEG, PNG, TIFF и PDF. Для синхронных операций файл ограничен 10 МБ; PDF и TIFF в синхронном режиме должны содержать одну страницу. Для асинхронной обработки JPEG и PNG также ограничены 10 МБ, а PDF и TIFF могут достигать 500 МБ и 3000 страниц. Защищённые паролем PDF не принимаются. Размер страницы PDF ограничен 40 дюймами и 9000 пунктами по каждой стороне.

Формат выбирают по происхождению документа. Одностраничную фотографию или скан удобно передать байтами через SDK. Многостраничный PDF или TIFF размещают в S3 и запускают асинхронную операцию. Не стоит конвертировать поддерживаемый файл без необходимости: повторное сжатие JPEG, уменьшение разрешения и растрирование качественного PDF могут ухудшить мелкий текст и линии таблиц.

Для устойчивого распознавания AWS рекомендует качественное изображение примерно от 150 DPI. Это не жёсткое условие API, а практический ориентир. На результат также влияют контраст, резкость, размер символов, тени, блики, перспективное искажение и сложный фон. Перед массовой загрузкой следует проверить несколько худших документов, а не только типовой чистый экземпляр.

РежимДопустимый вводПрактическое применение
СинхронныйДо 10 МБ, PDF/TIFF на 1 страницуФорма в приложении, быстрый ответ
АсинхронныйPDF/TIFF до 500 МБ и 3000 страницХранилища, пакеты и очереди
Bulk UploaderДо 150 документов за запросОценка качества на наборе

Распознавание строк и слов

В ответе OCR текст представлен блоками PAGE, LINE и WORD. Блок страницы связывается с дочерними строками, а строка — со словами. LINE содержит последовательность слов так, как модель видит её на странице; WORD хранит отдельный токен. Для каждого элемента возвращаются текст, уверенность и Geometry. Номер страницы позволяет объединять результаты многостраничного документа без догадок по порядку массива.

При построении текстового файла обычно перебирают LINE и соединяют их переводами строк. Для поискового индекса полезно сохранить не только текст, но и идентификатор исходного документа, страницу и координаты. Тогда найденный фрагмент можно подсветить в просмотрщике. Для лингвистического анализа иногда лучше работать со строками, потому что они сохраняют локальный порядок; для точной подсветки и сопоставления используют WORD.

Порядок элементов в JSON не следует считать единственным основанием для восстановления структуры. Сложная страница с колонками, таблицами и подписями может требовать анализа координат или функции Layout. Если просто склеить все слова по порядку массива, заголовок боковой колонки может попасть в середину основного текста. Для документов с многоуровневым макетом безопаснее использовать специальные блоки структуры и проверять чтение на конкретных шаблонах.

Рукописный текст распознаётся вместе с печатным. В блоке WORD может присутствовать тип текста, позволяющий различать печатные и рукописные элементы. Это удобно для анкет, медицинских форм и пометок, но уверенность рукописи часто ниже, поэтому её разумно направлять на отдельную проверку по порогу.

Координаты, рамки и восстановление расположения

Geometry содержит BoundingBox и Polygon. BoundingBox задаёт левую координату, верхнюю координату, ширину и высоту как доли размеров страницы. Чтобы получить пиксели, Left и Width умножают на ширину изображения, а Top и Height — на высоту. Polygon описывает контур точками и полезен для повёрнутых или искажённых элементов.

Нормализованные координаты не зависят от конкретного разрешения предпросмотра. Один и тот же ответ можно наложить на уменьшенную миниатюру и на полноразмерный скан. В интерфейсе проверки рамка должна масштабироваться вместе со страницей. При изменении ориентации или предварительном повороте необходимо убедиться, что изображение и координаты относятся к одной версии файла.

Геометрия позволяет не только подсвечивать OCR. По ней проверяют, находится ли подпись рядом с нужной меткой, объединяют слова в строку, определяют колонки, скрывают конфиденциальный фрагмент и сохраняют ссылку на участок страницы для оператора. При редактировании или редактировании маской нельзя полагаться только на визуальный прямоугольник: итоговый PDF должен быть действительно очищен от скрываемых данных, а не просто накрыт цветной фигурой.

Уверенность также относится к конкретному блоку. Её нельзя трактовать как гарантированную вероятность правильности. Значение помогает сортировать результаты и строить правила маршрутизации, но рабочий порог следует подобрать на размеченном наборе документов. Поле с 95 процентами на чистых счетах и такое же значение на рукописной анкете могут иметь разный фактический риск.

Формы, ключи, значения и отметки

При FeatureTypes со значением FORMS Amazon Textract ищет пары ключ — значение. Ключом может быть подпись Номер счёта, Дата рождения или Адрес, значением — соседний текст. В JSON такие элементы представлены блоками KEY_VALUE_SET и связаны отношением VALUE. Это лучше простого поиска ближайшей строки, потому что модель учитывает визуальное расположение и смысловую связь.

Отметки флажков и переключателей возвращаются как SELECTION_ELEMENT со статусом SELECTED или NOT_SELECTED. Элемент может быть связан с полем формы или ячейкой таблицы. При обработке анкеты важно сохранять не только статус, но и текст вопроса, страницу и координаты. Пустой квадрат, плохо пропечатанная галочка и декоративный значок способны дать ложное срабатывание, поэтому критичные ответы проверяют по уверенности и контексту.

Формы не обязаны иметь одинаковое расположение. Однако экстремально свободная компоновка, длинные многострочные значения и подписи, удалённые от поля, повышают риск неверной связи. Для таких документов полезны Queries: вместо извлечения всех пар можно спросить конкретный реквизит. Если компания постоянно получает нестандартный собственный бланк, Custom Queries позволяет дообучить поведение на размеченных образцах.

После получения пар их обычно нормализуют. Даты приводят к единому формату, суммы очищают от валютных символов и разделителей, телефонные номера разбирают по правилам страны, а названия полей сопоставляют с внутренней схемой. Сам сервис возвращает распознанные значения и связи, но не знает бизнес-правил конкретной организации.

Извлечение таблиц

Режим TABLES возвращает таблицы, ячейки, объединённые ячейки, заголовки столбцов, названия, разделы, сноски, итоговые ячейки и тип таблицы. Ячейка содержит номер строки и столбца, диапазон объединения, дочерние слова и геометрию. Для экспорта в CSV нужно пройти отношения TABLE → CELL, разместить значения по индексам и корректно обработать пустые позиции.

Structured table обычно имеет явную сетку и регулярные строки. Semistructured table может выглядеть как список с выравниванием без полноценных границ. Тип помогает выбрать постобработку, но не отменяет проверку. Если строка товара переносится на две визуальные строки, описание может попасть в несколько блоков; если итог расположен вне основной сетки, его лучше читать как summary cell или отдельное поле.

Для хорошего результата таблица должна визуально отделяться от фона и соседних элементов. Фоновое изображение, водяной знак, сильный наклон, очень тонкие линии и склеенные столбцы ухудшают структуру. При возможности следует передавать исходный PDF без уменьшения. В фотографии документа полезно исправить перспективу и убедиться, что вся таблица помещается в кадр.

В консоли вкладка Tables показывает текущую таблицу, ячейки и опцию объединённого представления. Это удобно для быстрой диагностики: можно увидеть, где столбцы смешались, не открывая JSON. Для производственного контроля стоит сравнивать количество строк, обязательные заголовки и арифметику итогов. Например, сумма позиций и налог могут использоваться как независимая проверка извлечённого итога.

Amazon Textract: строки счета в табличном виде

Функция Layout и порядок чтения

Layout расширяет обычный OCR структурой страницы. В ответе могут появляться блоки заголовков, подзаголовков, списков, абзацев, таблиц, ключей и значений, верхних и нижних колонтитулов, номеров страниц и иллюстраций. Это полезно, когда текст нужно передать в поисковую систему или языковую модель с сохранением логики документа.

При подготовке текста для индекса блоки Layout можно линейно соединять в порядке чтения, сохраняя границы разделов. Заголовок отделяют от последующего абзаца, элементы списка маркируют, а таблицы передают отдельно. Такой подход уменьшает вероятность того, что система объединит конец одной колонки с началом другой или потеряет роль заголовка.

Layout не создаёт редактируемый DOCX и не восстанавливает исходные шрифты. Он описывает смысловые зоны в JSON. Если задача состоит в визуальном переиздании документа, потребуется собственный генератор. Если задача — поиск, классификация, суммаризация или извлечение контекста, структурные блоки обычно полезнее попытки воспроизвести внешний вид.

Фигуры и графики могут быть отмечены как элементы макета, но распознавание подписей не превращает диаграмму в таблицу данных. Для графиков, формул и сложных схем может потребоваться специализированный анализ. Перед внедрением следует определить, какие части документа действительно должны стать структурированными полями, а какие достаточно сохранить как изображение со ссылкой на страницу.

Queries: точечные вопросы к документу

Queries позволяет сформулировать вопрос на естественном языке, например What is the invoice date? или What is the current gross pay?. В запросе можно задать Alias — стабильное техническое имя поля. Ответ возвращается блоком QUERY_RESULT с текстом, уверенностью и геометрией, а QUERY хранит исходный вопрос и псевдоним.

Запросы удобны, когда одно и то же значение подписано по-разному или не образует очевидную пару ключа и значения. Вместо перебора всех вариантов Account ID, Customer number и Client no. приложение задаёт смысловой вопрос. Это уменьшает объём правил, но качество всё равно проверяют на разных макетах и формулировках.

В консоли запросы вводятся на вкладке настройки документа. После Apply Configuration ответы появляются в отдельной вкладке. Для многостраничного вызова можно указать страницы, на которых действует вопрос. Если страница не задана для адаптера или запроса, важно проверить поведение параметров конкретной операции; при пакетном тестировании Bulk Uploader запросы применяются только к первой странице каждого документа.

Хороший вопрос должен быть конкретным и однозначным. Формулировка What is the date? может вернуть дату операции, рождения или выдачи. Лучше спрашивать What is the invoice due date? и назначить alias INVOICE_DUE_DATE. Не следует объединять несколько полей в один вопрос. Для каждого реквизита задают отдельный запрос, чтобы получить отдельную уверенность и координаты.

Amazon Textract Queries: вопросы и ответы по карточке

Обнаружение подписей

FeatureTypes со значением SIGNATURES ищет рукописные подписи, электронные подписи и инициалы. В ответе блок SIGNATURE содержит уверенность и координаты. Функция определяет наличие и расположение графического элемента, но не подтверждает личность подписанта и не сравнивает подпись с эталоном.

Подписи можно анализировать вместе с FORMS или TABLES. Тогда геометрия помогает проверить, находится ли подпись в ожидаемом поле, а связи формы позволяют сопоставить её с подписью Signature of Applicant или аналогичной меткой. Для юридически значимого контроля необходимо дополнительно учитывать тип документа, обязательность поля, дату и правила электронной подписи.

Практические рекомендации AWS указывают, что функция лучше работает, когда на странице не более трёх подписей. Если их больше, страницу можно разделить на области и анализировать части отдельно. Низкую уверенность направляют оператору. Разборчивую подпись иногда удаётся прочитать как текст, однако это не гарантировано и не должно использоваться как надёжная идентификация.

В интерфейсе результат показывается на вкладке Signatures: отображаются количество найденных подписей, страница и confidence score. В производственной системе полезно хранить рамку и миниатюру области, чтобы проверяющий видел контекст, а не только число. Для отсутствующей подписи следует различать не найдена и страница не обработана из-за ошибки.

Amazon Textract: обнаруженная подпись в ипотечном документе

Счета и чеки через AnalyzeExpense

AnalyzeExpense возвращает ExpenseDocuments. Каждый документ содержит SummaryFields и LineItemGroups. В сводных полях находятся поставщик, номер документа, дата, адреса, промежуточный итог, налог, итог, условия оплаты и другие реквизиты. В группах строк перечисляются товары или услуги с нормализованными типами, такими как ITEM, QUANTITY, UNIT_PRICE и PRICE.

Нормализованный Type важнее исходной подписи. В разных счетах один идентификатор может называться Invoice No., Bill Number или Account ID, а сервис пытается представить его единым типом. Одновременно сохраняются LabelDetection и ValueDetection, поэтому приложение может показать оператору исходную метку и значение. Для поля без явной подписи LabelDetection может отсутствовать.

В консоли вкладка Summary fields показывает карточки значений и строку поиска, а Line item fields — таблицу позиций. На документе видны рамки найденных фрагментов. Такой просмотр быстро выявляет типичные проблемы: поставщик определён по логотипу, но сумма взята не из итога; налог и промежуточный итог перепутаны; строка товара перенесена и разделена.

Для бухгалтерского процесса одного OCR недостаточно. После анализа проверяют валюту, формат даты, дубликаты счетов, совпадение поставщика со справочником, арифметику и допустимый диапазон суммы. Низкоуверенные поля отправляют на ручную проверку. Исходный JSON полезно сохранять вместе с нормализованной записью, чтобы можно было восстановить решение и показать координаты.

Amazon Textract: сводные поля кассового чека

Удостоверения личности через AnalyzeID

AnalyzeID предназначен для структурированного извлечения полей из удостоверений личности, включая водительские удостоверения и паспорта, выданные государственными органами США. Ответ содержит IdentityDocuments и набор IdentityDocumentFields. Для каждого поля возвращаются тип, значение, уверенность и геометрия.

Типы полей нормализуются: имя, фамилия, дата рождения, номер документа, дата выдачи, срок действия, адрес и другие реквизиты можно сопоставить с внутренней анкетой. Реальный набор зависит от документа. Приложение должно корректно обрабатывать отсутствующие поля и не считать пустое значение ошибкой API.

Фотография удостоверения требует особенно аккуратной подготовки. Блики на ламинации, обрезанные края, наклон, пальцы в кадре и низкое разрешение ухудшают результат. Лучше просить пользователя разместить документ на контрастном фоне, полностью включить его в кадр и проверить резкость перед отправкой. Конфиденциальные данные следует хранить и передавать по правилам организации.

AnalyzeID извлекает текстовые реквизиты, но не выполняет полный процесс проверки личности. Проверка подлинности документа, сравнение лица, санкционные списки и подтверждение владения требуют других компонентов. Нельзя трактовать успешное извлечение номера и имени как доказательство, что документ настоящий.

Ипотечные пакеты через AnalyzeLending

AnalyzeLending рассчитан на пакеты ипотечных документов. Сначала страницы классифицируются, затем направляются к подходящему анализу. В сводке указываются число просмотренных страниц, классифицированные и неклассифицированные страницы, найденные типы документов и наличие подписей. Подробный результат содержит извлечённые поля по страницам.

Демонстрация показывает карусель документов: payslip, check, identity document, налоговые формы, банковскую выписку и неклассифицированную страницу. Для чека отображаются routing number, account number, дата, имя и сумма, а также обнаруженная подпись. Для расчётного листка выводятся период, работодатель, адрес, статус подачи и суммы заработка.

Демо-консоль накладывает собственные ограничения для пробной загрузки: пакет до 5 МБ и не более 10 страниц. Эти ограничения не равны пределам API, где многостраничный документ может быть значительно больше. Результаты демо можно выгрузить пакетом с JSON и CSV. При разработке следует ориентироваться на официальные квоты операции, а не на возможности пробного экрана.

Обработка ориентирована на американские ипотечные документы. Пакеты другой страны, нестандартные финансовые формы и смешанные пакеты документов могут классифицироваться хуже. Неклассифицированную страницу нельзя молча удалять: её сохраняют, регистрируют причину и направляют на дополнительный анализ или ручную сортировку.

Amazon Textract Analyze Lending: сводка пакета Amazon Textract Analyze Lending: поля расчетного листка

Массовая проверка через Bulk Document Uploader

Bulk Document Uploader позволяет оценить качество на наборе без написания кода. За один запрос можно обработать до 150 документов. Документы берутся из существующей папки S3 или файлы с компьютера. При локальной загрузке за один приём добавляется до 50 файлов; последующие партии доводят общий набор до 150.

После загрузки выбирается одна функция: DetectDocumentText, AnalyzeDocument Tables, Queries, Forms или Signatures, либо AnalyzeExpense. Для сравнения нескольких функций создают отдельные запросы. Если выбраны Queries, можно задать до 30 вопросов, но в массовом загрузчике они применяются только к первой странице каждого документа.

Каждый файл обрабатывается отдельно и появляется в таблице Submitted documents со статусом, датой, типом, выбранной функцией и размером. Готовые результаты скачиваются единым пакетом. В нём находятся стандартный JSON ответа API и человекочитаемый CSV с извлечёнными значениями и уверенностью. Результаты доступны семь дней, а записи очищаются позднее, поэтому выгрузку нужно сохранить вовремя.

Инструмент предназначен для оценки, а не для постоянной производственной очереди. Он не строит бизнес-маршрутизацию, не устраняет дубликаты и не переносит значения в учётную систему. Его сильная сторона — быстро сравнить качество на десятках реальных образцов, подобрать пороги и понять, какая функция подходит набору.

Amazon Textract Bulk Document Uploader Amazon Textract: импорт набора из S3 Amazon Textract: выбор функции для массовой обработки Amazon Textract: готовые результаты массовой обработки

Custom Queries и адаптеры

Адаптеры Custom Queries настраивают предобученную функцию Queries под документы организации. Процесс включает создание адаптера, формирование набора, вопросы, разметку ответов, обучение, оценку и повторное улучшение. Это полезно для нестандартных договоров, чеков, платёжных ведомостей и других форм, где общая модель стабильно ошибается в конкретных полях.

Набор разделяется на обучение и тестирование. Документы можно размечать автоматически или вручную. Автоматическая разметка создаёт исходные ответы, но их необходимо проверить. В интерфейсе Review responses оператор выбирает вопрос, исправляет текст, добавляет несколько ответов или рисует bounding box вокруг правильного фрагмента. Для ответа Yes/No доступны отдельные значения.

После проверки запускается обучение версии адаптера. На странице оценки показываются F1 score, Precision и Recall, а показатели можно смотреть по вопросу, документу и странице. Важна не только общая цифра: один обязательный реквизит может иметь низкий recall, хотя средняя метрика выглядит высокой. Перед внедрением задают минимальные показатели для каждого критичного поля.

Для повторного обучения добавляют минимум пять документов в тренировочный набор, проверяют разметку и создают новую версию. Каждая версия имеет собственный идентификатор. При вызове AnalyzeDocument или StartDocumentAnalysis указывают Adapter ID и версию; страницы можно распределять между адаптерами, но одна страница не должна перекрываться несколькими адаптерами.

Amazon Textract Custom Queries: выбор разметки Amazon Textract Custom Queries: проверка ответа Amazon Textract Custom Queries: набор для обучения Amazon Textract Custom Queries: метрики адаптера

Синхронные вызовы

Синхронная операция возвращает результат в том же запросе. Документ можно передать как Bytes или указать S3Object. SDK обычно сам кодирует байты, а при прямом JSON они представлены Base64. AWS CLI не принимает документ через Bytes, поэтому для командной строки файл размещают в S3.

Синхронный режим подходит для одностраничной формы, фотографии чека и интерактивного экрана, где пользователь ждёт ответ. Код должен устанавливать разумный тайм-аут, обрабатывать повторяемые ошибки и не блокировать интерфейс. Даже при небольшом файле задержка зависит от функции и нагрузки, поэтому индикатор обработки обязателен.

DetectDocumentText, AnalyzeDocument, AnalyzeExpense и AnalyzeID имеют разные запросы и структуры ответа. Не следует писать один общий обработчик, который предполагает наличие Blocks везде. Например, AnalyzeExpense группирует данные в ExpenseDocuments, а AnalyzeID — в IdentityDocuments. Общий слой может хранить метаданные, но парсеры должны учитывать схему операции.

При передаче байтов приложение отвечает за чтение файла и его размер. Перед запросом полезно проверить расширение, MIME-тип, число страниц и отсутствие пароля. Пользовательская ошибка должна быть объяснена до отправки, иначе он увидит общее сообщение UnsupportedDocumentException или BadDocumentException без понятного способа исправления.

Асинхронная обработка многостраничных документов

Асинхронная схема начинается операцией Start: StartDocumentTextDetection, StartDocumentAnalysis, StartExpenseAnalysis или StartLendingAnalysis. В ответ возвращается JobId. После завершения вызывается соответствующая операция Get. Для крупного результата используется NextToken, поэтому приложение должно читать все страницы ответа, а не только первую.

Исходный документ размещается в S3. Статус завершения публикуется в Amazon SNS; подписчиком может быть очередь SQS или функция Lambda. Такой подход не требует постоянного опроса. Обработчик получает уведомление, извлекает JobId и забирает результат. SNS topic должен находиться в том же регионе, что и вызываемый endpoint, а роль должна разрешать Textract публикацию.

По умолчанию результаты асинхронной операции хранятся в управляемом хранилище Textract семь дней. Через OutputConfig можно указать собственный S3 bucket и при необходимости ключ KMS. Это предпочтительно для длительного хранения, повторной обработки и аудита. Политики жизненного цикла S3 позволяют автоматически удалять промежуточные JSON после установленного срока.

ClientRequestToken помогает сделать запуск идемпотентным: повторный запрос с тем же токеном и параметрами не должен создавать дублирующую работу. В очереди необходимо учитывать повторную доставку уведомлений. Перед записью результата проверяют, не обработан ли JobId ранее, и используют уникальный ключ документа.

Структура JSON и отношения между блоками

Основной массив Blocks представляет граф, а не плоский список. Каждый блок имеет Id. Relationships содержит тип связи и список идентификаторов. PAGE связан с дочерними блоками, TABLE — с CELL и MERGED_CELL, KEY — с VALUE, QUERY — с QUERY_RESULT. Чтобы быстро находить объекты, сначала строят словарь Id → Block.

Парсер таблиц проходит от TABLE к ячейкам и сортирует их по RowIndex и ColumnIndex. Парсер форм выбирает KEY_VALUE_SET с EntityTypes, содержащим KEY, затем следует по отношению VALUE. Текст значения собирается из дочерних WORD и SELECTION_ELEMENT. Парсер запросов находит QUERY_RESULT через ANSWER. Такая схема устойчивее, чем поиск соседнего элемента в массиве.

DocumentMetadata сообщает число страниц. ResponseMetadata содержит идентификатор запроса и служебные сведения SDK. В асинхронном ответе дополнительно встречаются JobStatus, StatusMessage, Warnings и NextToken. Предупреждение о частичном успехе нельзя игнорировать: часть страниц могла не обработаться, хотя работа в целом вернула результат.

Сохранять весь JSON полезно для повторного парсинга. Внутренняя схема приложения может измениться: сегодня нужны только сумма и дата, завтра — координаты строки товара. Если оставлен только CSV, восстановить связи и рамки будет невозможно. При хранении следует учитывать конфиденциальность и срок, установленный политикой данных.

Уверенность и ручная проверка

Confidence возвращается для текста, полей, запросов, подписей и других объектов. Порог 90 или 95 процентов нельзя переносить между всеми сценариями без проверки. Для номера счёта одна неверная цифра критична, а для полнотекстового поиска допустима небольшая ошибка. Порог выбирают отдельно по типу поля и стоимости ошибки.

Размеченный тестовый набор должен включать разные поставщики, качество сканов, языки, повороты и редкие макеты. Для каждого поля считают precision, recall и долю документов, которые потребовали ручной проверки. Если порог слишком высокий, оператор будет проверять почти всё; если низкий, ошибки попадут в систему.

Экран оператора должен показывать исходную страницу, выделенный фрагмент, распознанное значение, уверенность и соседние поля. Одного текста недостаточно: человек не поймёт, откуда он взят. Исправление сохраняют отдельно от исходного ответа, чтобы анализировать ошибки модели и при необходимости готовить набор для адаптера.

Правила могут комбинировать уверенность с бизнес-проверками. Сумма с высокой уверенностью всё равно подозрительна, если не сходится с итогом строк. Дата может быть распознана правильно, но выходить за допустимый период. Номер документа проверяют по маске и контрольной цифре. Такой слой снижает риск, не пытаясь заменить модель ручными регулярными выражениями.

Подготовка изображений

Первый способ улучшить результат — передать наиболее качественный оригинал. Цифровой PDF обычно предпочтительнее снимка экрана. Скан следует делать без сильного сжатия, примерно от 150 DPI, с ровной ориентацией и полной страницей. Не нужно увеличивать маленькую картинку интерполяцией: она станет больше, но новых деталей не появится.

Фотографии выравнивают по перспективе, исправляют поворот и убирают лишний фон. Контраст можно улучшить, но агрессивная бинаризация стирает тонкие знаки и подписи. Для цветных удостоверений и чеков сначала стоит проверить оригинал. Предобработка должна быть воспроизводимой: сохраняют исходник и параметры преобразования.

Многостраничный TIFF иногда создаётся сканером с нестандартным сжатием. При ошибке полезно пересохранить его стандартным кодеком или конвертировать в PDF без уменьшения. PDF с паролем необходимо разблокировать до отправки. Если страница превышает допустимые размеры, её масштабируют или разбивают, контролируя читаемость мелкого текста.

Таблицы лучше распознаются, когда линии и ячейки не накладываются на фон. Для чеков важно не обрезать верх с названием магазина и низ с итогом. Для удостоверений нужны все края. Для формы с галочками разрешение должно позволять отличить отметку от пустого квадрата и дефекта печати.

Языки и особенности текста

Официальные рекомендации указывают поддержку печатного и рукописного текста на английском, испанском, немецком, итальянском, французском и португальском. Русский язык не входит в этот список. Документ на русском может дать отдельные случайные символы, но такой результат нельзя использовать как поддерживаемое распознавание.

Даже в поддерживаемом языке качество зависит от шрифта и контекста. Декоративные заголовки, очень мелкий кегль, вертикальный текст, печать поверх фона и сложная рукопись требуют теста. В смешанном документе модель может распознать латинские номера и даты, но пропустить неподдерживаемый алфавит.

Для многоязычной коллекции сначала определяют состав. Если значительная часть документов на русском, нужен другой OCR или предварительная маршрутизация. Textract можно оставить для английских счетов и форм, а остальные файлы отправлять в движок с нужными языками. Результаты затем приводят к единой внутренней схеме.

Нормализация текста должна учитывать локаль. Запятая может быть десятичным разделителем, день и месяц меняются местами, а сокращения адресов различаются. OCR возвращает видимый текст; окончательное толкование даты и суммы выполняет приложение с известной страной документа.

Работа с PDF

PDF может содержать цифровой текст, сканированные страницы или их сочетание. Textract анализирует визуальное представление и возвращает собственные блоки. Он не редактирует объекты PDF, не меняет страницы и не создаёт слой распознавания внутри исходного файла. Для поиска результат сохраняют отдельно или используют для генерации нового поискового документа.

Синхронный анализ PDF ограничен одной страницей, поэтому многостраничные документы отправляют асинхронно через S3. Если нужна интерактивная обработка отдельной страницы, приложение может извлечь её в новый одностраничный PDF или изображение. При этом необходимо сохранять исходный номер страницы для последующей подсветки.

Защищённый паролем PDF будет отклонён. Ограничение действует даже если пользователь может открыть документ в просмотрщике. Пароль снимают разрешённым способом до загрузки. Файл с повреждённой таблицей перекрёстных ссылок или нестандартной структурой иногда полезно пересохранить в исправный PDF, но пересохранение проверяют визуально.

Встроенный JPEG 2000 внутри PDF поддерживается. Конвертация такого PDF в JPEG не обязательна. Слишком большой физический размер страницы и экстремальные размеры в пунктах вызывают ошибку. Для инженерных чертежей и длинных чеков следует заранее проверять геометрию страницы.

Доступы IAM и безопасность

Для вызова API субъекту IAM нужны разрешения соответствующих действий Textract. При чтении из S3 добавляются разрешения на объект. Асинхронная схема требует роли, позволяющей публикацию в SNS, а OutputConfig — запись в выбранный bucket и доступ к KMS при пользовательском ключе. Политику лучше ограничить нужными действиями и ресурсами.

Не следует встраивать долгоживущие access key и secret key в клиентское приложение или репозиторий. Для серверов используют роли, для локальной разработки — профиль AWS, для внешнего веб-клиента — контролируемый backend или временные полномочия. Журналы не должны содержать секреты и полный текст конфиденциального документа.

Данные адаптера шифруются при передаче и хранении; обучение выполняется в выбранном регионе. При создании версии можно указать собственный KMS key. Исходные документы, результаты, миниатюры и исправления оператора должны подчиняться одной политике доступа и удаления.

CloudTrail регистрирует вызовы консоли и API. Для приватного доступа из VPC доступны interface endpoints AWS PrivateLink, включая обычное и FIPS-имя сервиса. Endpoint policy может ограничить разрешённые действия, например оставить DetectDocumentText и AnalyzeDocument. Это не заменяет IAM-политику, а добавляет ещё один уровень контроля.

Мониторинг и квоты

CloudWatch публикует SuccessfulRequestCount, ThrottledCount, ResponseTime, ServerErrorCount и UserErrorCount с измерением Operation. Графики строят отдельно для ключевых операций. Рост UserErrorCount обычно указывает на неверные параметры, неподдерживаемые файлы или недостаточные разрешения; ThrottledCount — на превышение запросов в секунду.

Квоты разделяются на TPS для синхронных и асинхронных операций, число одновременных работ и ограничения адаптеров. Значения зависят от региона и аккаунта. Изменяемые квоты просматриваются в Service Quotas и при необходимости увеличиваются. В консоли Textract есть калькулятор, который помогает оценить требуемую пропускную способность.

При проектировании считают не только среднее число страниц, но и пики. Если в конце месяца поступает в десять раз больше счетов, очередь должна сгладить нагрузку. Асинхронный запуск ограничивают контролируемым числом параллельных работ, а при throttling применяют экспоненциальную задержку и случайный jitter.

Стоимость начисляется по обработанным страницам и выбранным функциям. Один документ, отправленный отдельно на OCR, формы, таблицы и запросы, создаёт несколько операций. Перед запуском следует определить минимальный набор функций и измерить число страниц. Для теста на большом наборе документов удобно сначала обработать репрезентативную выборку.

Ошибки и способы устранения

UnsupportedDocumentException указывает на неподдерживаемый или неправильно закодированный файл. Проверяют реальный MIME-тип, расширение, пароль PDF, количество страниц для синхронного режима и возможность открыть документ обычным просмотрщиком. BadDocumentException часто означает повреждение или невозможность прочитать содержимое.

DocumentTooLargeException возникает при превышении размера или страничного лимита. Для многостраничного PDF переходят на асинхронную операцию, уменьшают файл без потери читаемости или разделяют пакет. InvalidParameterException требует сверить имена параметров, FeatureTypes, страницы Queries и структуру S3Object.

AccessDeniedException устраняют проверкой IAM, bucket policy, региона и роли уведомлений. S3 объект должен быть доступен вызывающему субъекту и находиться в поддерживаемой схеме. Для SNS проверяют разрешение публикации и совпадение региона. При KMS ошибка может быть связана с политикой ключа, а не с Textract.

ProvisionedThroughputExceededException и throttling требуют повторной попытки с экспоненциальной задержкой. Мгновенный повтор создаёт ещё большую нагрузку. Для постоянного превышения увеличивают квоту или ограничивают параллелизм. InternalServerError повторяют безопасно, используя идемпотентность и регистрацию JobId.

В обучении адаптера встречаются ошибки слишком большого изображения, неверного числа страниц, неподдерживаемого PDF, TIFF или исходного формата, а также повторяющейся ссылки source-ref. Интерфейс показывает сообщение, но для системного разбора полезно сохранять код ошибки и имя файла. Исправленный документ добавляют как новый корректный образец, не скрывая первоначальный сбой.

Практический процесс обработки счетов

  1. Файл поступает в отдельный префикс S3 с уникальным идентификатором.
  2. Событие создаёт сообщение в очереди и запускает AnalyzeExpense.
  3. После завершения приложение получает JSON и сохраняет неизменный оригинал ответа.
  4. SummaryFields и LineItemGroups преобразуются во внутреннюю схему.
  5. Проверяются поставщик, номер, дата, валюта, итог и арифметика строк.
  6. Сомнительные значения показываются оператору вместе с рамкой на странице.
  7. Подтверждённые данные передаются в бухгалтерскую систему, а документ связывается с записью.

Для защиты от дублей вычисляют хеш файла и отдельный бизнес-ключ, например поставщик + номер + дата + сумма. Хеш не обнаружит один и тот же счёт после пересканирования, а бизнес-ключ может дать ложное совпадение, поэтому используют оба признака. Низкая уверенность номера повышает приоритет ручной проверки.

Итог не следует принимать только по типу TOTAL. На документе могут быть subtotal, tax, amount due и already paid. Схема должна хранить исходный тип и значение, а бизнес-правило выбирает нужное поле. Для строк проверяют количество, цену и сумму; расхождение фиксируют, но не пытаются автоматически исправить OCR без следа.

Если один PDF содержит несколько счетов, асинхронный AnalyzeExpense возвращает несколько ExpenseDocuments. Приложение должно разделить их по ExpenseIndex и страницам. Сохранение только первого элемента приведёт к потере документов.

Полнотекстовый поиск по документам

Для поискового хранилища достаточно DetectDocumentText или Layout. После обработки строки связывают с документом и страницей, нормализуют пробелы и индексируют. Координаты сохраняют для подсветки. Полный JSON помещают в объектное хранилище, а в поисковый индекс — текст, заголовки, даты и права доступа.

Layout помогает разделить заголовки, абзацы, списки и колонтитулы. Колонтитулы можно исключить из полнотекстового индекса, чтобы одинаковое название компании не доминировало во всех результатах. Заголовкам назначают больший вес. Таблицы индексируют как отдельные записи или преобразуют в линейный текст с указанием столбцов.

Права на найденный текст должны повторять права исходного документа. Нельзя индексировать конфиденциальный файл в общей коллекции только потому, что JSON хранится отдельно. При удалении исходника удаляют и текст, миниатюры, embeddings и результаты ручной проверки.

Для качества поиска полезно хранить язык, уверенность и признак рукописи. Страницы с низким средним confidence можно повторно сканировать. Если коллекция многоязычная, перед индексацией включают маршрутизацию на OCR с нужным языком, иначе отсутствующий русский текст сделает поиск неполным.

Анкеты, заявления и клиентские формы

Для стабильной анкеты начинайте с FORMS и SELECTION_ELEMENT. Извлеките ключи, значения и отметки, затем сопоставьте названия с внутренними полями. Для значений без явной метки добавьте Queries. Если один и тот же корпоративный бланк регулярно даёт ошибки, подготовьте адаптер Custom Queries на реальных вариантах.

Поля с персональными данными проверяют по маске и контексту. Дата рождения не должна автоматически заменяться ближайшей датой. Адрес может занимать несколько строк; при объединении учитывают геометрию и отношение VALUE. Галочка рядом с согласен имеет другое значение, чем такая же отметка в рекламном блоке.

Экран ручной проверки должен показывать только поля, требующие внимания, но позволять открыть всю страницу. Если оператор исправляет ответ, система сохраняет исходное значение, новое значение, пользователя и время. Эти данные помогают оценить ошибки и создать обучающий набор без повторной разметки.

Для ответа клиенту не следует ждать обработки огромного пакета в синхронном запросе. Форма может загружаться быстро, а многостраничные приложения обрабатываются очередью. Пользователь получает идентификатор и статус, а не зависший браузер.

Интеграция с приложением

В backend создаётся клиент Textract выбранного региона. Конфигурация содержит bucket входа, bucket результата, topic SNS, очередь SQS, роль и при необходимости KMS key. Эти параметры не зашивают в код: их передают через переменные окружения или систему конфигурации.

Слой запуска проверяет файл и выбирает операцию. Слой получения результата читает все страницы ответа. Слой парсинга преобразует Blocks, ExpenseDocuments или IdentityDocuments в единую доменную модель. Слой валидации применяет бизнес-правила. Такая структура упрощает тестирование и замену OCR для отдельных языков.

Для юнит-тестов используют сохранённые JSON-ответы без повторного вызова сервиса. Для интеграционных тестов создают небольшой набор файлов с известными значениями. Изменение парсера проверяют на старых ответах, потому что редкие отношения таблиц или пустые поля могут не встречаться в новом образце.

Необходимо логировать request id, operation, region, bucket key, JobId, длительность, число страниц и итоговый статус. Полный распознанный текст в лог не помещают. Для расследования достаточно ссылки на защищённый объект и идентификатора запроса.

Нормализация ответа AnalyzeExpense

В одном ExpenseDocument сводные поля и строки товаров имеют независимые индексы и геометрию. При разборе сначала сохраняют ExpenseIndex, затем перебирают SummaryFields. У элемента Type есть текст нормализованного типа и уверенность; ValueDetection хранит распознанное значение, координаты и собственную уверенность; LabelDetection присутствует, если модель нашла подпись. Нельзя заменять уверенность значения уверенностью типа: они описывают разные решения модели.

Поле OTHER не означает ошибку. Оно используется для полезной пары, которую сервис не отнёс к стандартной таксономии. Приложение может сохранить исходную метку, значение и координаты, а затем сопоставить их со своей схемой. Если неизвестное поле игнорировать, можно потерять номер заказа, код проекта или внутренний идентификатор поставщика.

LineItemGroups содержит группы строк, каждая строка — набор LineItemExpenseFields. Не следует предполагать, что в каждой строке обязательно есть количество, цена за единицу и итог. Чек может содержать только название и сумму, а счёт — скидку, налоговую ставку или код товара. Парсер строит разреженную запись и оставляет отсутствующие значения пустыми, а не сдвигает соседний столбец.

Если документ содержит несколько счетов или чеков, ExpenseIndex разделяет их. Для каждого экземпляра формируют отдельную бизнес-запись и сохраняют страницы, к которым относятся поля. При визуальной проверке оператор должен переключаться именно на нужный ExpenseDocument, иначе одинаковые номера или суммы на соседних страницах создадут путаницу.

Нормализация суммы выполняется после OCR. Сначала сохраняют исходную строку, затем удаляют символ валюты и разделители тысяч с учётом локали, преобразуют число в decimal и записывают валюту отдельно. Использование binary float для денежных значений способно дать округление. Если валюта не найдена, её нельзя автоматически считать валютой аккаунта без бизнес-правила.

Разбор форм и таблиц без потери связей

Для формы создают индекс блоков по Id и отдельные списки ключей, значений, слов и отметок. Текст KEY собирают только из его дочерних элементов, затем по отношению VALUE переходят к связанному блоку значения. Поиск ближайшего текста по координатам используется только как диагностический резерв, потому что он может связать поле с соседней колонкой.

При сборке текста дочерние WORD соединяют пробелами, а SELECTION_ELEMENT преобразуют в явное значение, например true или false. Если у значения несколько строк, их порядок уточняют по Top и Left. Координаты ключа и значения сохраняют раздельно: это позволяет показать обе рамки и проверить, действительно ли они относятся друг к другу.

Таблицу восстанавливают по RowIndex и ColumnIndex. RowSpan и ColumnSpan учитывают до записи в матрицу. MERGED_CELL не следует дублировать во всех ячейках без пометки: иначе при экспорте заголовок повторится и будет принят за данные. COLUMN_HEADER, TABLE_TITLE, TABLE_FOOTER, TABLE_SECTION_TITLE и TABLE_SUMMARY дают дополнительную семантику, которую полезно хранить отдельно от обычных строк.

CSV не способен полностью выразить объединённые ячейки, несколько таблиц на странице и геометрию. Поэтому CSV удобен для проверки человеком, а каноническим результатом лучше считать JSON или собственную структуру с координатами. При экспорте нескольких таблиц каждой назначают идентификатор страницы и порядковый номер.

После восстановления таблицы применяют структурные проверки. Ожидаемые заголовки должны присутствовать, число столбцов не должно неожиданно меняться, а итоговая строка не должна попадать в середину данных. Для финансовой таблицы сравнивают сумму строк; для ведомости проверяют обязательные идентификаторы. Ошибка структуры направляется на проверку даже при высокой уверенности отдельных слов.

Регион, конечные точки и размещение данных

Клиент Textract создаётся для конкретного AWS Region. S3 bucket с исходным документом, SNS topic для уведомлений и другие связанные ресурсы должны быть согласованы с выбранной схемой. В асинхронном процессе особенно важно совпадение региона SNS topic и endpoint Textract. Ошибка размещения проявляется как отказ доступа или неверный параметр, хотя сами политики могут выглядеть правильными.

Регион выбирают с учётом доступности нужной функции, требований к местонахождению данных, задержки и существующей инфраструктуры. Не все специализированные возможности обязаны появляться одновременно во всех регионах, поэтому перед проектированием проверяют таблицу доступности и делают тестовый вызов. Конфигурацию региона хранят явно, а не полагаются на случайный default profile разработчика.

Для изолированной сети создают interface VPC endpoint с сервисным именем Textract выбранного региона. При включённом private DNS приложение продолжает обращаться к стандартному имени endpoint, а трафик идёт через PrivateLink. Endpoint policy может запретить ненужные действия, но пользователь или роль всё равно должны иметь соответствующие IAM-разрешения.

FIPS endpoint выбирают там, где это требуется политикой. Его имя и доступность проверяют отдельно. Нельзя смешивать обычный endpoint в одной части приложения и FIPS в другой без документированной причины: это усложняет аудит и диагностику. В логах полезно сохранять фактический регион и тип endpoint каждого запроса.

Перенос процесса в другой регион включает копирование исходников, настройку политик, topic, queue, ключей KMS, квот и адаптеров. Одного изменения строки региона недостаточно. Тест миграции должен подтвердить, что уведомления приходят, результаты записываются в правильный bucket, а служба ручной проверки видит новые объекты.

Надёжная очередь и восстановление после сбоев

Каждому входному документу назначают неизменный идентификатор. Состояние проходит этапы received, validated, submitted, processing, succeeded, partial, failed и reviewed. JobId хранится рядом с идентификатором документа. Это позволяет после перезапуска продолжить получение результата, а не создавать новую работу.

SQS может доставить сообщение повторно. Обработчик сначала проверяет таблицу состояния и наличие результата. Если работа уже завершена, повтор считается успешным и удаляется из очереди. Если один документ случайно запустить дважды, бизнес-запись не должна удвоиться. Идемпотентность обеспечивают ClientRequestToken, уникальные ключи и условная запись в базе.

Сообщение, которое несколько раз завершилось ошибкой, перемещают в dead-letter queue. В него включают ссылку на документ, операцию, код ошибки и число попыток, но не секреты и полный OCR. Оператор или автоматический процесс определяет, нужно ли исправить файл, права или квоту. После исправления сообщение возвращают контролируемо, сохраняя историю.

Уведомление о завершении ещё не означает, что весь результат считан. Get-операция может вернуть NextToken, а JobStatus — PARTIAL_SUCCESS с предупреждениями о страницах. Система объединяет все части, сохраняет Warnings и отмечает неполный документ. Нельзя переводить его в succeeded только потому, что HTTP-код равен 200.

Повторные попытки делят на временные и постоянные. Throttling, сетевой сбой и внутренняя ошибка обычно повторяются с backoff. Неверный формат, пароль PDF и превышение фиксированного размера не исправятся повтором. Для них сразу создаётся понятная ошибка и действие: разблокировать, пересканировать, разделить или выбрать асинхронный режим.

Жизненный цикл и конфиденциальность документов

До загрузки определяют срок хранения исходника, ответа, нормализованных полей, миниатюр и исправлений. Эти объекты часто содержат одинаковые персональные данные, поэтому удаление только PDF не завершает удаление записи. Политика должна охватывать S3, базу, поисковый индекс, очередь ошибок, резервные копии и наборы адаптеров.

Bucket разделяют по назначению: вход, неизменяемое хранилище, промежуточный результат и экспорт. Политики запрещают публичный доступ, включают шифрование и ограничивают роли. Префикс или отдельный bucket для среды разработки не должен содержать реальные клиентские документы без разрешения. Для тестов используют синтетические или обезличенные образцы.

Имя файла и путь S3 могут попасть в CloudTrail, поэтому в ключ не следует помещать фамилию, номер паспорта или диагноз. Безопаснее использовать случайный идентификатор, а пользовательское имя хранить в защищённой базе. В свободных текстовых полях конфигурации также избегают конфиденциальных данных, потому что они могут оказаться в диагностике.

Доступ оператора ручной проверки ограничивают нужными очередями и типами документов. Экран скрывает поля, не относящиеся к задаче. Все изменения журналируются. Экспорт CSV защищают так же, как оригинал: табличный файл может быть даже опаснее, потому что его проще массово скопировать и анализировать.

При удалении адаптера или версии проверяют, что он больше не указан в производственной конфигурации. Обучающие документы и аннотации имеют собственный срок хранения. Качество модели не оправдывает бессрочное хранение персональных образцов, если политика требует удаления.

Методика сравнительного теста

Для честного сравнения Textract с другим решением используют одинаковые исходные файлы и одинаковую целевую схему. Нельзя сравнивать сырой OCR одного сервиса со специализированным invoice processor другого. Сначала определяют задачу: строки и слова, ключи и значения, конкретные поля, таблицы, подписи или классификация пакета.

Разметка должна содержать точное значение, страницу и при необходимости координаты. Для таблиц отмечают строки, столбцы, объединения и итоговые ячейки. Для подписи фиксируют наличие и область, но не имя подписанта. Два разметчика независимо проверяют часть набора, чтобы обнаружить неоднозначные документы.

Метрики считают по полям и по документам. Exact match показывает полное совпадение, normalized match допускает согласованные преобразования пробелов, регистра и формата даты. Character error rate полезен для длинного текста. Для обязательного поля измеряют recall, потому что пропуск может быть опаснее лишнего кандидата.

Стоимость сравнивают на фактической комбинации функций и страниц. Время измеряют от поступления файла до сформированного нормализованного результата, включая очередь и ручную проверку. Решение с быстрым API может оказаться медленнее, если создаёт много сомнительных полей. Итоговая метрика должна отражать стоимость полностью обработанного документа.

Порог confidence настраивают только на тренировочной части, затем фиксируют и применяют к тестовой. Если менять порог после просмотра каждого результата, оценка становится необъективной. Отдельно публикуют долю автоматического прохождения и точность в этой группе.

Переход от демонстрации к производственному процессу

Первый этап — ручная проверка десяти-пятнадцати документов в консоли. Она показывает вкладки, типы полей и очевидные ограничения. Второй этап — Bulk Document Uploader на репрезентативной выборке. Третий — небольшой API-прототип, который сохраняет полный JSON и строит отчёт по размеченным значениям.

До подключения бизнес-системы фиксируют внутреннюю схему данных и правила ошибок. Поле считается обязательным, необязательным или повторяемым; для него задаются тип, формат, порог и ручная проверка. Это предотвращает ситуацию, когда разработчик напрямую записывает любое распознанное значение в бухгалтерию.

Производственная версия добавляет очередь, идемпотентность, мониторинг, шифрование, аудит и удаление. Нагрузочное испытание выполняют с ожидаемым пиком, а не одним файлом. Проверяют throttling, задержку уведомлений, NextToken, частичный успех и восстановление после отключения обработчика.

Запуск проводят постепенно: сначала один тип документа или ограниченная группа поставщиков. Метрики сравнивают с ручным процессом. При ухудшении можно вернуть документ оператору, не останавливая весь поток. После стабилизации расширяют охват и при необходимости обучают адаптеры для сложных полей.

Изменение функции, вопроса, адаптера, порога или парсера оформляют версией конфигурации. Для каждой бизнес-записи сохраняют, какой набор правил её создал. Тогда спорное значение можно воспроизвести и понять, связано ли оно с исходным сканом, моделью, парсером или ручным исправлением.

Сравнение Amazon Textract с аналогами

ПрограммаЛучше подходит дляГлавное ограничение
Amazon TextractПотоков документов в AWS, счетов, форм, запросов и ипотечных пакетовОграниченный список языков OCR
Google Cloud Document AIМногоязычного OCR, процессоров форм и извлечения в Google CloudНужно выбирать тип и версию процессора
Azure AI Document IntelligenceРешений в Azure, предобученных и собственных моделей, Office-документовТребуется ресурс Azure и схема endpoint
ABBYY VantageКорпоративных навыков обработки, сложной верификации и собственных документовБолее сложное внедрение платформы
NanonetsLow-code извлечения, маршрутизации и быстрого обучения собственных моделейКачество зависит от примеров и разметки
PDF CommanderРучного OCR, чтения и редактирования отдельных PDF пользователемНе предназначен для облачного API-потока

Amazon Textract разумно выбирать, когда документы уже поступают в S3, обработка строится на Lambda, SNS и SQS, а нужны формы, таблицы, расходы или запросы. Google Cloud Document AI сильнее подходит для широкого языкового состава и каталога процессоров. Azure AI Document Intelligence удобен организациям, которые используют Azure и хотят сочетать готовые модели с собственным обучением. ABBYY Vantage ориентирован на сложные корпоративные процессы и верификацию, Nanonets — на low-code настройку. PDF Commander полезен не как API-конкурент, а когда сотруднику нужно вручную распознать и отредактировать конкретный файл.

Когда результат нужно дополнять другими сервисами

Textract извлекает содержимое и структуру, но не выполняет все этапы документооборота. Классификация произвольных типов может потребовать отдельной модели. Проверка сущностей, анализ тональности и поиск персональных данных выполняются другими компонентами. Для семантического поиска распознанный текст передают в систему embeddings и индекс.

Человеческая проверка нужна там, где цена ошибки высока. Можно построить собственный интерфейс или использовать сервис организации проверок. Правило маршрутизации учитывает уверенность, сумму, тип поля и несоответствие справочнику. Оператор не должен просматривать документ, если все критичные поля уверенно прошли проверки.

Для редактирования PDF, перестановки страниц, добавления подписи или удаления текста требуется PDF-редактор. Textract не меняет файл. Для перевода нужен переводчик после OCR. Для сравнения подписи с образцом — специализированная биометрическая система. Чёткое разделение задач предотвращает ожидание функций, которых у анализа документов нет.

Сложные графики, математические формулы и фотографии объектов также выходят за основной сценарий. Layout может обозначить область рисунка, но не гарантирует извлечение данных диаграммы. Такие страницы маршрутизируют на специализированную модель, сохраняя общий идентификатор документа и координаты.

Проверка качества перед внедрением

Соберите репрезентативный набор: минимум несколько десятков документов каждого типа, разные поставщики, сканеры, камеры и качество. Разметьте обязательные поля и строки таблиц. Разделите набор на настройку и независимую проверку. Документы одного поставщика не должны полностью попадать только в одну часть, иначе метрики будут завышены.

Измерьте точность по символам для OCR, точное совпадение и нормализованное совпадение для полей, precision и recall для подписей и отметок, а также точность строк таблиц. Отдельно посчитайте долю документов, прошедших без участия человека, и среднее время проверки.

Проверьте деградационные случаи: поворот на несколько градусов, тень, низкий контраст, длинный PDF, пустая страница, повреждённый файл, неподдерживаемый язык и превышение квоты. Система должна не только распознать хороший документ, но и правильно объяснить отказ, повторить временную ошибку и не потерять сообщение.

После запуска сохраняйте статистику по типу документа и каналу поступления. Если новый поставщик резко снижает качество, добавьте его образцы в тест и адаптер. Метрики одной общей группы скрывают локальные проблемы. Изменение порогов оформляйте как версию конфигурации, чтобы можно было сравнить результат до и после.

Ответы на практические вопросы

Можно ли получить только текст без таблиц и форм?

Да. Для этого используется DetectDocumentText. В ответе будут PAGE, LINE и WORD с координатами и уверенностью. Такой режим проще и обычно достаточен для полнотекстового поиска.

Можно ли передать файл прямо с диска?

Синхронные SDK-вызовы принимают байты поддерживаемого одностраничного документа. AWS CLI требует объект S3. Многостраничный PDF или TIFF также обрабатывается асинхронно из S3.

Возвращается ли редактируемый PDF?

Нет. Возвращается структурированный JSON. По нему приложение может создать текстовый файл, CSV, поисковый индекс или новый PDF, но исходный документ не изменяется.

Распознаются ли русские документы?

Русский не входит в официальный список поддерживаемых языков. Для надёжной обработки русскоязычных страниц нужен другой OCR или маршрутизация по языку.

Можно ли распознать подпись владельца?

Функция Signatures находит область подписи и уверенность. Она не устанавливает личность и не подтверждает подлинность. Для сравнения с эталоном нужен отдельный механизм.

Почему таблица возвращается неправильно?

Проверьте качество, наклон, фон, линии и переносы. Используйте исходный PDF без уменьшения, просмотрите вкладку Tables и убедитесь, что парсер учитывает объединённые ячейки, заголовки и индексы строк.

Как обработать PDF на сотни страниц?

Поместите его в S3, запустите StartDocumentTextDetection или StartDocumentAnalysis и получите уведомление через SNS/SQS. Затем считайте все части Get-ответа по NextToken.

Что делать с низкой уверенностью?

Не заменяйте значение догадкой. Покажите оператору страницу и рамку, примените проверки формата и сохраните исправление отдельно. Порог подбирается по размеченным документам.

Можно ли протестировать много файлов без кода?

Bulk Document Uploader обрабатывает до 150 документов за запрос и выдаёт JSON и CSV. Он подходит для оценки, но не заменяет производственную очередь.

Как повысить точность конкретного поля?

Сначала улучшите вход и уточните формулировку Query. Если ошибка повторяется на собственном типе документа, создайте адаптер Custom Queries, разметьте обучение и оцените F1, precision и recall на тестовом наборе.

Итоговый рабочий подход

Начинайте с минимальной операции, соответствующей задаче, и проверяйте её на реальных документах. Для текста выбирайте DetectDocumentText, для структуры — AnalyzeDocument, для счетов — AnalyzeExpense, для удостоверений — AnalyzeID, для ипотечных пакетов — AnalyzeLending. Массовый загрузчик помогает быстро получить выборку результатов до разработки интеграции.

Сохраняйте исходный файл, полный JSON, нормализованные значения и журнал исправлений. Используйте координаты для прозрачной проверки, confidence — для маршрутизации, а бизнес-правила — для проверки смысла. Многостраничный поток стройте через S3, Start/Get, SNS и SQS, контролируя идемпотентность, повторы и квоты.

Главное ограничение решения проявляется не в распознавании отдельной страницы, а в готовности процесса вокруг него. Без проверки языков, качества сканов, схемы JSON, прав IAM, сроков хранения и ручного контроля даже высокий confidence не гарантирует правильную запись. При корректной архитектуре сервис превращает изображения и PDF в проверяемые структурированные данные, которые можно безопасно передавать в поиск, бухгалтерию, кредитный конвейер или внутреннюю систему.