Адаптация PDF под требования доступности с помощью ИИ
Legible превращает документ — PDF или изображение по ссылке или загруженным файлом — в результат, с которым могут работать скринридеры. Он рассчитан на тех, кто руководит работой по доступности в университетах и издательствах и должен сделать учебники, статьи и презентации удобными для незрячих и слабовидящих читателей. Для каждой иллюстрации, графика, схемы и формулы Legible создаёт структуру, которая нужна скринридеру, и точно отмечает, что человеку ещё предстоит проверить.
Мы сделали его для трека 3 хакатона AMD Developer Hackathon: ACT II. Код распространяется по лицензии MIT и открыт на GitHub.
Ключевые возможности
- Многоуровневый alt-текст — каждая иллюстрация получает короткий атрибут
altдлиной до 125 символов и полное структурированное описание. - Восстановление таблиц из графиков — цифры, стоящие за графиком, восстанавливаются в виде строк и столбцов, поэтому данные не зависят от цвета или формы.
- MathML для формул — корректный презентационный MathML идёт рядом с LaTeX, поэтому скринридеры правильно зачитывают формулы.
- Лучше null, чем догадка — значение, которое не удалось прочитать, становится null и выставляет флаг
needs_human_review. Модели прямо запрещено выдумывать цифры. - Происхождение и уверенность — для каждого элемента записано, откуда он взят: из самой иллюстрации, из подписи или получен логическим выводом.
- Экспорт в доступный HTML — пакет содержит элементы
figureиfigcaption, раскрывающиеся полные описания, таблицы с подписями и MathML. Отдельный эндпоинт возвращает JSON-карту соответствия идентификаторов иллюстраций и их alt-текстов.
Архитектура и технологический стек
Пайплайн
Задача проходит семь этапов: приём, растеризация, поиск иллюстраций, анализ, синтез, валидация и сохранение. Документы скачиваются через httpx или загружаются напрямую. PDF растеризуются в 150 DPI с помощью PyMuPDF, а запасным вариантом служит pdf2image.
Детектор иллюстраций по умолчанию считает каждую страницу одной областью с иллюстрацией — это хорошо работает для слайдов, одиночных графиков и сканов. Разбор макета с поиском отдельных иллюстраций можно добавить позже как отдельный провайдер, не меняя остальной пайплайн.
Чтение и структурирование иллюстраций
Qwen2.5-VL читает каждый фрагмент с иллюстрацией: определяет её тип, переписывает текст на ней, извлекает значения графиков и записывает формулы. Именно эта пакетная визуальная нагрузка рассчитана на GPU AMD Instinct MI300X через ROCm.
Затем Gemma переводит прочитанное в схему доступности. Она выдаёт структурированный ответ по JSON-схеме при температуре 0 и опирается только на то, что увидела визуальная модель. Валидация отбрасывает пустые записи, перенумеровывает иллюстрации, обрезает короткий alt-текст до нужной длины и отправляет всё сомнительное на проверку.
Сервис
Сервис работает на FastAPI с асинхронными задачами, прогрессом через Server-Sent Events, хранилищем на SQLite и подключаемыми провайдерами. Для синтеза можно использовать Gemma через Google AI Studio или Fireworks AI либо Gemma, развёрнутую через vLLM на железе AMD. В режиме моков весь пайплайн работает офлайн на встроенной странице учебника по климатологии, и в этом режиме проходят все 14 тестов.
Место в процессе адаптации
Legible делает первый проход, а не ставит финальную подпись. Он задуман так, чтобы специалист по доступности мог сосредоточиться на отмеченных иллюстрациях, а не переделывать вручную каждое изображение. Мы не утверждаем, что его результат сам по себе соответствует требованиям. Проверка человеком заложена в сам замысел.
Смежные работы
Legible — часть нашей работы по внедрению ИИ и автоматизации. Ещё один пайплайн, который делает документы удобнее для чтения, — конвертация сканированных PDF в издания с крупным шрифтом для Knigopoisk. Другие проекты с того же хакатона — Testify, RecipeReel и Keystone.



