Запрос на извлечение полей

Прикладной сервис Версия: 0.2 draft

Инструкция модели распознавания, каталог полей страницы и схема ответа. Собирается из конфигурации документа и формы, а не пишется руками.

⟨/⟩ Исходник

1. Из чего состоит запрос

Запрос к модели складывается из четырёх частей, и только первая написана прозой.

Часть Что задаёт Откуда берётся
Инструкция что извлекать, чего не делать, как оценивать уверенность пишется один раз, общая для всех форм
Каталог полей коды, подписи, типы, ограничения собирается из конфигурации документа и размещений формы
Кадр изображение страницы из пакета ввода
Схема ответа строгий формат результата выводится из каталога полей

Каталог не пишется руками. Он выводится из состава вида ИК и размещений на форме: код и тип берутся у атрибута, подпись — у размещения на конкретном бланке. Иначе добавление поля в спеку и в запрос к модели разъедутся при первой же правке.

Схему ответа передаём параметром, а не текстом. Современные модели принимают JSON Schema отдельным полем запроса и физически не могут вернуть что-то другое; схема, вписанная в текст промта, — только пожелание.

Образцы, по которым составлен каталог, — образцы бумажных ИК.

2. Инструкция модели

Ты извлекаешь данные из скана бумажной информационной карты Библиотеки Российской
академии наук (форма «Издания из фондов БАН», страница 1).

НА ИЗОБРАЖЕНИИ
Бланк с типографскими подписями полей; значения вписаны от руки чернилами. Два блока:
1. «Описание документального памятника» — таблица с текстовыми полями.
2. «Консервация» — матрица отметок: строка «мероприятие», две колонки «Задано»
   и «Выполнено». Значение отметки — факт заполненности клетки любым знаком:
   крестик, галочка, косая черта, точка.

ЗАДАЧА
Для каждого поля из каталога верни распознанное значение, уверенность и область
на изображении.

ПРАВИЛА
1. Не додумывай. Не читается — верни value: null, confidence: 0. Пустая клетка бланка —
   тоже null: незаполненные поля на этих картах обычны.
2. Транскрибируй как написано, без исправлений орфографии и раскрытия сокращений.
   «105 д» остаётся «105 д».
3. Если в клетке помимо значения есть уточнение, верни содержимое целиком:
   «5,83 перед форзац», а не «5,83».
4. Отметку возвращай как true либо false. Любой знак в клетке — true, пустая — false.
5. confidence — от 0 до 1, оценка того, что прочитано верно: печатный текст около 0.95,
   разборчивый рукописный около 0.7, неуверенное чтение ниже 0.5.
6. bbox — [x, y, ширина, высота] в процентах от размера изображения, с одним знаком
   после запятой. Область охватывает значение, а не подпись поля.
7. Часть текста на бланке впечатана типографски — например, описание экслибриса.
   Возвращай её как значение и ставь printed: true.
8. Рукописный текст, не помещающийся ни в одно поле каталога, возвращай в notes:
   текст, область и подпись ближайшего поля.
9. Если страница не похожа на описанную форму, верни form_match: false и не заполняй поля.

3. Каталог: текстовые поля страницы 1

Блок «Описание документального памятника», 29 полей.

Код Подпись на бланке Тип Ограничения и замечания
shelf Шифр строка обязательное; примеры: «105 д», «III 099»
inventory_no Инв. номер строка обязательное; цифры, иногда с буквой
card_date Дата дата обязательное; часто в виде «17.10.22»
author Автор строка
translator_compiler Перев., сост. и др. строка
title Заглавие строка до 500 знаков; поле в несколько строк
place Место издания строка
language Язык издания строка часто сокращённо: «рус.»
publisher Издатель (-ство) строка
printing_house Типография строка
binding_type Переплёт строка описание переплёта словами
year Год издания число от 1500 до текущего года
convolute Конволют строка есть не во всех редакциях бланка
alligate_count Количество аллигат число
alligate_no Номер алл. / тома, вып. строка
pages_count Кол-во стр. число подпись бывает «Количество страниц»
separate_ill_sheets Отд. листы ил. строка подпись бывает «Отдельные листы иллюстраций»
ill_in_text Ил. в тексте строка подпись бывает «Иллюстрации в тексте»
format Формат строка пишут дробью или парой чисел
manuscript_sheets Рук. листы строка подпись бывает «Рукописные листы»
bookplate Экслибрис строка
bookplate_description Описание экслибриса строка в части бланков впечатано типографски
private_library_evidence Др. свидетельства принадлежности к частной б-ке строка
academy_stamp Первонач. Акад. штамп строка
chamber_catalog Камерный каталог строка
marginalia Маргиналии строка
records Записи строка
acquisition_source Источ. поступ. строка есть не во всех редакциях бланка
comments Комментарии строка поле в несколько строк внизу блока

4. Каталог: отметки блока «Консервация»

Каждое мероприятие даёт два поля — «задано» и «выполнено», по числу клеток в строке. Итого 42 отметки.

Книга — 10 мероприятий, коды с приставкой book_:

Мероприятие Код «задано» Код «выполнено»
Реконструкция book_reconstruction_assigned book_reconstruction_done
Дезинфекция book_disinfection_assigned book_disinfection_done
Дезинсекция book_disinsection_assigned book_disinsection_done
Реставрация book_restoration_assigned book_restoration_done
Ремонт book_repair_assigned book_repair_done
Суперобложка book_jacket_assigned book_jacket_done
Инкапсулирование book_encapsulation_assigned book_encapsulation_done
Конвертирование book_enveloping_assigned book_enveloping_done
Гигиеническая обработка book_hygienic_assigned book_hygienic_done
Помещение в контейнер book_container_assigned book_container_done

