Стажировка по проекту
Разработка интеллектуальной системы, способной анализировать результаты биохимических анализов крови, представленных в различных формах
ФГБУ Научный медицинский исследовательский центр терапии и профилактической медицины Минздрава РФ

Суть проекта
Назначение системы
нефункциональные требования
функциональные требования
Система предназначена для автоматического распознавания ключевых показателей из результатов биохимических анализов крови, представленных в виде цифровых изображений или текстовых файлов, с целью упрощения ввода данных в базу и минимизации ошибок.
1. Производительность
  • Время обработки одного файла не должно превышать 10 секунд.
2. Поддержка платформ
  • Веб-приложение: работа через браузер (рекомендуется Chrome).
3. Десктоп-приложение: совместимость с Windows (опционально).
4. Простота развертывания
  • Возможность локального запуска без сложной настройки.
5. Ограничения
  • Работа с тестовыми данными, предоставленными заказчиком.
  • Поддержка только русского языка
1. Разработка модели машинного обучения
  • Подготовка обучающего и тестового набора данных
  • Обучение модели для распознавания и классификации ключевых биомаркеров
2. Создание пользовательского интерфейса
  • Разработка простого интерфейса для демонстрации результатов.
3. Интеграция с базой данных (опционально)
  • Разработка схемы БД
  • Настройка сохранения извлеченных данных
4. Тестирование
  • Проверка корректности распознавания и работы интерфейса
  • Проведение демонстрации для заказчика


этапы реализации
Обработка данных
1. Распознавание данных из загруженных файлов:
  • Поддерживаемые форматы: JPEG, PNG, PDF (только текстовый слой).
  • Извлечение показателей: Общий холестерин и др
2. Выделение значений показателей, единиц измерения и даты исследования
3. Обработка и уведомление о нераспознанных или некорректных значениях

Интерфейс приложения
1. Приложение должно иметь следующие функциональные модули:
  • Загрузка файла
  • Отображение извлеченных данных в табличном виде
  • Возможность ручной коррекции данных (опционально)
2. Интерфейс должен быть:
  • Простым и интуитивно понятным
  • Содержать кнопку для экспорта результатов

База данных (опционально)
1. База данных должна быть создана на уровне proof of concept и содержать:
  • Таблицу для хранения извлеченных данных.
  • Поля: биомаркер, значение, единицы измерения, дата анализа, дата загрузки, идентификатор записи
Критерии:
  1. Успешное извлечение биомаркеров с точностью не менее 80% на предоставленных тестовых данных
  2. Корректное отображение и сохранение данных в базе
  3. Работоспособный интерфейс для загрузки файлов и отображения результатов
  4. Доказанная возможность расширения функционала в будущем

Выходные данные:
Реляционная база данных с результатами исследований крови по ключевым биомаркерам
  1. Проведено исследование и тестирование ряда OCR-библиотек для распознавания медицинских текстов
  2. Разработан и протестирован код для предобработки изображений, включая удаление черных квадратов, коррекцию перспективы и изменение разрешения. Было установлено, что предобработка может улучшить качество распознавания для определенных типов изображений
  3. Проведены эксперименты с использованием языковых моделей (Саiga и др.) для извлечения структурированной информации из распознанного текста
  4. Создана базовая структура пайплайна обработки данных, включающая этапы предобработки, OCR и LLM
  5. Разработан прототип пользовательского интерфейса для загрузки файлов и запуска анализа
  6. Создана база данных, содержащая информацию о биомаркерах
  7. Разработаны скрипты для расчета метрик качества распознавания OCR (например, на основе сравнения с эталонными текстами)
  8. Подготовлен датасет размеченных изображений для оценки качества работы OCR
  9. Получены данные о качестве распознавания различных OCR-моделей на различных типах изображений
  10. Найдено решение для пакетной обработки изображений
  11. Разработан алгоритм для выравнивания текста на изображениях
  12. Созданы endpoint для загрузки файлов и запуска анализа
