Интеграция AWS Textract для извлечения данных из документов

Бухгалтерия тратит дни на ручной перенос данных из счетов-фактур и актов. Наши клиенты сталкивались с той же проблемой: до 80% времени уходит на копирование цифр из PDF в ERP. Интеграция AWS Textract для извлечения данных из документов — задача, которую мы решаем под ключ. Мы внедрили AWS Textract —

Направления AI-разработки

Часто задаваемые вопросы

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1460
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1314
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1013
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1275
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    727
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1019

Бухгалтерия тратит дни на ручной перенос данных из счетов-фактур и актов. Наши клиенты сталкивались с той же проблемой: до 80% времени уходит на копирование цифр из PDF в ERP. Интеграция AWS Textract для извлечения данных из документов — задача, которую мы решаем под ключ. Мы внедрили AWS Textract — сервис OCR, который извлекает не просто текст, а готовые структуры: таблицы, формы с парами «ключ-значение», данные удостоверений. Один из проектов сократил обработку документа с 15 минут до 3 секунд, что при объеме 500 документов в день дает годовую экономию более $14k–20k. Ниже — как мы добиваемся такого результата.

По данным AWS Documentation, модели Textract обучены на миллионах документов и показывают точность >99% для типовых полей.

Почему обычный OCR не справляется с формами и таблицами?

Классические OCR-движки возвращают поток слов с координатами. Разобрать, где начинается таблица, а где подпись — задача на недели. Textract использует нейросети, обученные на миллионах документов: он сам определяет границы таблиц, связи «ключ-значение» в формах и даже распознаёт рукописный текст. Для сложных случаев доступен режим Queries — задайте вопрос на естественном языке: «Какова сумма к оплате?» — и получите значение с уровнем уверенности.

Что даёт специализированная модель Analyze ID?

Модель Analyze ID извлекает данные из паспортов, водительских прав и других удостоверений с точностью 99%+. Confidence score возвращается по каждому полю, что позволяет отсеивать сомнительные результаты. Например, для поля DOCUMENT_NUMBER при confidence 99.8% можно сразу использовать без проверки, а при 85% — отправить на ручную верификацию. Это снижает процент ошибок до 0.2%.

Как асинхронная обработка работает с большими PDF?

Синхронный API (analyze_document) принимает до 10MB и одну страницу — идеально для потоковой обработки. Асинхронный (start_document_analysis) работает с PDF до 500MB. Мы используем StartDocumentAnalysis с S3-триггерами: файл попадает в бакет → запускается job → результат сохраняется в DynamoDB. Для ускорения применяем параллельные запросы через Lambda — пропускная способность растёт линейно.

import boto3 import json class AWSTextractExtractor: def __init__(self, region: str = 'us-east-1'): self.client = boto3.client('textract', region_name=region) def extract_from_file(self, image_path: str, feature_types: list = None) -> dict: """Синхронная обработка локального файла (до 10MB, 1 страница)""" if feature_types is None: feature_types = ['TABLES', 'FORMS'] with open(image_path, 'rb') as f: response = self.client.analyze_document( Document={'Bytes': f.read()}, FeatureTypes=feature_types ) return self._parse_response(response) def extract_from_s3(self, bucket: str, key: str) -> str: """Асинхронная обработка из S3 (для больших файлов и PDF)""" response = self.client.start_document_text_detection( DocumentLocation={ 'S3Object': {'Bucket': bucket, 'Name': key} } ) job_id = response['JobId'] # Ожидание завершения import time while True: result = self.client.get_document_text_detection(JobId=job_id) if result['JobStatus'] in ['SUCCEEDED', 'FAILED']: break time.sleep(2) if result['JobStatus'] == 'FAILED': raise RuntimeError(f"Textract job failed: {result['StatusMessage']}") # Объединяем страницы pages = [result] while 'NextToken' in result: result = self.client.get_document_text_detection( JobId=job_id, NextToken=result['NextToken'] ) pages.append(result) return self._extract_text_from_pages(pages) def _parse_response(self, response: dict) -> dict: blocks = {block['Id']: block for block in response['Blocks']} # Извлечение форм (KEY_VALUE_SET) forms = {} for block in response['Blocks']: if block['BlockType'] == 'KEY_VALUE_SET' and 'KEY' in block.get('EntityTypes', []): key_text = self._get_text(block, blocks) value_block = self._get_value_block(block, blocks) if value_block: value_text = self._get_text(value_block, blocks) forms[key_text] = value_text # Извлечение таблиц tables = self._extract_tables(response['Blocks'], blocks) # Весь текст lines = [b['Text'] for b in response['Blocks'] if b['BlockType'] == 'LINE'] return { 'text': '\n'.join(lines), 'forms': forms, 'tables': tables } 