Переплёт — 5 мероприятий, приставка binding_: реконструкция (binding_reconstruction_*), реставрация (binding_restoration_*), ремонт (binding_repair_*), чистка (binding_cleaning_*), умягчение (binding_softening_*).

Блок — 3 мероприятия, приставка block_: реставрация (block_restoration_*), нейтрализация (block_neutralization_*), ремонт (block_repair_*).

Условия хранения — 3 позиции, приставка storage_: вертикальное (storage_vertical_*), горизонтальное (storage_horizontal_*), другое (storage_other_*).

Все поля этого блока имеют тип «отметка»: значение true либо false, ограничений нет.

5. Страница 2: устройство бланка

Оборот целиком посвящён состоянию памятника и его обследованиям. Текстовых полей почти нет: страница — это матрицы отметок и три журнальные таблицы.

Блок Что содержит Чем описывается
Сохранность размеры экземпляра в мм 3 числа
Переплёт состояние, состав, материалы, декор 21 отметка
Повреждения переплёта физико-механические, биологические; степень 17 отметок + 9 отметок степени
Блок состояние, состав тетрадей и листов 9 отметок
Повреждения блока физико-механические, биологические; степень; величина pH 16 отметок + 9 отметок степени + 1 текст
Мониторинг биотест и текущая биологическая экспертиза 2 таблицы
Эксперт кто и когда проводил экспертизу 1 таблица
Комментарий свободный рукописный текст 1 текст

Итого 81 отметка, 5 текстовых полей и 3 таблицы.

Степень повреждения — тоже отметки. На бланке это три клетки «Низкая», «Средняя», «Высокая», и заполнена бывает любая из них либо ни одной. Модель отмечает заполненность клеток; то, что значения взаимоисключающие, — правило состава, а не задача распознавания. Своя тройка степени есть у каждой группы повреждений: физико-механических, микробиологических, энтомологических — и отдельно для переплёта и для блока.

Три таблицы — повторяющиеся группы. Число строк заранее неизвестно, строки заполняются по мере обследований. Поэтому в ответе они идут не полями, а массивом строк (см. схему ответа): каждая строка — набор тех же полей.

Поля за пределами клеток. На образце справа от строк степени повреждения рукой приписано «нет» — вне какого-либо поля бланка. Такое возвращается в notes с указанием ближайшего поля, а не приписывается наугад к соседней клетке.

6. Каталог: отметки страницы 2

Переплёт, приставка bnd_ — 21 отметка:

Группа Позиции и коды
Состояние не повреждён bnd_state_intact, повреждён bnd_state_damaged, утрачен bnd_state_lost, ранее подвергался реставрации bnd_state_restored_before
Состав комбинированный bnd_comp_combined, цельный bnd_comp_solid
Материалы покрытия кожа bnd_cover_leather, пергамент bnd_cover_parchment, ткань bnd_cover_fabric, бумага bnd_cover_paper
Материалы основы дерево bnd_base_wood, картон bnd_base_cardboard, др. материалы bnd_base_other
Декор · тиснение слепое bnd_dec_blind, золотое bnd_dec_gold
Декор · украшения накладки bnd_dec_overlays, застёжки bnd_dec_clasps, металл bnd_dec_metal
Декор · обрез золото bnd_edge_gold, др. виды bnd_edge_other, тиснение bnd_edge_tooled

Повреждения переплёта, приставка bnd_ — 17 отметок:

Группа Позиции и коды
Физико-механические оторван bnd_dmg_torn_off, утраты bnd_dmg_losses, разрывы bnd_dmg_tears, деформация bnd_dmg_deformation, пятна bnd_dmg_stains, затёки bnd_dmg_tidelines, изменения окраски bnd_dmg_discoloration, разрушения bnd_dmg_destruction, ломкость bnd_dmg_brittleness
Микробиологические биологическая пигментация bnd_bio_pigmentation, колонии микромицетов bnd_bio_colonies, биологическое разрушение bnd_bio_destruction, жизнеспособная микрофлора bnd_bio_viable_microflora
Энтомологические личиночные ходы bnd_ent_larval_tunnels, экзувии bnd_ent_exuviae, личинки bnd_ent_larvae, имаго bnd_ent_imago

Блок, приставка blk_ — 9 отметок состава и состояния:

Группа Позиции и коды
Состояние не повреждён blk_state_intact, повреждён blk_state_damaged, ранее подвергался реставрации blk_state_restored_before
Тетради выпадают blk_quires_falling, отсутствуют blk_quires_missing, нарушено шитьё blk_sewing_broken
Листы выпадают blk_sheets_falling, отсутствуют blk_sheets_missing, повреждения blk_sheets_damaged

Повреждения блока, приставка blk_ — 16 отметок:

Группа Позиции и коды
Физико-механические утраты blk_dmg_losses, разрывы blk_dmg_tears, деформация blk_dmg_deformation, затёки blk_dmg_tidelines, изменения окраски blk_dmg_discoloration, разрушения blk_dmg_destruction, ломкость blk_dmg_brittleness, пятна blk_dmg_stains
Микробиологические blk_bio_pigmentation, blk_bio_colonies, blk_bio_destruction, blk_bio_viable_microflora
Энтомологические blk_ent_larval_tunnels, blk_ent_exuviae, blk_ent_larvae, blk_ent_imago

Степень повреждения — 18 отметок: по три клетки (_low, _medium, _high) на каждую из шести троек:

bnd_deg_physmech_*, bnd_deg_bio_*, bnd_deg_ento_*, blk_deg_physmech_*, blk_deg_bio_*, blk_deg_ento_*.

7. Каталог: текстовые поля и таблицы страницы 2

Текстовые поля — 5:

Код Подпись на бланке Тип Замечания
dim_length Размеры (мм): Длина число
dim_width Размеры (мм): Ширина число
dim_height Размеры (мм): Высота число
blk_ph Величина pH строка не число: пишут с уточнением места замера — «5,83 перед форзацем»
page2_comment Комментарий строка рукописный текст в несколько строк внизу страницы

