Номинируйте кейсы на Workspace Digital Awards 2026. Прием заявок до 15 декабря по льготной цене, успейте принять участие!
Назад
Мобильная разработка

Распознавание бланков медицинских анализов для проекта «Я здоров»

733 
 

Подробнее о продукте

Мы занимаемся не только созданием цифровых решений для клиентов, но и активно развиваем собственные IT-продукты и стартапы. Опыт в разработке и продвижении собственных проектов напрямую помогает нам в в понимании задач бизнеса клиента в аутсорсинговой разработке. Один из наших стартапов — онлайн-ассистент «Я здоров», в основе которого лежат технологии AI/ML.

Распознавание бланков медицинских анализов для проекта «Я здоров»

«Я здоров» — это:

  1. Универсальная медицинская карта для хранения, распознавания и систематизации медицинских документов
  2. AI-консультант по вопросам, связанным со здоровьем
  3. Платформа для удаленного взаимодействия с врачами

Основные миссии продукта

В основе идеи продукта лежит мысль о том, что людям важно не периодически лечиться от болезней, а поддерживать здоровье постоянно и превентивно. Мы верим, что будущее — за профилактикой и регулярным мониторингом состояния здоровья, а не за решением проблем со здоровьем по мере их поступления.—  Основатель ASAP, Даниил Васильев

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

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

Современные тенденции в медицине указывают на перемены:

  1. От пациентоцентричности к клиентоцентричности — сопровождение человека не только в период болезни, но и на протяжении всей его жизни.
  2. Равный акцент на профилактике, регулярных проверках и раннем выявлении заболеваний, а не только на их лечении.
  3. Интегративная медицина, учитывающая взаимосвязь систем организма и междисциплинарные причины заболеваний.

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

Главная цель продукта — сформировать экосистему, которая объединяет всю доступную информацию о здоровье человека, проводит анализ и выдает индивидуальные рекомендации по питанию, образу жизни, обследованиям и выбору специалистов.

Задача — обеспечить постоянный контроль состояния здоровья, а не только разовое устранение недугов.

Возможности приложения

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

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

Загрузка и распознавание бланков. Прием фото- и pdf-файлов с автоматическим распознаванием данных и возможностью их корректировки перед сохранением.

Семейный профиль. Ведение карт здоровья для членов семьи и быстрое переключение между ними.

Работа с медицинскими специалистами. Настройка прав доступа врачей к карте и участие в опросах.

Текстово-голосовой ассистент. Управление функциями приложения и получение медицинских ответов в текстовом и голосовом формате.

В разработке:

  1.  Интеграция с ЕГИСЗ — доступ к данным из государственных медсистем прямо в приложении.
  2. Дневник и календарь здоровья — учет питания, активности, температуры, давления и других параметров, а также записи к врачам.
  3. Медицинские рекомендации — советы, которые ИИ будет формировать на основе медицинской карты и дневниковых данных.

Медицинская карта

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

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

Вносить результаты анализов вручную не только долго, но и неудобно.

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

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

В этой публикации мы расскажем, как подошли к решению этой задачи, с какими барьерами столкнулись, какие промежуточные результаты получили и что продолжаем улучшать.

Постановка задачи

Нужно было реализовать обработку бланков анализов из разных лабораторий — как в виде файлов, так и фотографий — с сохранением данных со следующими полями:

  1. Название биомаркера
  2. Значение
  3. Единица измерения
  4. Референсные значения

Сложности, с которыми мы столкнулись

Формы бланков значительно разнятся.

Для извлечения текста из изображения применяется OCR-модель — технология, переводящая печатный документ в цифровой текст.

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

Распознавание бланков медицинских анализов для проекта «Я здоров»

Так выглядит нормальная структура бланков

Распознавание бланков медицинских анализов для проекта «Я здоров»

Но бывают и такие

Кроме того, встречаются изображения с низким качеством, плохим контрастом или другими дефектами.

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

Синонимы и сокращения

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

Распознавание бланков медицинских анализов для проекта «Я здоров»

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

