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 (например, arnount → amount).
Базовое использование
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, чтобы сократить ручную корректировку ошибок.
Шаблоны помогают стандартизировать данные и получать структуру (например, номер счета, суммы, таблицы).