Критерии приемки и выходные данные
Результаты проекта
Участники
1 команды проекта
  • Павел Химяк
    Тимлид проекта
    • Руководил командой разработчиков на всех этапах проекта.
    • Организовывал планирование задач, контролировал их выполнение и соблюдение сроков.
    • Обеспечивал эффективную коммуникацию внутри команды и с заказчиком.
    • Проводил регулярные встречи для обсуждения текущих проблем и решения возникающих вопросов.
    • Оказывал техническую поддержку команде, помогал в выборе оптимальных решений, а также наставлял и обучал менее опытных сотрудников.
    • Вел контроль за качеством кода и соблюдением стандартов разработки
  • Владимир Маркин
    Помощник тимлида
    • Помогал Тимлиду в организационных вопросах по проекту.
    • Инициировал и проводил обсуждения на он-лайн встречах.
    • Занимался распределением еженедельных задач и контролем их исполнения.
    • Предоставлял результаты тестирования различных локальных LLM
  • Андрей Малицкий
    Помощник тимлида
    • Участвовал в руководстве командой, обеспечивая эффективное взаимодействие между тимлидом и участниками проекта.
    • Предоставлял различные методологические материалы
  • Николай Наумов
    Инженер-программист в ООО «ГТЛАБ»
    • OCR backend сервер: paddle, easyocr, tesseract
    • Сделал приложение all-in-one:
    - загрузка и предобработка изображения Streamlit
    - ollama (ollama module), ollama (openai module)
    - редактируемый JSON результат
    - запись результата в SQLite
    - клиенты к серверам backend OCR
    • Docker с итоговым приложением
    • Docker-compose с итоговым приложением и OCR backend
  • Михаил Герман
    Предприниматель, внедрение AI в реальный бизнес
    • Развернул сервер БД PostgreSQL на FastAPI, обеспечив высокую скорость обработки данных и удобное API для взаимодействия.
    • Настроил бэкенд для распознавания табличных данных из изображений, используя мощь Tesseract, Surya и EasyOCR
    • Развернул локально LLM-модель Ollama, позволяя обрабатывать и анализировать текст прямо на устройстве без облачных сервисов.
    • Интегрировал всё в единый дашборд на Streamlit, создав удобный интерфейс для работы с данными
    • Создал стабильную и масштабируемую архитектуру, позволяющую легко адаптировать проект под новые задачи
    • Итог: Полностью автономное решение, объединяющее базы данных, OCR, нейросети и удобный UI
  • Ульяна Джумок
    DevOps инженер
    • Занималась реализацией сервера с OCR движками на выбор: EasyOCR, TesseractOCR, PaddleOCR и SuryaOCR
    • Разрабатывала веб-фронтенд для интеграции серверов гомогенного преобразования, OCR и LLM
  • Наталья Выговская
    Старший преподаватель в Белорусско-Российском университете на кафедре «Автоматизированные системы управления»
    • Экспериментировала с использованием Easyocr и Pytesseract для распознавания медицинских анализов;
    • Экспериментировала по использованию LLM Ollama для структурирования данных;
    • Сделала собственный web-интерфейс для разработанного коллегой веб-приложения;
    • Тестировала приложений коллег
  • Александр Карманов
    Верстальщик электронных книг в Российской Государственной Библиотеке
    • Разрабатывал модуль для исправления геометрии изображения.
    • Сравнивал OCR для выбора лучшей
    • Составлял промпта для LLM
  • Владимир Макаров
    • Создавал модуль выравнивания изображения
  • Евгения Лукашина
    В отпуске по уходу за ребенком, Ранее главный специлист в ПАО «Сбербанк» 
    • Искала и анализировала модели для OCR.
    • Проводила эксперименты на датасете заказчика (SuryaOCR, PyTesseract, EasyOCR, PaddleOCR).
    • Создавала и тестировала промпты по обработке результатов OCR для ChatGPT.
    • Занималась написанием скрипта и созданием датасета выводов SuryaOCR для создания и тестирования промптов
  • Елена Коваленко
    Преподаватель Саратовского медицинского университета, врач-кардиолог, эксперт по качеству медицинской помощи
    • Тестировала разные технологии OCR для распознавания текста на сканах с результатами исследований крови
    • Занималась созданием итоговой презентации проекта
  • Павел Иткинсон
    Руководитель филиала
    • Обрабатывал изображения для подачи в OCR
    • Тестировал OCR, выбирал OCR
    • Подавал распознанного OCR фрагмента в Ollama, тестировал промты
    • Пробовал создать свой вариант программы
    • Тестировал приложения коллег
  • Дмитрий Ронжин
    Экономист
    • Реализовал Docker-ориентированного микросервиса на базе Ollama Framework с поддержкой параллельного выполнения 5 open-source языковых моделей (LLM) и стандартизированного выходного формата (JSON)
    • Развернул Docker-контейнеров и отдельные серверы для участников проекта на удаленной инфраструктуре и занимался интеграцией их в единую сеть для обеспечения взаимодействия между сервисами.
    • Разработал клиентское приложение с интеграцией backend-сервиса для автоматической обработки изображений анализов крови и генерации структурированных данных в формате JSON с последующей синхронизацией результатов между клиентом и сервером.
    • Разработал адаптивные промпты для интеграции с моделями LLM и OCR-системами, оптимизированных под различные конфигурации и сценарии использования.