Базовая интеграция через Boto3

def extract_id_document(self, image_path: str) -> dict: """Специализированное извлечение из удостоверений личности""" with open(image_path, 'rb') as f: response = self.client.analyze_id( DocumentPages=[{'Bytes': f.read()}] ) result = {} for doc in response['IdentityDocuments']: for field in doc['IdentityDocumentFields']: field_type = field['Type']['Text'] field_value = field['ValueDetection']['Text'] confidence = field['ValueDetection']['Confidence'] result[field_type] = { 'value': field_value, 'confidence': confidence } return result # Пример возвращаемого результата: # { # 'FIRST_NAME': {'value': 'John', 'confidence': 99.5}, # 'LAST_NAME': {'value': 'Doe', 'confidence': 99.2}, # 'DATE_OF_BIRTH': {'value': '01/15/1990', 'confidence': 98.7}, # 'DOCUMENT_NUMBER': {'value': 'A12345678', 'confidence': 99.8} # } 

Извлекаем кастомные поля с Textract Queries

response = self.client.analyze_document( Document={'Bytes': content}, FeatureTypes=['QUERIES'], QueriesConfig={ 'Queries': [ {'Text': 'Какова сумма к оплате?', 'Alias': 'total_due'}, {'Text': 'Каков номер счёта?', 'Alias': 'invoice_number'}, {'Text': 'Кто является поставщиком?', 'Alias': 'vendor'} ] } ) 

Queries работают на естественном языке — не нужно писать регулярки под каждый шаблон.

Сравнение Textract с классическим Tesseract

Параметр AWS Textract Tesseract 5 (LSTM)
Распознавание таблиц Встроенное, готовые структуры Только координаты, требует доработки
Извлечение пар ключ-значение Автоматическое (KEY_VALUE_SET) Не поддерживается
Точность на формах 95%+ без обучения 70-80% на стандартных формах
Поддержка PDF Встроенная (до 500MB) Требуется конвертация в изображения
Настраиваемые запросы (Queries) Да Нет

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

Процесс интеграции под ключ

Этап Длительность Результат
Анализ документов и требований 1 день Спецификация полей и форматов
Проектирование pipeline 1–2 дня Архитектура S3 → SQS → Lambda → DynamoDB
Реализация извлечения 3–7 дней Работающий парсинг с accuracy >95%
Интеграция с целевой системой 2–5 дней REST API или прямой импорт в ERP/CRM
Тестирование и приёмка 1–3 дня Отчёт по качеству на тестовой выборке
Пример конвейера для обработки накладных При загрузке PDF в S3 срабатывает Lambda, стартующая асинхронный Textract. Job завершается, результат сохраняется в DynamoDB. Параллельно SQS отправляет уведомление в ERP. Время обработки одной накладной — 2-3 секунды.
  1. Анализ — разбираем типовые документы, выделяем поля и связи.
  2. Проектирование — строим serverless pipeline с S3, Lambda, DynamoDB.
  3. Реализация — пишем код интеграции с Boto3 и поддержкой Queries.
  4. Интеграция — подключаем к вашей ERP или CRM через REST API.
  5. Тестирование — прогоняем 100+ документов, добиваемся точности >98%.

Что входит в работу

  • Полная документация pipeline (IAM, S3, Lambda, DynamoDB).
  • Управление IAM-ролями и политиками безопасности.
  • Обучение вашей команды работе с результатами Textract.
  • Поддержка в течение месяца после запуска.
  • Гарантируем точность 98%+ на ваших данных.

Сроки и стоимость

Базовая интеграция с извлечением текста — 3–5 дней. Если нужны формы, таблицы и Queries — 2–3 недели. Точную оценку даём после анализа 10–20 ваших документов. Мы сертифицированы AWS и имеем 5+ лет опыта в документообороте — гарантируем, что Textract покажет точность 98%+ на ваших данных. Окупаемость внедрения обычно наступает за 3–6 месяцев за счёт сокращения ручного труда на 80%, что при средних затратах на ввод данных дает экономию более $14k–20k в год.

Свяжитесь с нами для бесплатного Demo: оценим ваш кейс и предложим оптимальное решение. Получите консультацию уже сегодня.