Repository navigation
Layout and reading order RU
🌐 English · Русский
Установите 0.5.1 и скачайте примеры.
Если читать страницу с двумя колонками поперёк, несвязанные предложения перемешаются. Порядок чтения указывает Occular закончить один текстовый блок, прежде чем переходить к следующему.
Даже правильно распознанные слова трудно читать, когда строки чередуются между несвязанными колонками. Вот верхняя часть исходной страницы в удобном для чтения масштабе:

Подсказка к примеру: заголовок слева сообщает, что речной вокзал откроется в мае; абзац справа предупреждает водителей о гололедице. В выводе Речной вокзал... — начало заголовка о вокзале, а мае — его продолжение («в мае»); с Автомобилистов... начинается предупреждение водителям. Режим по умолчанию должен разделять эти сюжеты.
Этот код меняет последовательность строк на том же полном изображении:
from occular import ocr
plain = ocr("columns.png", reading_order=False)
ordered = ocr("columns.png", reading_order=True)
print("TOP TO BOTTOM — first 8 lines")
print("\n".join(plain.splitlines()[:8]))
print("\nREADING ORDER — first 8 lines")
print("\n".join(ordered.splitlines()[:8]))Фрагменты фактического вывода: первые восемь строк в каждом режиме:
TOP TO BOTTOM — first 8 lines
ВЕСТНИК ПРИВОЛЖЬЯ
Выпуск № 7 (412) - четверг. 19 февраля 2026 года - цена свободная
Автомобилистовросят учитывать гололедицу на
Речной вокзал откроют после ремонта в
мостах и подъезда к городу
мае
Дорожникизакончат развязкунагод
Работы на здании речного вокзала, закрытого для
READING ORDER — first 8 lines
ВЕСТНИК ПРИВОЛЖЬЯ
Выпуск № 7 (412) - четверг. 19 февраля 2026 года - цена свободная
Речной вокзал откроют после ремонта в
мае
Работы на здании речного вокзала, закрытого для
пассажиров два года назад, выходят на финальную
стадию, Подрядчик заменил кровлю восстановил
лепнину центрального зала и смонтировал новую
Без упорядочивания предупреждение из правой колонки разрывает заголовок о вокзале из левой. С упорядочиванием за Речной вокзал... следуют продолжение мае и статья о вокзале. Ошибки в словах остаются: эта функция расставляет строки, а не исправляет их текст.
Открыть настоящий запуск в Jupyter: весь код виден

Функция уже включена. Начните с обычного вызова:
from occular import ocr
print(ocr("columns.png"))Модель макета находит области страницы: абзацы, заголовки и другие блоки. Другая модель использует эти области, чтобы определить, что читать дальше. Сложные страницы всё равно могут потребовать проверки.
Используйте отдельный вызов, когда нужны метки и координаты областей:
from occular import LayoutDetector
page = LayoutDetector().detect("invoice.png")
print("Image size:", page.width, page.height)
for region in page.regions[:5]:
print(region.label, round(region.score, 2))Фактический вывод:
Image size: 1654 2339
Text 0.97
Text 0.96
Table 0.96
SectionHeader 0.94
Text 0.93
Блокнот рисует возвращённые области обычными прямоугольниками Matplotlib. Здесь показан выбранный фрагмент счёта; крупные подписи обозначают предсказанные области:

Отдельный вызов детектора макета возвращает области по уверенности, а не в порядке чтения. Рамки (x1, y1, x2, y2) заданы в пикселях именно этого входного изображения; оценки показывают уверенность детекции.
Открыть настоящий запуск в Jupyter: весь код виден

Например, область может иметь метку Text, Table или Picture. Рамка показывает, где она находится на изображении.
Найденная область Table ещё не даёт её ячейки. Для этого включите распознавание таблиц. Область Form не означает извлечение именованных полей формы.
Сравнить с простым выводом сверху вниз
from occular import ocr
print(ocr("columns.png", reading_order=False))Меняется этап упорядочивания. Метки макета не заставляют OCR пропускать изображения или удалять текст.
При извлечении готового текста PDF порядок OCR по макету не применяется. Как обрабатываются PDF →
Occular-OCR 0.5.1 · English · Русский · Report a problem / Сообщить о проблеме