Структуры данных

Основные структуры данных для представления результатов OCR.

Модель данных

Следующая диаграмма показывает взаимосвязи между структурами данных:

        graph LR

    %% Entities
    Page[Page]
    Block[Block]
    Line[Line]
    Word[Word]

    %% Relations
    Page -->|"blocks: List[Block]"| Block
    Block -->|"lines: List[Line]"| Line
    Line -->|"words: List[Word]"| Word

    %% Word fields
    Word --> Wpoly["polygon: List[(x, y)]<br>≥ 4 points, clockwise"]
    Word --> Wdet["detection_confidence: float (0–1)"]
    Word --> Wtext["text: Optional[str]"]
    Word --> Wrec["recognition_confidence: Optional[float] (0–1)"]
    Word --> WordOrder["order: Optional[int]<br>assigned after sorting"]

    %% Line fields
    Line --> LineOrder["order: Optional[int]<br>assigned after sorting"]

    %% Block fields
    Block --> BlockOrder["order: Optional[int]<br>assigned after sorting"]
    

Справочник API

Структуры данных для OCR рукописей.

Этот пакет содержит основные структуры данных, используемые для представления результатов OCR во всей библиотеке manuscript-ocr.

class manuscript.data.Word(*args, **kwargs)[исходный код]

Базовые классы: BaseModel

Одно обнаруженное или распознанное слово.

Параметры:
  • args (Any)

  • kwargs (Any)

Тип результата:

Any

polygon

Вершины полигона (x, y), упорядоченные по часовой стрелке. Для четырёхугольных текстовых областей: TL → TR → BR → BL (верхний левый, верхний правый, нижний правый, нижний левый).

тип:

List[Tuple[float, float]]

detection_confidence

Оценка уверенности детекции текста от детектора (от 0.0 до 1.0).

тип:

float

text

Распознанное текстовое содержимое (заполняется OCR-конвейером). None, если выполнялась только детекция.

тип:

str, необязательный

recognition_confidence

Оценка уверенности распознавания текста от распознавателя (от 0.0 до 1.0). None, если выполнялась только детекция.

тип:

float, необязательный

order

Позиция слова внутри строки после сортировки. None до сортировки.

тип:

int, необязательный

Примеры

>>> word = Word(
...     polygon=[(10, 20), (100, 20), (100, 40), (10, 40)],
...     detection_confidence=0.95,
...     text="Hello",
...     recognition_confidence=0.98
... )
>>> print(word.text)
Hello

Методы

__call__(*args, **kwargs)

Вызов объекта как функции.

detection_confidence

order

polygon

recognition_confidence

text

polygon: List[Tuple[float, float]] = Ellipsis
detection_confidence: float = Ellipsis
text: Optional[str] = None
recognition_confidence: Optional[float] = None
order: Optional[int] = None
class manuscript.data.Line(*args, **kwargs)[исходный код]

Базовые классы: BaseModel

Одна текстовая строка, содержащая одно или несколько слов.

Параметры:
  • args (Any)

  • kwargs (Any)

Тип результата:

Any

words

Список слов в строке.

тип:

List[Word]

order

Позиция строки внутри блока или страницы после сортировки. None до сортировки.

тип:

int, необязательный

Примеры

>>> line = Line(words=[
...     Word(polygon=[(10, 20), (50, 20), (50, 40), (10, 40)],
...          detection_confidence=0.95, text="Hello"),
...     Word(polygon=[(60, 20), (110, 20), (110, 40), (60, 40)],
...          detection_confidence=0.97, text="World"),
... ])
>>> print(len(line.words))
2

Методы

__call__(*args, **kwargs)

Вызов объекта как функции.

order

words: List[Word]
order: Optional[int] = None
class manuscript.data.Block(*args, **kwargs)[исходный код]

Базовые классы: BaseModel

Логический текстовый блок (например, абзац или колонка).

lines

Список текстовых строк в блоке.

тип:

List[Line]

words

Устаревшее: прямой список слов без структуры строк. Используется для обратной совместимости. Если и lines, и words пусты, создаётся одна строка из слов.

тип:

List[Word], необязательный

order

Позиция блока в порядке чтения после сортировки. None до сортировки.

тип:

int, необязательный

Примеры

>>> block = Block(lines=[
...     Line(words=[Word(polygon=[(10, 20), (50, 20), (50, 40), (10, 40)],
...                      detection_confidence=0.95, text="Line 1")]),
...     Line(words=[Word(polygon=[(10, 50), (50, 50), (50, 70), (10, 70)],
...                      detection_confidence=0.97, text="Line 2")]),
... ])
>>> print(len(block.lines))
2

Методы

__call__(*args, **kwargs)

Вызов объекта как функции.

lines

order

words

order: Optional[int] = None
__init__(**data)[исходный код]

Инициализация Block с обратной совместимостью для ввода только слов.

class manuscript.data.Page(*args, **kwargs)[исходный код]

Базовые классы: BaseModel

Страница документа, содержащая текстовые блоки.

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

Параметры:
  • args (Any)

  • kwargs (Any)

Тип результата:

Any

blocks

Список текстовых блоков на странице.

тип:

List[Block]

Примеры

>>> page = Page(blocks=[
...     Block(lines=[
...         Line(words=[Word(polygon=[(10, 20), (50, 20), (50, 40), (10, 40)],
...                          detection_confidence=0.95, text="Hello")])
...     ])
... ])
>>> print(len(page.blocks))
1

Методы

__call__(*args, **kwargs)

Вызов объекта как функции.

from_json(source)

Загрузить Page из JSON-файла или строки.

to_json([path, indent])

Экспорт Page в JSON.

blocks: List[Block]
to_json(path=None, indent=2)[исходный код]

Экспорт Page в JSON.

Параметры:
  • path (str or Path, optional) – Если указан, сохраняет JSON в файл.

  • indent (int, optional) – Отступ JSON. По умолчанию 2.

Результат:

Строковое представление JSON.

Тип результата:

str

Примеры

>>> page.to_json("result.json")  # save to file
>>> json_str = page.to_json()    # get as string
classmethod from_json(source)[исходный код]

Загрузить Page из JSON-файла или строки.

Параметры:

source (str or Path) – Путь к JSON-файлу или JSON-строка.

Результат:

Загруженный объект Page.

Тип результата:

Page

Примеры

>>> page = Page.from_json("result.json")
>>> page = Page.from_json('{"blocks": [...]}')