Таблица «Биотест», код biotest:

Код колонки Подпись Тип
seq_no № П/П число
placed_at Дата закладки дата
performer Исполнитель строка

Таблица «Текущая биологическая экспертиза», код bio_expertise:

Код колонки Подпись Тип
examined_at Дата экспертизы дата
performer Исполнитель строка
result Результат строка

Таблица «Эксперт», код experts:

Код колонки Подпись Тип
role должность в левой колонке строка
examined_at Дата экспертизы дата
person Ф И О строка
signature Подпись строка
result Результат строка

Про подпись и должность: в левой колонке таблицы «Эксперт» на образце вписано «Микробиолог» и «Консерватор» — это не подпись бланка, а значение. Колонка signature содержит росчерк, а не текст: разбирать его не нужно, достаточно отметить, что он есть.

8. Готовый текст запроса

Ниже — то, что отправляется модели одним сообщением вместе с кадром страницы. Инструкция и каталог полей идут подряд; схема ответа передаётся отдельным параметром запроса, а не текстом.

Каталог здесь приведён для страницы 1 формы «Издания из фондов БАН» и должен собираться Сервисом из состава вида ИК: этот текст — образец того, что получается на выходе, а не то, что правится руками.

Ты извлекаешь данные из скана бумажной информационной карты Библиотеки Российской
академии наук (форма «Издания из фондов БАН», страница 1).

НА ИЗОБРАЖЕНИИ
Бланк с типографскими подписями полей; значения вписаны от руки чернилами. Два блока:
1. «Описание документального памятника» — таблица с текстовыми полями.
2. «Консервация» — матрица отметок: строка «мероприятие», две колонки «Задано»
   и «Выполнено». Значение отметки — факт заполненности клетки любым знаком:
   крестик, галочка, косая черта, точка.

ЗАДАЧА
Для каждого поля из каталога верни распознанное значение, уверенность и область
на изображении. Ответ — JSON по заданной схеме, без пояснений вокруг него.

ПРАВИЛА
1. Не додумывай. Не читается — value: null, confidence: 0. Пустая клетка бланка —
   тоже null: незаполненные поля на этих картах обычны.
2. Транскрибируй как написано, без исправлений орфографии и раскрытия сокращений.
3. Если в клетке помимо значения есть уточнение, верни содержимое целиком:
   «5,83 перед форзац», а не «5,83».
4. Отметку возвращай как true либо false. Любой знак в клетке — true, пустая — false.
5. confidence — от 0 до 1: печатный текст около 0.95, разборчивый рукописный около 0.7,
   неуверенное чтение ниже 0.5.
6. bbox — [x, y, ширина, высота] в процентах от размера изображения, с одним знаком
   после запятой. Область охватывает значение, а не подпись поля.
7. Текст, впечатанный в бланк типографски, возвращай как значение с printed: true.
8. Рукописный текст, не помещающийся ни в одно поле каталога, возвращай в notes:
   текст, область и подпись ближайшего поля.
9. Если страница не похожа на описанную форму, верни form_match: false и не заполняй поля.

