Skip to content
 
 

Latest commit

 

History

16 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Система обработки медицинских документов

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

О проекте

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

Основные возможности

  • Обработка изображений: Препроцессинг медицинских документов с улучшением качества для последующего анализа
  • Извлечение данных: Автоматическое распознавание и структурирование информации из документов с помощью Vision LLM
  • Семантический поиск: Поиск релевантной информации по содержимому документов с использованием векторных эмбеддингов
  • Генерация отчётов: Создание PDF-отчётов на основе данных пациента с использованием RAG-подхода
  • Интеллектуальные запросы: Ответы на вопросы о состоянии здоровья пациента на основе всех доступных данных

Архитектура

Система состоит из нескольких взаимосвязанных модулей:

telegram-cloud-document-2-5296783978458547965

Технологический стек

  • Python 3.13+
  • FastAPI — веб-фреймворк для API
  • OpenCV — обработка изображений
  • Groq API — Vision LLM для извлечения данных и генерации ответов
  • ChromaDB — векторная база данных
  • MongoDB — документоориентированная БД
  • SQLite — реляционная БД для метаданных
  • SBERT — создание эмбеддингов
  • WeasyPrint — генерация PDF

Установка и запуск

Требования

  • Python 3.13 или выше
  • Docker и Docker Compose (для MongoDB)
  • API ключ от Groq

Шаги установки

  1. Клонируйте репозиторий:
git clone <repository-url>
cd CP
  1. Установите зависимости:
# Используя uv (рекомендуется)
uv sync

# Или через pip
pip install -e .
  1. Настройте переменные окружения: Создайте файл .env в корне проекта:
# Groq API
GROQ_API_KEY=your_groq_api_key
MODEL_NAME=llama-3.3-70b-versatile
TEMPERATURE=0
MAX_TOKENS=4096

# Image constraints
MAX_IMAGE_SIZE=3000
MAX_FILE_SIZE_MB=10

# RAG generation
GENERATION_MODEL_NAME=llama-3.3-70b-versatile
GENERATION_TEMPERATURE=0.7
GENERATION_MAX_TOKENS=2048

# Report settings
CLINIC_NAME=Название вашей клиники

# MongoDB
MONGO_INITDB_ROOT_USERNAME=admin
MONGO_INITDB_ROOT_PASSWORD=your_password
MONGO_INITDB_DATABASE=medical_db
MONGO_APP_USER=app_user
MONGO_APP_PASSWORD=app_password
MONGO_HOST=localhost
MONGO_PORT=27017
MONGO_COLLECTION=reports
  1. Запустите MongoDB через Docker Compose:
docker-compose up -d
  1. Запустите приложение:
# Через uvicorn напрямую
uvicorn src.main_route:app --reload --host 0.0.0.0 --port 8000

# Или через Python
python -m src.main_route
  1. Откройте документацию API:
http://localhost:8000/docs

Использование API

1. Загрузка и обработка изображения

Загрузите изображение медицинского документа для извлечения данных:

curl -X POST "http://localhost:8000/api/v1/upload_image" \
  -H "Content-Type: multipart/form-data" \
  -F "image=@path/to/medical_report.jpg" \
  -F "patient_identifier=123"

Ответ:

{
  "status": "success",
  "message": "Изображение успешно обработано и данные сохранены",
  "record_id": "507f1f77bcf86cd799439011",
  "patient_id": 123,
  "patient_name": "Иванов Иван",
  "test_type": "blood_count",
  "test_date": "2025-04-27"
}

2. Запрос информации о пациенте (RAG)

Задайте вопрос о состоянии здоровья пациента:

curl -X POST "http://localhost:8000/api/v1/query_patient" \
  -H "Content-Type: application/json" \
  -d '{
    "patient_identifier": "123",
    "query": "Какие анализы были сданы? Есть ли отклонения в показателях?"
  }'

Ответ:

{
  "status": "success",
  "answer": "Пациент сдал следующие анализы...",
  "patient_id": 123,
  "patient_name": "Иванов Иван",
  "sources": {
    "sqlite_patient": true,
    "mongodb_records_count": 5,
    "vector_search_results": 3
  },
  "model": "llama-3.3-70b-versatile",
  "tokens_used": 1250,
  "generation_time": 1.23
}

3. Генерация PDF-отчёта

Создайте PDF-отчёт на основе всех данных пациента:

curl -X POST "http://localhost:8000/api/v1/generate_report" \
  -H "Content-Type: application/json" \
  -d '{
    "patient_identifier": "123",
    "query": "Создай общий медицинский отчёт о состоянии здоровья"
  }' \
  --output report.pdf

Примеры работы

Пользователь загружает отчет в систему

telegram-cloud-document-2-5294165036250466180

Описание: Система успешно извлекла данные из изображения, определила все показатели и сохранила их в структурированном виде.

Пользователь хочет сгенерировать отчет по данному пациенту с заданным промтом

Screenshot 2025-12-03 at 12 57 43

Описание: PDF-отчёт, сгенерированный на основе всех доступных данных пациента с использованием RAG-подхода.

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

Настройка препроцессинга

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

  • medical_llm — оптимальный вариант для большинства медицинских документов
  • medical_llm_sharp — максимальная чёткость для размытых изображений
  • medical_ocr — для традиционного OCR (с бинаризацией)
  • aggressive — для очень плохих изображений
  • balanced — универсальный пресет
  • gentle — для уже хороших изображений

Пресет можно изменить в src/api/routes.py при инициализации препроцессора.

Особенности реализации

Препроцессинг изображений

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

  • CLAHE (Contrast Limited Adaptive Histogram Equalization) для адаптивного контраста
  • Удаление фона с выравниванием освещения
  • Билатеральная фильтрация для удаления шума с сохранением краёв
  • Адаптивное повышение резкости

Извлечение данных

Для извлечения структурированных данных используется Vision LLM (Groq), которая:

  • Распознаёт текст на изображении
  • Извлекает структурированную информацию (пациент, анализы, показатели)
  • Возвращает данные в формате JSON согласно заданной схеме

RAG-генерация

Система использует Retrieval-Augmented Generation для генерации ответов:

  1. Поиск пациента в SQLite (базовая информация)
  2. Семантический поиск в ChromaDB (релевантные записи)
  3. Загрузка дополнительных данных из MongoDB
  4. Объединение контекста и генерация ответа через LLM

Разработка

Запуск в режиме разработки

uvicorn src.main_route:app --reload --host 0.0.0.0 --port 8000

Логирование

Логи сохраняются в src/logs/app.log и выводятся в консоль.

Лицензия

Этот проект распространяется под лицензией MIT — см. LICENSE.

Контакты

+37533370727086


Проект разработан для автоматизации работы с медицинскими документами и повышения эффективности обработки медицинских данных.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages