OCR в Laravel: распознавание и парсинг документов

mayaram/laravel-ocr - это мощное Laravel решение для извлечения текста и структурированных данных из изображений и PDF-файлов. Он не только распознаёт текст, но и может классифицировать документы, выделять поля (например, номер счета, итоги) и очищать результат с помощью AI-постобработки.

Что это за пакет и для чего он нужен

Пакет предоставляет:

  • OCR-движок с поддержкой локального Tesseract, Google Cloud Vision, AWS Textract, Azure Vision.

  • Объектно-ориентированный результат (DTO) с текстом, метаданными и структурой полей.

  • Возможность использовать AI-постобработку через Laravel AI (например, OpenAI, Anthropic, Gemini и др.) для корректировки ошибок OCR.

  • Механизмы шаблонов и автоматического определения структуры документа.

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

Установка

1. Установка через Composer

В корне проекта Laravel выполните:

composer require mayaram/laravel-ocr

Это добавит пакет и все зависимости (Tesseract, PDF-парсер, Laravel AI и т. д.).

2. Публикация конфигурации и миграций

Чтобы настроить пакет и создать таблицы (если необходимо):

php artisan vendor:publish --tag=laravel-ocr-config
php artisan vendor:publish --tag=laravel-ocr-migrations
php artisan migrate

Это создаст файл конфигурации config/laravel-ocr.php и таблицы для хранения шаблонов, результатов и пр.

3. Установка OCR-движка

Для оффлайн-распознавания по умолчанию требуется Tesseract:

sudo apt-get install tesseract-ocr

Проверьте установку:

tesseract --version

Если планируете использовать облачные сервисы (Google Vision, AWS Textract, Azure и т. д.) то нужно настройт. ключи в .env (см. ниже).

Настройка конфигурации

Откройте config/laravel-ocr.php. Вот ключевые параметры:

Выбор драйвера OCR

LARAVEL_OCR_DRIVER=tesseract

Варианты:

  • tesseract - оффлайн-распознавание.

  • google_vision - Google Vision API.

  • aws_textract - AWS Textract.

  • azure - Azure Computer Vision OCR.

Настройте ключи для выбранного драйвера:

GOOGLE_VISION_KEY_FILE=/path/to/sa.json
AWS_ACCESS_KEY_ID=…
AWS_SECRET_ACCESS_KEY=…
AZURE_OCR_ENDPOINT=…
AZURE_OCR_KEY=…

AI-очистка текста

Для включения AI-постобработки добавьте:

LARAVEL_OCR_AI_CLEANUP=true
LARAVEL_OCR_AI_PROVIDER=openai
OPENAI_API_KEY=ваш_ключ

Пакет интегрируется с Laravel AI и использует агента очистки для исправления типичных ошибок OCR (например, arnountamount).

Базовое использование

1) Простое извлечение текста

use Mayaram\LaravelOcr\Facades\LaravelOcr;

// Из локального файла
$result = LaravelOcr::extract('/path/to/doc.png');
echo $result['text'];

$result содержит распознанный текст и вспомогательную информацию.

Если документ загружен через форму:

$result = LaravelOcr::extract(request()->file('document'));

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

Многие документы содержат таблицы (например, позиции в счете):

$table = LaravelOcr::extractTable('/path/to/invoice.png');
foreach ($table['table'] as $row) {
    echo implode(' | ', $row) . "\n";
}

Это удобно для обработки накладных и спецификаций.

Продвинутый парсинг с DTO

Для более глубокой обработки используйте DocumentParser:

$parser = app('laravel-ocr.parser');
$result = $parser->parse('storage/invoices/inv.pdf', [
    'document_type' => 'invoice',
    'use_ai_cleanup' => true,
    'save_to_database' => true,
]);

echo $result->text;
echo $result->confidence;

OcrResult DTO возвращает:

  • text - весь распознанный текст.

  • confidence - уровень уверенности.

  • metadata - дополнительные данные (типы полей, время обработки и т. д.).

Работа с шаблонами

Пакет позволяет создавать шаблоны для типовых документов (например, счёт от конкретной компании).

1) Создание шаблона

$templateManager = app('laravel-ocr.templates');

$template = $templateManager->create([
    'name' => 'Invoice Template',
    'type' => 'invoice',
    'fields' => [
        [
            'key' => 'order_id',
            'pattern' => '/Order\s*ID:\s*(\d+)/i',
            'type' => 'string',
        ],
        [
            'key' => 'total_amount',
            'pattern' => '/Total:\s*\$?([\d.,]+)/i',
            'type' => 'currency',
        ],
    ],
]);

2) Парсинг с шаблоном

$result = LaravelOcr::extractWithTemplate($file, $template->id);

Такой подход позволяет извлекать именно те поля, которые важны для бизнеса.

Batch-обработка

Чтобы обработать сразу несколько файлов:

$results = $parser->parseBatch([
    'inv1.pdf',
    'inv2.pdf',
    'inv3.pdf',
], [
    'document_type' => 'invoice'
]);

Это полезно в сценариях загрузки пачками.

Советы и лучшие практики

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

  • Настройте очистку AI, чтобы сократить ручную корректировку ошибок.

  • Шаблоны помогают стандартизировать данные и получать структуру (например, номер счета, суммы, таблицы).

Комментарии (0)

Войдите, чтобы оставить комментарий

Похожие статьи

Ward: сканер безопасности для Laravel

Ward - это CLI-инструмент для проверки безопасности Laravel-проектов. Он анализирует конфигурацию, зависимости и код, выявляя уязвимости и ошибки настроек. Подходит для локальной проверки и интеграции в CI/CD.

Как отключить SELinux на Ubuntu, CentOS, Debian и RHEL

Подробная инструкция по проверке, временной и постоянной деактивации SELinux на популярных Linux-дистрибутивах: Ubuntu, Debian, CentOS и RHEL. Объяснены способы через консоль и конфигурационные файлы.