КАТАЛОГ ПОЛЕЙ
{
  "form": "Издания из фондов БАН, страница 1",
  "fields": [
    {
      "code": "shelf",
      "label": "Шифр",
      "type": "string",
      "required": true,
      "hint": "примеры: «105 д», «III 099»"
    },
    {
      "code": "inventory_no",
      "label": "Инв. номер",
      "type": "string",
      "required": true
    },
    {
      "code": "card_date",
      "label": "Дата",
      "type": "date",
      "required": true,
      "hint": "часто в виде «17.10.22»"
    },
    {
      "code": "author",
      "label": "Автор",
      "type": "string"
    },
    {
      "code": "translator_compiler",
      "label": "Перев., сост. и др.",
      "type": "string"
    },
    {
      "code": "title",
      "label": "Заглавие",
      "type": "string",
      "max": 500
    },
    {
      "code": "place",
      "label": "Место издания",
      "type": "string"
    },
    {
      "code": "language",
      "label": "Язык издания",
      "type": "string",
      "hint": "часто сокращённо: «рус.»"
    },
    {
      "code": "publisher",
      "label": "Издатель (-ство)",
      "type": "string"
    },
    {
      "code": "printing_house",
      "label": "Типография",
      "type": "string"
    },
    {
      "code": "binding_type",
      "label": "Переплёт",
      "type": "string"
    },
    {
      "code": "year",
      "label": "Год издания",
      "type": "number",
      "min": 1500,
      "max": 2026
    },
    {
      "code": "convolute",
      "label": "Конволют",
      "type": "string",
      "hint": "есть не во всех редакциях бланка"
    },
    {
      "code": "alligate_count",
      "label": "Количество аллигат",
      "type": "number"
    },
    {
      "code": "alligate_no",
      "label": "Номер алл. / тома, вып.",
      "type": "string"
    },
    {
      "code": "pages_count",
      "label": "Кол-во стр.",
      "type": "number",
      "hint": "подпись бывает «Количество страниц»"
    },
    {
      "code": "separate_ill_sheets",
      "label": "Отд. листы ил.",
      "type": "string",
      "hint": "подпись бывает «Отдельные листы иллюстраций»"
    },
    {
      "code": "ill_in_text",
      "label": "Ил. в тексте",
      "type": "string",
      "hint": "подпись бывает «Иллюстрации в тексте»"
    },
    {
      "code": "format",
      "label": "Формат",
      "type": "string"
    },
    {
      "code": "manuscript_sheets",
      "label": "Рук. листы",
      "type": "string"
    },
    {
      "code": "bookplate",
      "label": "Экслибрис",
      "type": "string"
    },
    {
      "code": "bookplate_description",
      "label": "Описание экслибриса",
      "type": "string",
      "hint": "в части бланков впечатано типографски"
    },
    {
      "code": "private_library_evidence",
      "label": "Др. свидетельства принадлежности к частной б-ке",
      "type": "string"
    },
    {
      "code": "academy_stamp",
      "label": "Первонач. Акад. штамп",
      "type": "string"
    },
    {
      "code": "chamber_catalog",
      "label": "Камерный каталог",
      "type": "string"
    },
    {
      "code": "marginalia",
      "label": "Маргиналии",
      "type": "string"
    },
    {
      "code": "records",
      "label": "Записи",
      "type": "string"
    },
    {
      "code": "acquisition_source",
      "label": "Источ. поступ.",
      "type": "string",
      "hint": "есть не во всех редакциях бланка"
    },
    {
      "code": "comments",
      "label": "Комментарии",
      "type": "string"
    },
    {
      "code": "book_reconstruction_assigned",
      "label": "Книга · Реконструкция · Задано",
      "type": "bool"
    },
    {
      "code": "book_reconstruction_done",
      "label": "Книга · Реконструкция · Выполнено",
      "type": "bool"
    },
    {
      "code": "book_disinfection_assigned",
      "label": "Книга · Дезинфекция · Задано",
      "type": "bool"
    },
    {
      "code": "book_disinfection_done",
      "label": "Книга · Дезинфекция · Выполнено",
      "type": "bool"
    },
    {
      "code": "book_disinsection_assigned",
      "label": "Книга · Дезинсекция · Задано",
      "type": "bool"
    },
    {
      "code": "book_disinsection_done",
      "label": "Книга · Дезинсекция · Выполнено",
      "type": "bool"
    },
    {
      "code": "book_restoration_assigned",
      "label": "Книга · Реставрация · Задано",
      "type": "bool"
    },
    {
      "code": "book_restoration_done",
      "label": "Книга · Реставрация · Выполнено",
      "type": "bool"
    },
    {
      "code": "book_repair_assigned",
      "label": "Книга · Ремонт · Задано",
      "type": "bool"
    },
    {
      "code": "book_repair_done",
      "label": "Книга · Ремонт · Выполнено",
      "type": "bool"
    },
    {
      "code": "book_jacket_assigned",
      "label": "Книга · Суперобложка · Задано",
      "type": "bool"
    },
    {
      "code": "book_jacket_done",
      "label": "Книга · Суперобложка · Выполнено",
      "type": "bool"
    },
    {
      "code": "book_encapsulation_assigned",
      "label": "Книга · Инкапсулирование · Задано",
      "type": "bool"
    },
    {
      "code": "book_encapsulation_done",
      "label": "Книга · Инкапсулирование · Выполнено",
      "type": "bool"
    },
    {
      "code": "book_enveloping_assigned",
      "label": "Книга · Конвертирование · Задано",
      "type": "bool"
    },
    {
      "code": "book_enveloping_done",
      "label": "Книга · Конвертирование · Выполнено",
      "type": "bool"
    },
    {
      "code": "book_hygienic_assigned",
      "label": "Книга · Гигиеническая обработка · Задано",
      "type": "bool"
    },
    {
      "code": "book_hygienic_done",
      "label": "Книга · Гигиеническая обработка · Выполнено",
      "type": "bool"
    },
    {
      "code": "book_container_assigned",
      "label": "Книга · Помещение в контейнер · Задано",
      "type": "bool"
    },
    {
      "code": "book_container_done",
      "label": "Книга · Помещение в контейнер · Выполнено",
      "type": "bool"
    },
    {
      "code": "binding_reconstruction_assigned",
      "label": "Переплёт · Реконструкция · Задано",
      "type": "bool"
    },
    {
      "code": "binding_reconstruction_done",
      "label": "Переплёт · Реконструкция · Выполнено",
      "type": "bool"
    },
    {
      "code": "binding_restoration_assigned",
      "label": "Переплёт · Реставрация · Задано",
      "type": "bool"
    },
    {
      "code": "binding_restoration_done",
      "label": "Переплёт · Реставрация · Выполнено",
      "type": "bool"
    },
    {
      "code": "binding_repair_assigned",
      "label": "Переплёт · Ремонт · Задано",
      "type": "bool"
    },
    {
      "code": "binding_repair_done",
      "label": "Переплёт · Ремонт · Выполнено",
      "type": "bool"
    },
    {
      "code": "binding_cleaning_assigned",
      "label": "Переплёт · Чистка · Задано",
      "type": "bool"
    },
    {
      "code": "binding_cleaning_done",
      "label": "Переплёт · Чистка · Выполнено",
      "type": "bool"
    },
    {
      "code": "binding_softening_assigned",
      "label": "Переплёт · Умягчение · Задано",
      "type": "bool"
    },
    {
      "code": "binding_softening_done",
      "label": "Переплёт · Умягчение · Выполнено",
      "type": "bool"
    },
    {
      "code": "block_restoration_assigned",
      "label": "Блок · Реставрация · Задано",
      "type": "bool"
    },
    {
      "code": "block_restoration_done",
      "label": "Блок · Реставрация · Выполнено",
      "type": "bool"
    },
    {
      "code": "block_neutralization_assigned",
      "label": "Блок · Нейтрализация · Задано",
      "type": "bool"
    },
    {
      "code": "block_neutralization_done",
      "label": "Блок · Нейтрализация · Выполнено",
      "type": "bool"
    },
    {
      "code": "block_repair_assigned",
      "label": "Блок · Ремонт · Задано",
      "type": "bool"
    },
    {
      "code": "block_repair_done",
      "label": "Блок · Ремонт · Выполнено",
      "type": "bool"
    },
    {
      "code": "storage_vertical_assigned",
      "label": "Условия хранения · Вертикальное · Задано",
      "type": "bool"
    },
    {
      "code": "storage_vertical_done",
      "label": "Условия хранения · Вертикальное · Выполнено",
      "type": "bool"
    },
    {
      "code": "storage_horizontal_assigned",
      "label": "Условия хранения · Горизонтальное · Задано",
      "type": "bool"
    },
    {
      "code": "storage_horizontal_done",
      "label": "Условия хранения · Горизонтальное · Выполнено",
      "type": "bool"
    },
    {
      "code": "storage_other_assigned",
      "label": "Условия хранения · Другое · Задано",
      "type": "bool"
    },
    {
      "code": "storage_other_done",
      "label": "Условия хранения · Другое · Выполнено",
      "type": "bool"
    }
  ]
}