Участники
2 команды проекта

  • Руслан Гришаков
    Тимлид проекта
    Руководитель группы разработчиков, отвечал за полную разработку проекта
  • Владимир Подлевских
    Помощник тимлида
    Оказывал поддержку руководителю команды в организации процесса разработки проекта и выполнил также следующие задачи:
    • Разработка структуры проекта
    • Координация распределения работ
    • Консультация коллег по инструментам разработки
    • Проведение дополнительных встреч
    • Разработка модуля для предобработки и аффинных преобразований входных данных
    • Разработка модуля для взаимодействия с LLM
    • Разработка модуля для записи в базу данных
    • Разработка фронтенда
    • Сборка и отладка приложения
    • Презентация проекта
  • Руслан Бельтюгов
    Project manager
    • Участвовал в разработке структуры проекта
    • Участвовал в сборе и разметке датасета
    • Исследовал возможности применения LLM
    • Участвовал в разработке модуля для предобработки и аффинных преобразований входных данных
    • Участвовал в разработке модуля для выявления целевых зон распознавания
    • Участвовал в разработке модуля для обработки таблиц
    • Подбирал средства OCR
    • Участвовал в разработке модуля для OCR
  • Надежда Высокосова
    В декретном отпуске
    • Участвовала в разработке структуры проекта
    • Участвовала в сборе и разметке датасета
    • Участвовала в разработке модуля для предобработки и аффинных преобразований входных данных
    • Участвовала в разработке модуля для выявления целевых зон распознавания
    • Участвовала в разработке модуля для обработки таблиц
    • Подобрала средств OCR
    • Участвовала в разработке модуля для OCR
    • Создавала словарь ключевых параметров и единиц измерения
    • Участвовала в разработке модуля для NLP и валидации распознанных данных
    • Подготовила презентации проекта
  • Людмила Прокопьева
    Менеджер маркетплейсов
    • Участвовала в сборе и разметке датасета
    • Участвовала в разработке модуля для предобработки и аффинных преобразований входных данных
    • Участвовала в разработке модуля для выявления целевых зон распознавания
    • Участвовала в разработке модуля для обработки таблиц
    • Подбирала средства OCR
    • Участвовала в разработке модуля для NLP и валидации распознанных данных
    • Подготавливала презентации проекта
  • Алёна Пуджа
    работает в сфере похоронных услуг
    • Участвовала в сборе и разметке датасета
    • Участвовала в разработке модуля для предобработки и аффинных преобразований входных данных
    • Участвовала в разработке модуля для обработки таблиц
    • Подбирала средства OCR
    • Участвовала в разработке модуля для NLP и валидации распознанных данных
  • Ольга Бутовицкая
    Маркетолог
    • Участвовала в сборе и разметке датасета
    • Участвовала в разработке модуля для предобработки и аффинных преобразований входных данных
    • Участвовала в разработке модуля для обработки таблиц
  • Александр Поздняков
    Старший преподаватель ДГТУ
    • Участвовал в сборе и разметке датасета
    • Участвовал в разработке модуля для предобработки и аффинных преобразований входных данных
    • Подбирал средств OCR
    • Участвовал в разработке модуля для OCR