Для минимизации ошибок требуется собрать обширную базу синонимов, вариантов написания и единиц измерения. Тем не менее, всегда существует риск встретить уникальное сокращение, которое не совпадает ни с одним из известных системе.

Реализация 

Верхнеуровневый пайплайн решения мы построили следующим образом:

Распознавание бланков медицинских анализов для проекта «Я здоров»

Сначала формируем базу данных. Далее выполняем распознавание и структурирование информации с помощью мультимодальной модели, а также OCR в сочетании с собственными алгоритмами. Затем проводится определение биомаркеров и объединение повторяющихся записей.

Сбор базы данных биомаркеров, единиц измерения и референсных значений

Для корректной работы алгоритмов распознавания и бесперебойного функционирования приложения была необходима полная структурированная база, в которую входят:

  1. Названия биомаркеров и их синонимы
  2.  Используемые единицы измерения
  3. Коэффициенты пересчета между ними
  4. Референсные значения (нормы)
  5. Типы биоматериалов

Особенности и сложности данных, с которыми мы работаем

Референсные значения зависят от категории пациентов

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

Индивидуальные коэффициенты пересчета для одинаковых единиц

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

Пример:


Разместите
тендер бесплатно

Наша система сама подберет вам исполнителей на услуги, связанные с разработкой сайта или приложения, поисковой оптимизацией, контекстной рекламой, маркетингом, SMM и PR.

Заполнить заявку 13201 тендер
проведено за восемь лет работы нашего сайта.


Представьте, что при измерении длины дивана в одном случае 1 метр равен 100 см, а в другом — 90 см. Хотя звучит странно, в лабораторной практике встречается похожее.

Например:

• глюкоза: мг/дл × 0,0555 → ммоль/л

• молочная кислота: мг/дл × 0,111 → ммоль/л

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

Почему это трудоемкий процесс

Сбор такой базы — сложная задача. На сегодняшний день у нас более 2000 уникальных биомаркеров, и для каждого необходимо:

  1. Зафиксировать все возможные названия
  2. Собрать синонимы
  3. Определить варианты единиц измерения
  4. Рассчитать и проверить коэффициенты пересчета
  5. Подтвердить корректность референсных значений

Откуда мы берём данные

Для наполнения базы мы используем два основных источника:

  1. Парсинг сайтов крупных лабораторий — позволяет собрать нормативную и справочную информацию.
  2. Обработка реальных бланков — извлекаем данные с помощью наших алгоритмов распознавания.

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

Распознавание данных с помощью OCR + собственного алгоритма

Следующий этап — извлечение текста с изображений бланков. Для этого мы используем OCR (оптическое распознавание символов) и собственные алгоритмы анализа и структурирования данных. Мы тестировали несколько OCR-систем, включая Yandex OCR и другие решения. В текущей версии проекта остановились на Tesseract OCR.

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

  1. Преобразование в черно-белый формат — важно, так как лаборатории выделяют отклонения цветом (например, красным), что усложняет распознавание.
  2. Повышение резкости и контрастности — особенно актуально для некачественных фото: засветы, размытости и недостаточное освещение.
  3. Коррекция поворотов и сдвигов изображения — OCR хуже распознает текст под углом, поэтому бланки предварительно выравниваются.
  4. Выделение блоков и послойное распознавание — вместо построчного чтения мы разбиваем изображение на логические блоки, что помогает отделять биомаркеры от вспомогательных подкатегорий.

Почему построчное распознавание не работает

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

Как мы извлекаем нужные данные

После OCR мы получаем текст и координаты каждого элемента на изображении. Далее мы выполняем:

  1. Сопоставление и структурирование данных по координатам элементов.
  2. Поиск по базе биомаркеров и их синонимов, которые были распознаны.
  3. Коррекция поворотов и сдвигов изображения — OCR хуже распознает текст под углом, поэтому бланки предварительно выравниваются.
  4. Выделение блоков и послойное распознавание — вместо построчного чтения мы разбиваем изображение на логические блоки, что помогает отделять биомаркеры от вспомогательных подкатегорий.

На этом этапе мы сталкиваемся с проблемой: из-за множества синонимов и сокращений текстовое совпадение не всегда точное, и система может принять уже существующий биомаркер за новый, что приводит к дубликатам.