9. Готовый текст запроса: страница 2

То же, что для страницы 1, но с каталогом оборота. Отличий в инструкции два: другое описание изображения и правило про журнальные таблицы.

Ты извлекаешь данные из скана бумажной информационной карты Библиотеки Российской
академии наук (форма «Издания из фондов БАН», страница 2, оборот).

НА ИЗОБРАЖЕНИИ
Бланк описания сохранности; значения проставлены от руки чернилами. Четыре части:
1. «Сохранность» — размеры экземпляра в миллиметрах.
2. «Переплёт» и «Блок» — матрицы отметок: строка «свойство», клетки по столбцам
   («Кожа», «Картон», «Низкая», «Средняя», «Высокая» и прочие). Значение отметки —
   факт заполненности клетки любым знаком: крестик, галочка, косая черта, точка.
3. «Мониторинг» и «Эксперт» — журнальные таблицы, заполняются построчно
   по мере обследований; число заполненных строк заранее неизвестно.
4. «Комментарий» — свободный рукописный текст внизу страницы.

ЗАДАЧА
Для каждого поля из каталога верни распознанное значение, уверенность и область
на изображении. Ответ — JSON по заданной схеме, без пояснений вокруг него.

ПРАВИЛА
1. Не додумывай. Не читается — value: null, confidence: 0. Пустая клетка бланка —
   тоже null: незаполненные поля на этих картах обычны.
2. Транскрибируй как написано, без исправлений орфографии и раскрытия сокращений.
3. Если в клетке помимо значения есть уточнение, верни содержимое целиком:
   «5,83 перед форзацем», а не «5,83».
4. Отметку возвращай как true либо false. Любой знак в клетке — true, пустая — false.
5. Степень повреждения — три отдельные клетки. Отмечай заполненные; не выбирай одну
   из трёх и не выводи её из других полей.
6. confidence — от 0 до 1: печатный текст около 0.95, разборчивый рукописный около 0.7,
   неуверенное чтение ниже 0.5.
7. bbox — [x, y, ширина, высота] в процентах от размера изображения, с одним знаком
   после запятой. Область охватывает значение, а не подпись поля.
8. Таблицы каталога возвращай в tables: по одной строке ответа на каждую заполненную
   строку бланка, в порядке сверху вниз. Пустые строки таблицы пропускай.
9. Подпись эксперта не разбирай: если росчерк есть — «есть», если нет — null.
10. Рукописный текст, не помещающийся ни в одно поле каталога, возвращай в notes:
    текст, область и код ближайшего поля. На этом бланке приписки на полях обычны.
11. Если страница не похожа на описанную форму, верни form_match: false
    и не заполняй поля.

