Техническая документация: REST API эндпоинт /api/recognize

Опубликовано: 27.09.2025

Введение

API для распознавания сканированных документов (OCR API) — это мощный инструмент для извлечения текстовой информации из изображений, PDF-файлов и сканированных документов. Эндпоинт /api/recognize предоставляет возможность преобразования визуального контента в машинно-читаемый формат с использованием передовых алгоритмов компьютерного зрения и машинного обучения.

Назначение

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

Детализация параметров запроса

Тело запроса (application/json)

content (обязательный)

Тип: string
Формат: Base64 encoded image
Описание: Содержимое файла, закодированное в формате Base64. Поддерживаются изображения и PDF-файлы.

Пример:

{
  "content": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg=="
}

model (обязательный)

Тип: string
Допустимые значения: - "passport" — для распознавания паспортов и удостоверений личности - "page" — для обычных текстовых страниц - "license_car" — для автомобильных прав и свидетельств

Рекомендации по выбору: - Используйте passport для документов с фиксированной структурой - Выбирайте page для книг, статей и произвольных текстов - Применяйте license_car для транспортных документов

languageCodes (опциональный)

Тип: array[string]
По умолчанию: ["ru", "en"]
Описание: Список языков для распознавания. Поддерживается приоритетность: первый язык в списке имеет высший приоритет.

Примеры:

["ru"] // Только русский язык
["en", "ru"] // Английский с fallback на русский

mimeType (обязательный)

Тип: string
Допустимые значения: - "image/jpeg" — для JPEG изображений - "application/pdf" — для PDF-документов

Ограничения: - Максимальный размер файла: 2MB - Для PDF: максимум 1 страница за запрос

Примеры использования

Пример 1: Распознавание паспорта

cURL запрос:

curl -X POST "https://api-k.ru/api/recognize" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: ваш_api_ключ" \
  -d '{
    "content": "base64_encoded_image_data",
    "model": "passport",
    "languageCodes": ["ru"],
    "mimeType": "image/jpeg"
  }'

Python пример:

import requests
import base64

def recognize_document(image_path, api_key):
    with open(image_path, "rb") as image_file:
        encoded_string = base64.b64encode(image_file.read()).decode('utf-8')
    
    url = "https://api-k.ru/api/recognize"
    headers = {
        "Content-Type": "application/json",
        "X-API-Key": api_key
    }
    
    data = {
        "content": encoded_string,
        "model": "passport",
        "languageCodes": ["ru"],
        "mimeType": "image/jpeg"
    }
    
    response = requests.post(url, headers=headers, json=data)
    return response.json()

# Использование
result = recognize_document("passport.jpg", "ваш_api_ключ")

Пример 2: Обработка многоязычного документа

data = {
    "content": base64_encoded_pdf,
    "model": "page",
    "languageCodes": ["en", "ru", "de"],
    "mimeType": "application/pdf"
}

Обработка ответов

Успешный ответ (HTTP 200)

Структура ответа:

{
  "result": {
    "textAnnotation": {
      "fullText": "Полный распознанный текст...",
      "pages": [
        {
          "property": {
            "detectedLanguages": [
              {"languageCode": "ru", "confidence": 0.95}
            ]
          },
          "width": 800,
          "height": 600,
          "blocks": [
            {
              "boundingBox": {
                "vertices": [
                  {"x": 10, "y": 10},
                  {"x": 790, "y": 10},
                  {"x": 790, "y": 590},
                  {"x": 10, "y": 590}
                ]
              },
              "lines": [
                {
                  "boundingBox": {...},
                  "words": [
                    {
                      "boundingBox": {...},
                      "text": "Пример",
                      "confidence": 0.99
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    }
  }
}

Коды ошибок (HTTP 4xx/5xx)

Код Ошибка Описание
400 Invalid base64 content Неверный формат Base64
400 Unsupported mime type Неподдерживаемый тип файла
400 File size exceeded Превышен максимальный размер файла
401 Invalid API key Неверный или отсутствующий API-ключ
500 Internal server error Внутренняя ошибка сервера

Пример ошибки:

{
  "error": "Invalid base64 content",
  "details": "The provided content is not valid base64 encoded data"
}

Best Practices

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

  • Используйте разрешение не менее 300 DPI
  • Обеспечьте хорошее освещение и контрастность
  • Избегайте искажений и наклонов

2. Оптимизация запросов

# Правильно: сжатие изображения перед отправкой
from PIL import Image
import io

def optimize_image(image_path, max_size=1024):
    img = Image.open(image_path)
    img.thumbnail((max_size, max_size), Image.Resampling.LANCZOS)
    
    buffer = io.BytesIO()
    img.save(buffer, format='JPEG', quality=85, optimize=True)
    return base64.b64encode(buffer.getvalue()).decode('utf-8')

3. Обработка больших документов

def process_large_pdf(pdf_path, api_key):
    # Разбиваем PDF на страницы и обрабатываем по одной
    for page_num in range(total_pages):
        page_image = extract_page_as_image(pdf_path, page_num)
        encoded_content = base64.b64encode(page_image).decode('utf-8')
        
        data = {
            "content": encoded_content,
            "model": "page",
            "mimeType": "image/jpeg"
        }
        
        # Добавляем задержку между запросами
        time.sleep(0.5)
        response = make_api_request(data, api_key)

4. Валидация данных

def validate_request_data(data):
    required_fields = ['content', 'model', 'mimeType']
    for field in required_fields:
        if field not in data:
            raise ValueError(f"Missing required field: {field}")
    
    if data['mimeType'] not in ['image/jpeg', 'application/pdf']:
        raise ValueError("Unsupported mime type")
    
    if len(data['content']) > 10 * 1024 * 1024:  # 10MB
        raise ValueError("File size too large")

Ограничения и лимиты

Технические ограничения

  • Максимальный размер файла: 2 MB
  • Максимальное количество страниц PDF: 1
  • Максимальное разрешение изображения: 4096x4096 px
  • Поддерживаемые форматы: JPEG, PDF

Бизнес-лимиты

  • Rate limiting: 60 запросов в минуту
  • Ежедневный лимит: 10,000 запросов
  • Требуется аутентификация: Обязательное использование API-ключа

Заключение

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

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