Skip to content

Performance and GPU RU

Bodhi42 edited this page Nov 1, 2026 · 1 revision

🌐 English · Русский

Ускорьте пакетную обработку

Установите 0.5.1 и скачайте примеры.

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

Переиспользуйте конвейер

Если приложение обрабатывает много изображений, создайте конвейер один раз:

from occular import OCRPipeline

reader = OCRPipeline()
for filename in ["page1.png", "page2.png"]:
    print(reader.get_text(filename))

Измерьте время после прогрева

Здесь измеряется второй вызов после явного прогрева на чеке из примера:

from time import perf_counter
from occular import OCRPipeline

reader = OCRPipeline()
reader.get_text("receipt.jpg")  # warm up the models

started = perf_counter()
text = reader.get_text("receipt.jpg")
seconds = perf_counter() - started
print("Seconds for this page:", round(seconds, 2))
print("Recognized lines:", len(text.splitlines()))

Фактический вывод одного запуска на CPU:

Seconds for this page: 12.23
Recognized lines: 43

Это воспроизводимый способ измерения, а не обещание скорости или сравнение с GPU. Время зависит от документа, оборудования и кеша моделей.

Открыть настоящий запуск в Jupyter: весь код виден

Повторное использование конвейера и замер времени: весь код блокнота и фактический вывод

Скачать блокнот · receipt.jpg

Обрабатывайте страницы PDF параллельно

ocr document.pdf --workers 2

Попробуйте 1, 2 и 4 обработчика. Большее число требует больше памяти, поэтому иногда только мешает. Использование обработчиков из Python →

Есть NVIDIA GPU?

Установите зависимости CUDA:

python -m pip install "occular-ocr[gpu]==0.5.1"

Затем запросите выполнение на GPU:

from occular import ocr

text = ocr("scan.png", gpu=True)

Проверьте, что действительно работает на CUDA

Для этой полной проверки используйте окружение с поддержкой GPU:

import onnxruntime as ort

print("Installed runtime providers:")
print(ort.get_available_providers())
from occular import ocr

text = ocr("receipt.jpg", gpu=True)
print("\n".join(text.splitlines()[:5]))

Выбранные фактические сообщения запуска из показанного примера:

Loaded DBNet detector (GPU/CUDA, threads=8)
Loaded SVTR recognizer (vocab=185 chars, GPU/CUDA, threads=8)

И детектор, и распознаватель сообщили GPU/CUDA. Одного списка доступных провайдеров недостаточно, чтобы подтвердить запуск сессий на CUDA. На другом компьютере может появиться сообщение о переходе на CPU.

Открыть настоящий запуск в Jupyter: весь код виден

Запрос выполнения на CUDA: весь код блокнота и фактический вывод

Скачать блокнот · receipt.jpg

Нужны совместимые драйвер NVIDIA и платформа. Читайте сообщения запуска: если CUDA не загрузится, Occular может перейти на CPU.

Что ещё можно настроить?
  • num_threads управляет работой внутри страницы; workers — параллельными задачами.
  • По умолчанию используется лёгкий распознаватель svtr_lcnet. Для сравнения точности попробуйте recognizer="svtr_t", но его выполнение требует больше ресурсов.
  • reading_order=False пропускает упорядочивание по макету, если оно не нужно приложению.
  • lm=False отключает декодирование с языковой моделью. Проверьте качество, прежде чем оставлять её выключенной.
  • Для обработки PDF на GPU начните с одного обработчика и следите за видеопамятью.

Подробности об обработчиках, потоках и среде выполнения →

Clone this wiki locally