КАТАЛОГ ПОЛЕЙ
{
  "form": "Издания из фондов БАН, страница 2 (оборот)",
  "fields": [
    {
      "code": "dim_length",
      "label": "Размеры (мм) · Длина",
      "type": "number"
    },
    {
      "code": "dim_width",
      "label": "Размеры (мм) · Ширина",
      "type": "number"
    },
    {
      "code": "dim_height",
      "label": "Размеры (мм) · Высота",
      "type": "number"
    },
    {
      "code": "bnd_state_intact",
      "label": "Переплёт · Состояние · Не повреждён",
      "type": "bool"
    },
    {
      "code": "bnd_state_damaged",
      "label": "Переплёт · Состояние · Повреждён",
      "type": "bool"
    },
    {
      "code": "bnd_state_lost",
      "label": "Переплёт · Состояние · Утрачен",
      "type": "bool"
    },
    {
      "code": "bnd_state_restored_before",
      "label": "Переплёт · Состояние · Ранее подвергался реставрации",
      "type": "bool"
    },
    {
      "code": "bnd_comp_combined",
      "label": "Переплёт · Состав · Комбинированный",
      "type": "bool"
    },
    {
      "code": "bnd_comp_solid",
      "label": "Переплёт · Состав · Цельный",
      "type": "bool"
    },
    {
      "code": "bnd_cover_leather",
      "label": "Переплёт · Материалы покрытия · Кожа",
      "type": "bool"
    },
    {
      "code": "bnd_cover_parchment",
      "label": "Переплёт · Материалы покрытия · Пергамент",
      "type": "bool"
    },
    {
      "code": "bnd_cover_fabric",
      "label": "Переплёт · Материалы покрытия · Ткань",
      "type": "bool"
    },
    {
      "code": "bnd_cover_paper",
      "label": "Переплёт · Материалы покрытия · Бумага",
      "type": "bool"
    },
    {
      "code": "bnd_base_wood",
      "label": "Переплёт · Материалы основы · Дерево",
      "type": "bool"
    },
    {
      "code": "bnd_base_cardboard",
      "label": "Переплёт · Материалы основы · Картон",
      "type": "bool"
    },
    {
      "code": "bnd_base_other",
      "label": "Переплёт · Материалы основы · Др. материалы",
      "type": "bool"
    },
    {
      "code": "bnd_dec_blind",
      "label": "Переплёт · Декор · Тиснение · Слепое",
      "type": "bool"
    },
    {
      "code": "bnd_dec_gold",
      "label": "Переплёт · Декор · Тиснение · Золотое",
      "type": "bool"
    },
    {
      "code": "bnd_dec_overlays",
      "label": "Переплёт · Декор · Украшения · Накладки",
      "type": "bool"
    },
    {
      "code": "bnd_dec_clasps",
      "label": "Переплёт · Декор · Украшения · Застёжки",
      "type": "bool"
    },
    {
      "code": "bnd_dec_metal",
      "label": "Переплёт · Декор · Украшения · Металл",
      "type": "bool"
    },
    {
      "code": "bnd_edge_gold",
      "label": "Переплёт · Декор · Обрез · Золото",
      "type": "bool"
    },
    {
      "code": "bnd_edge_other",
      "label": "Переплёт · Декор · Обрез · Др. виды",
      "type": "bool"
    },
    {
      "code": "bnd_edge_tooled",
      "label": "Переплёт · Декор · Обрез · Тиснение",
      "type": "bool"
    },
    {
      "code": "bnd_dmg_torn_off",
      "label": "Повреждения переплёта · Физико-механические · Оторван",
      "type": "bool"
    },
    {
      "code": "bnd_dmg_losses",
      "label": "Повреждения переплёта · Физико-механические · Утраты",
      "type": "bool"
    },
    {
      "code": "bnd_dmg_tears",
      "label": "Повреждения переплёта · Физико-механические · Разрывы",
      "type": "bool"
    },
    {
      "code": "bnd_dmg_deformation",
      "label": "Повреждения переплёта · Физико-механические · Деформация",
      "type": "bool"
    },
    {
      "code": "bnd_dmg_stains",
      "label": "Повреждения переплёта · Физико-механические · Пятна",
      "type": "bool"
    },
    {
      "code": "bnd_dmg_tidelines",
      "label": "Повреждения переплёта · Физико-механические · Затёки",
      "type": "bool"
    },
    {
      "code": "bnd_dmg_discoloration",
      "label": "Повреждения переплёта · Физико-механические · Изменения окраски",
      "type": "bool"
    },
    {
      "code": "bnd_dmg_destruction",
      "label": "Повреждения переплёта · Физико-механические · Разрушения",
      "type": "bool"
    },
    {
      "code": "bnd_dmg_brittleness",
      "label": "Повреждения переплёта · Физико-механические · Ломкость",
      "type": "bool"
    },
    {
      "code": "bnd_bio_pigmentation",
      "label": "Повреждения переплёта · Микробиологические · Биологическая пигментация",
      "type": "bool"
    },
    {
      "code": "bnd_bio_colonies",
      "label": "Повреждения переплёта · Микробиологические · Колонии микромицетов",
      "type": "bool"
    },
    {
      "code": "bnd_bio_destruction",
      "label": "Повреждения переплёта · Микробиологические · Биологическое разрушение",
      "type": "bool"
    },
    {
      "code": "bnd_bio_viable_microflora",
      "label": "Повреждения переплёта · Микробиологические · Жизнеспособная микрофлора",
      "type": "bool"
    },
    {
      "code": "bnd_ent_larval_tunnels",
      "label": "Повреждения переплёта · Энтомологические · Личиночные ходы",
      "type": "bool"
    },
    {
      "code": "bnd_ent_exuviae",
      "label": "Повреждения переплёта · Энтомологические · Экзувии",
      "type": "bool"
    },
    {
      "code": "bnd_ent_larvae",
      "label": "Повреждения переплёта · Энтомологические · Личинки",
      "type": "bool"
    },
    {
      "code": "bnd_ent_imago",
      "label": "Повреждения переплёта · Энтомологические · Имаго",
      "type": "bool"
    },
    {
      "code": "bnd_deg_physmech_low",
      "label": "Переплёт · Степень повреждения · Физико-механические · Низкая",
      "type": "bool"
    },
    {
      "code": "bnd_deg_physmech_medium",
      "label": "Переплёт · Степень повреждения · Физико-механические · Средняя",
      "type": "bool"
    },
    {
      "code": "bnd_deg_physmech_high",
      "label": "Переплёт · Степень повреждения · Физико-механические · Высокая",
      "type": "bool"
    },
    {
      "code": "bnd_deg_bio_low",
      "label": "Переплёт · Степень повреждения · Микробиологические · Низкая",
      "type": "bool"
    },
    {
      "code": "bnd_deg_bio_medium",
      "label": "Переплёт · Степень повреждения · Микробиологические · Средняя",
      "type": "bool"
    },
    {
      "code": "bnd_deg_bio_high",
      "label": "Переплёт · Степень повреждения · Микробиологические · Высокая",
      "type": "bool"
    },
    {
      "code": "bnd_deg_ento_low",
      "label": "Переплёт · Степень повреждения · Энтомологические · Низкая",
      "type": "bool"
    },
    {
      "code": "bnd_deg_ento_medium",
      "label": "Переплёт · Степень повреждения · Энтомологические · Средняя",
      "type": "bool"
    },
    {
      "code": "bnd_deg_ento_high",
      "label": "Переплёт · Степень повреждения · Энтомологические · Высокая",
      "type": "bool"
    },
    {
      "code": "blk_state_intact",
      "label": "Блок · Состояние · Не повреждён",
      "type": "bool"
    },
    {
      "code": "blk_state_damaged",
      "label": "Блок · Состояние · Повреждён",
      "type": "bool"
    },
    {
      "code": "blk_state_restored_before",
      "label": "Блок · Состояние · Ранее подвергался реставрации",
      "type": "bool"
    },
    {
      "code": "blk_quires_falling",
      "label": "Блок · Тетради · Выпадают",
      "type": "bool"
    },
    {
      "code": "blk_quires_missing",
      "label": "Блок · Тетради · Отсутствуют",
      "type": "bool"
    },
    {
      "code": "blk_sewing_broken",
      "label": "Блок · Тетради · Нарушено шитьё",
      "type": "bool"
    },
    {
      "code": "blk_sheets_falling",
      "label": "Блок · Листы · Выпадают",
      "type": "bool"
    },
    {
      "code": "blk_sheets_missing",
      "label": "Блок · Листы · Отсутствуют",
      "type": "bool"
    },
    {
      "code": "blk_sheets_damaged",
      "label": "Блок · Листы · Повреждения",
      "type": "bool"
    },
    {
      "code": "blk_dmg_losses",
      "label": "Повреждения блока · Физико-механические · Утраты",
      "type": "bool"
    },
    {
      "code": "blk_dmg_tears",
      "label": "Повреждения блока · Физико-механические · Разрывы",
      "type": "bool"
    },
    {
      "code": "blk_dmg_deformation",
      "label": "Повреждения блока · Физико-механические · Деформация",
      "type": "bool"
    },
    {
      "code": "blk_dmg_tidelines",
      "label": "Повреждения блока · Физико-механические · Затёки",
      "type": "bool"
    },
    {
      "code": "blk_dmg_discoloration",
      "label": "Повреждения блока · Физико-механические · Изменения окраски",
      "type": "bool"
    },
    {
      "code": "blk_dmg_destruction",
      "label": "Повреждения блока · Физико-механические · Разрушения",
      "type": "bool"
    },
    {
      "code": "blk_dmg_brittleness",
      "label": "Повреждения блока · Физико-механические · Ломкость",
      "type": "bool"
    },
    {
      "code": "blk_dmg_stains",
      "label": "Повреждения блока · Физико-механические · Пятна",
      "type": "bool"
    },
    {
      "code": "blk_bio_pigmentation",
      "label": "Повреждения блока · Микробиологические · Биологическая пигментация",
      "type": "bool"
    },
    {
      "code": "blk_bio_colonies",
      "label": "Повреждения блока · Микробиологические · Колонии микромицетов",
      "type": "bool"
    },
    {
      "code": "blk_bio_destruction",
      "label": "Повреждения блока · Микробиологические · Биологическое разрушение",
      "type": "bool"
    },
    {
      "code": "blk_bio_viable_microflora",
      "label": "Повреждения блока · Микробиологические · Жизнеспособная микрофлора",
      "type": "bool"
    },
    {
      "code": "blk_ent_larval_tunnels",
      "label": "Повреждения блока · Энтомологические · Личиночные ходы",
      "type": "bool"
    },
    {
      "code": "blk_ent_exuviae",
      "label": "Повреждения блока · Энтомологические · Экзувии",
      "type": "bool"
    },
    {
      "code": "blk_ent_larvae",
      "label": "Повреждения блока · Энтомологические · Личинки",
      "type": "bool"
    },
    {
      "code": "blk_ent_imago",
      "label": "Повреждения блока · Энтомологические · Имаго",
      "type": "bool"
    },
    {
      "code": "blk_deg_physmech_low",
      "label": "Блок · Степень повреждения · Физико-механические · Низкая",
      "type": "bool"
    },
    {
      "code": "blk_deg_physmech_medium",
      "label": "Блок · Степень повреждения · Физико-механические · Средняя",
      "type": "bool"
    },
    {
      "code": "blk_deg_physmech_high",
      "label": "Блок · Степень повреждения · Физико-механические · Высокая",
      "type": "bool"
    },
    {
      "code": "blk_deg_bio_low",
      "label": "Блок · Степень повреждения · Микробиологические · Низкая",
      "type": "bool"
    },
    {
      "code": "blk_deg_bio_medium",
      "label": "Блок · Степень повреждения · Микробиологические · Средняя",
      "type": "bool"
    },
    {
      "code": "blk_deg_bio_high",
      "label": "Блок · Степень повреждения · Микробиологические · Высокая",
      "type": "bool"
    },
    {
      "code": "blk_deg_ento_low",
      "label": "Блок · Степень повреждения · Энтомологические · Низкая",
      "type": "bool"
    },
    {
      "code": "blk_deg_ento_medium",
      "label": "Блок · Степень повреждения · Энтомологические · Средняя",
      "type": "bool"
    },
    {
      "code": "blk_deg_ento_high",
      "label": "Блок · Степень повреждения · Энтомологические · Высокая",
      "type": "bool"
    },
    {
      "code": "blk_ph",
      "label": "Величина pH",
      "type": "string",
      "hint": "пишут с уточнением места замера: «5,83 перед форзацем»"
    },
    {
      "code": "page2_comment",
      "label": "Комментарий",
      "type": "string"
    }
  ],
  "tables": [
    {
      "code": "biotest",
      "label": "Биотест",
      "columns": [
        {
          "code": "seq_no",
          "label": "№ П/П",
          "type": "number"
        },
        {
          "code": "placed_at",
          "label": "Дата закладки",
          "type": "date"
        },
        {
          "code": "performer",
          "label": "Исполнитель",
          "type": "string"
        }
      ]
    },
    {
      "code": "bio_expertise",
      "label": "Текущая биологическая экспертиза",
      "columns": [
        {
          "code": "examined_at",
          "label": "Дата экспертизы",
          "type": "date"
        },
        {
          "code": "performer",
          "label": "Исполнитель",
          "type": "string"
        },
        {
          "code": "result",
          "label": "Результат",
          "type": "string"
        }
      ]
    },
    {
      "code": "experts",
      "label": "Эксперт",
      "columns": [
        {
          "code": "role",
          "label": "Должность",
          "type": "string"
        },
        {
          "code": "examined_at",
          "label": "Дата экспертизы",
          "type": "date"
        },
        {
          "code": "person",
          "label": "Ф И О",
          "type": "string"
        },
        {
          "code": "signature",
          "label": "Подпись",
          "type": "string",
          "hint": "росчерк не разбирать: «есть» либо null"
        },
        {
          "code": "result",
          "label": "Результат",
          "type": "string"
        }
      ]
    }
  ]
}