Участники
3 команды проекта

  • Николай КУс
    Тимлид проекта
    Руководитель группы разработчиков, отвечал за полную разработку проекта
  • Сергей Подобряев
    Экономист
    • Разрабатывал и реализовывал промпты для локальной модели IlyaGusev/saiga_llama3_8b, адаптировал их под задачи проекта для повышения качества генерации
    • Тестировал формулировки промптов в локальной среде для улучшения точности и релевантности ответов модели.
  • Алексей Щетинин
    Архитектор
    • Занимался разработкой модуля для поворота и коррекции перспективы изображений
    • Разработал код для удаления черных квадратов цензуры
    • Подчеркивал важность качества исходных изображений для работы алгоритма предобработки
  • Владимир Пятницкий
    инженер-проектировщик электроснабжения
    • Запускал и тестировал LLM модели с HuggingFace (библиотека cpp)
    • Тестировал алгоритмы получения JSON из распознанного текста с помощью LLM (Google Colab)
    • Тестировал различные OCR и сравнивал их точность
    • Готовил скрипты для расчета метрик
    • Создал классы для приложения: класс OCR (использование трех различных OCR для распознавания текста с получением ответа в едином формате) и класс Preprocess (объединение всех функций предобработки)
  • Дмитрий Хонин
    Начальник отдела IT, DATA SCIENTIST
    • Разработал детализированный словарь (глоссарий) показателей биохимического анализа крови, включая синонимы и единицы измерения, что критически важно для точной интерпретации данных
    • Активно участвовал в распознавании образцов анализов, обеспечил качество подготовки данных
    • Изучал и запускал различные архитектуры LLM (ggml, gguf, safetensors), тестировал их на локальных ресурсах с помощью llama.cpp, Hugging Face Transformers, Ollama, LM Studio. Работал с OCR-библиотеками (surya-ocr, DocTR)
    • Разработал функцию для извлечения текста из графических файлов и PDF
    • Оказывал поддержку команде по Python и инструментам, публиковал результаты на GitHub и в Telegram.
  • Алена Беляева
    ведущий специалист группы HR
    • Методически руководила группой LLM
    • Осуществила полную разработку этапа обработки данных с использованием языковых моделей (LLM), входного OCR текста и выходного JSON
    • Создавала словарь/базу синонимов, готовила эталонные JSON-файлы и таблицы сравнения, разрабатывала ноутбуки для тестирования
    • Составляла отчёт и таблицу метрик для заказчика
    • Участвовала в подготовке презентации
  • Айдана Баймакишова
    Бухгалтер
    • Создавала словарь/базу синонимов, готовила эталонные JSON-файлы биохимических анализов и таблицы сравнения
    • Помогала в создании разметки датасета
  • Анна Мышлякова
    Маркетолог
    • Методически руководила группой OCR
    • Формировала тестовые датасеты для разметки текстов
    • Разрабатывала класс предобработки изображений
    • Тестировала и оценивала качество различных моделей OCR
    • Формировала пайплайн для пакетной обработки изображений с выводом метрик по трём моделям OCR
    • Оценивала качество распознавания при различных комбинациях предобработки,
    • Тестировала локальную LLM Mistral и скрипты для создания финального JSON
  • Виктор Щеблецов
    Интернет маркетолог
    • Создал пилотный Telegram-бот (прототип приложения) с использованием API OpenAI (модели ChatGPT-4o, 4o-mini)
    • Исследовал влияние разрешения изображения на качество OCR
    • Написал функцию адаптивного повышения разрешения (улучшение на 20% для датасета)
    • Исследовал оптимальную последовательность и состав процедур предобработки, создал рекомендации
    • Создал формат JSON-словаря биомаркеров (с синонимами) и функцию нечеткого поиска (fuzzy matching) с использованием Levenshtein Distance.
    • Разработал методику оценки качества системы и функцию расчета/визуализации детализированных метрик.
  • Евгений Сапсалёв
    Ведущий эксперт (менеджер проекта) ИИЦ ИТМО-Газпромнефть
    • Занимался общей архитектурой приложения, разработкой фронтенда
    • Исследовал альтернативные модели для оцифровки анализов, интеграцией компонентов, созданием endpoint
    • Координировал работу команды интеграции, разрабатывал интеграционное решение (FastAPI, TS+React, docker)
  • Анатолий Поливанов
    доцент кафедры "Технология машиностроения"
    • Участвовал в обсуждениях, делился наблюдениями о работе LLM, в частности о влиянии промптов на результаты
    • Занимался созданием JSON-файлов
  • Кирилл Байдин
    Аналитик больших данных в КСК ИТ
    • Координировал исследованиями различных инструментов OCR и анализ качества распознавания текста
    • Принимал участие в обсуждении критериев обработки изображений перед распознаванием
    • Занимался тестированием форматов вывода данных OCR (JSON)
  • Александр Егоров
    Промышленная автоматика, автоматизация производств
    • Подготовил датасет к реальной работе (сортировка изображений на три категории)
    • Предложил использовать связку Ollama + LLM для локальной работы, прорабатывал гипотезу мультимодального распознавания анализов (протестировано 15+ LLM)
    • Разрабатывал промпты для разных LLM
    • Оценивал пакеты Marker, Docling, docTR, разрабатывал алгоритмы WER для оценки точности
    • Реализовал БД в SQLAlchemy для хранения и работы с результатами
  • Михаил Чащин
    Представитель заказчика
    • Участвовал во встречах
    • Задавал вопросы о ходе проекта и качестве результатов
    • Выражал заинтересованность в метриках оценки
  • Александр Привалов
    Самозанятый по ремонту, настройке и обслуживанию ПК и софта
    • Делился опытом работы с OCR в других проектах
  • Нора Сердюкова
    Преподаватель в университете, кафедра статистики
    • Обучала коллег по работе с LLM и построению цепочки ассистентов
    • Разрабатывала код для использования русскоязычной локальной модели IlyaGusev/saiga_llama3_8b
    • Писала код для базы данных биомаркеров, участвовала в интеграции данных LLM (JSON) в БД
    • Исследовала возможности LLM для работы с табличными данными