Для решения этой задачи мы использовали векторный поиск. Он сравнивает слова не по буквальному совпадению, а по смысловой близости. Но и здесь возникла трудность: стандартные векторизаторы настроены на естественные тексты на русском и английском языках. Биомаркеры и их синонимы формируют «неестественный язык» с особыми правилами смысловой близости и различий.

Распознавание данных с помощью OCR + LLM

Этот подход рассматривается как альтернативный вариант при разработке системы распознавания медицинских документов с применением мультимодальной модели (OCR + LLM).

Идея подхода

Первоначально мы создали собственный OCR-алгоритм с надстройками для структурирования данных. Метод работал, но требовал сложной логики и постоянной поддержки. Во втором подходе мы решили упростить процесс: полностью передать задачу распознавания и структурирования мультимодальной модели.

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

При выборе моделей мы столкнулись с рядом сложностей

  1. Локальное исполнение. Использование облачных API исключено по соображениям безопасности, так как документы могут содержать персональные данные.
  2. Скорость обработки. Нужна мгновенная обработка: пользователь загружает бланк и сразу получает результат, в отличие от систем с фоновым распознаванием.
  3. Коррекция поворотов и сдвигов изображения — OCR хуже распознает текст под углом, поэтому бланки предварительно выравниваются.
  4. Выделение блоков и послойное распознавание — вместо построчного чтения мы разбиваем изображение на логические блоки, что помогает отделять биомаркеры от вспомогательных подкатегорий.

Поэтому мы остановились на Qwen 7B omni

После серии тестов мы выбрали модель Qwen 7B. Параллельно продолжаем тестировать оба подхода — классический OCR и мультимодальную модель. Точность распознавания примерно одинаковая, но вариант с LLM требует меньше кода и логики для работы. Собственный алгоритм тоже имеет плюсы: требует меньше ресурсов и более прозрачен.

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

Промежуточные результаты

Точность распознавания: полноценное тестирование на больших массивах данных ещё не проведено, но текущие результаты обнадеживают. Точность распознавания биомаркеров превышает 90%.

Как мы это измеряли

Методика оценки прозрачная: тестовая выборка — около 100 бланков медицинских анализов, в каждом — в среднем 20 биомаркеров. Качество бланков разное: от четких PDF с таблицами до менее удачных вариантов.

Бланки проходили через систему распознавания, данные по биомаркерам извлекались и сверялись с оригиналом. Более 90% данных совпали с исходными, что позволяет использовать систему в реальных сценариях.

Проблема обработки дублей биомаркеров: вызов для векторного поиска

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

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

В связи с этим рассматривается подход дообучения эмбеддинговой модели для векторного поиска. Планируется использовать корпус уже собранных названий биомаркеров и их синонимов для создания троек: исходный биомаркер, близкое по смыслу значение и далёкое по смыслу значение. Также предусмотрено дальнейшее обучение векторизатора с помощью метода Contrastive Learning.

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

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

Будущее проекта «Я здоров»

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

Работа над приложением не ограничивается этим: мы планируем развивать и другие функции, чтобы сделать «Я здоров» комплексным помощником по здоровью, который всегда будет под рукой.

В планах разработки:

  1. Инструменты для врачей
  2. Интеграция с частными клиниками
  3. Потенциальная интеграция с государственными медицинскими системами
  4. Партнёрства с крупными игроками медицинской сферы

Проект «Я здоров» создаёт условия для формирования новой парадигмы здравоохранения, где поддержка здоровья осуществляется непрерывно с помощью технологий, сбора данных и персонализированного подхода. Это вдохновляет нашу команду продолжать работу.

Спасибо всем, кто дочитал до конца. Мы запустили сайт сервиса «Я здоров» — yazapp.ru, и готовимся к релизу продукта. Оставьте заявку по ссылке, чтобы получить доступ к регистрации одними из первых.

Выскажите мнение
Авторизуйтесь, чтобы добавить свой комментарий.




733

Лучшие статьи

Поделиться: 0 0 0