10. Схема ответа

{
  "type": "object",
  "required": ["form_match", "values"],
  "properties": {
    "form_match": { "type": "boolean" },
    "values": {
      "type": "array",
      "items": {
        "type": "object",
        "required": ["code", "value", "confidence"],
        "properties": {
          "code":       { "type": "string" },
          "value":      { "type": ["string", "number", "boolean", "null"] },
          "confidence": { "type": "number", "minimum": 0, "maximum": 1 },
          "printed":    { "type": "boolean" },
          "bbox":       { "type": "array", "minItems": 4, "maxItems": 4,
                          "items": { "type": "number" } }
        }
      }
    },
    "tables": {
      "type": "array",
      "items": {
        "type": "object",
        "required": ["code", "rows"],
        "properties": {
          "code": { "type": "string" },
          "rows": {
            "type": "array",
            "items": {
              "type": "array",
              "items": {
                "type": "object",
                "required": ["code", "value", "confidence"],
                "properties": {
                  "code":       { "type": "string" },
                  "value":      { "type": ["string", "number", "null"] },
                  "confidence": { "type": "number", "minimum": 0, "maximum": 1 },
                  "bbox":       { "type": "array", "minItems": 4, "maxItems": 4,
                                  "items": { "type": "number" } }
                }
              }
            }
          }
        }
      }
    },
    "notes": {
      "type": "array",
      "items": {
        "type": "object",
        "required": ["text", "bbox"],
        "properties": {
          "text":       { "type": "string" },
          "bbox":       { "type": "array", "minItems": 4, "maxItems": 4,
                          "items": { "type": "number" } },
          "near_field": { "type": "string" }
        }
      }
    }
  }
}

Пример ответа по образцу инв. 74870, где заполнены только шифр и инвентарный номер:

{
  "form_match": true,
  "values": [
    { "code": "shelf",        "value": "105 д", "confidence": 0.58, "bbox": [25, 14.4, 12, 2.1] },
    { "code": "inventory_no", "value": "74870", "confidence": 0.77, "bbox": [57, 14.3, 15, 2.1] },
    { "code": "card_date",    "value": null,    "confidence": 0 },
    { "code": "title",        "value": null,    "confidence": 0 },
    { "code": "bookplate_description",
      "value": "Овальный штамп сажевый гербовый: орёл с саблей под графской короной",
      "confidence": 0.96, "printed": true, "bbox": [34, 38.4, 32, 3.7] },
    { "code": "book_restoration_assigned", "value": true,  "confidence": 0.88, "bbox": [27, 68.2, 8, 2.7] },
    { "code": "book_restoration_done",     "value": false, "confidence": 0.9 }
  ],
  "notes": []
}

Фрагмент ответа по обороту того же образца — с таблицей и с припиской вне полей:

{
  "form_match": true,
  "values": [
    { "code": "bnd_state_damaged",   "value": true,  "confidence": 0.85 },
    { "code": "bnd_comp_combined",   "value": true,  "confidence": 0.83 },
    { "code": "bnd_cover_paper",     "value": true,  "confidence": 0.8 },
    { "code": "bnd_base_cardboard",  "value": true,  "confidence": 0.82 },
    { "code": "bnd_edge_other",      "value": true,  "confidence": 0.72 },
    { "code": "bnd_deg_physmech_high", "value": true, "confidence": 0.79 },
    { "code": "blk_ph", "value": "5,83 перед форзацем", "confidence": 0.54,
      "bbox": [11.8, 59.1, 17.5, 2.4] }
  ],
  "tables": [
    {
      "code": "bio_expertise",
      "rows": [
        [
          { "code": "examined_at", "value": "11.01.23",   "confidence": 0.74 },
          { "code": "performer",   "value": "Тишева З.А.", "confidence": 0.41 },
          { "code": "result",      "value": "отр.",        "confidence": 0.38 }
        ]
      ]
    },
    {
      "code": "experts",
      "rows": [
        [
          { "code": "role",        "value": "микробиолог", "confidence": 0.46 },
          { "code": "examined_at", "value": "20.01.23",    "confidence": 0.68 },
          { "code": "person",      "value": "Тишева",      "confidence": 0.39 },
          { "code": "signature",   "value": "есть",        "confidence": 0.9 }
        ],
        [
          { "code": "role",        "value": "консерватор",   "confidence": 0.52 },
          { "code": "examined_at", "value": "23.01.23",      "confidence": 0.66 },
          { "code": "person",      "value": "Колотилкина Е.В.", "confidence": 0.44 },
          { "code": "signature",   "value": "есть",          "confidence": 0.9 }
        ]
      ]
    }
  ],
  "notes": [
    { "text": "нет", "bbox": [88.2, 47.1, 5.4, 2.0],
      "near_field": "bnd_deg_ento_low" }
  ]
}

Уверенность в этом примере намеренно низкая на фамилиях и результатах: почерк в журнальных таблицах беглый, и именно здесь ожидается больше всего правок пользователем.

11. Чего ожидать от модели

Координаты даются хуже значений. Языковая модель оценивает положение области приблизительно; ошибка в строку-две обычна. Если подсветка фрагмента важна — а на ней держится проверка карты, — координаты надёжнее получать от распознавания текста со словными координатами и сопоставлять с извлечёнными значениями по самому тексту.

Отметки читаются хуже, чем кажется. Знаки в клетках разные, часть выходит за границы, часть проставлена карандашом. Отметки стоит проверять выборочно даже при высокой уверенности модели.

Уверенность модели — не вероятность. Это её собственная оценка, склонная к завышению на рукописном тексте. Пороги отсечения имеет смысл подбирать по размеченным образцам, а не назначать умозрительно.

Связанные артефакты

Документы