Автоматизированная система для извлечения данных из медицинских документов, их анализа и генерации структурированных отчётов с использованием технологий компьютерного зрения и больших языковых моделей.
Система предназначена для автоматизации работы с медицинскими документами: анализы крови, биохимические исследования и другие лабораторные отчёты. Основная задача — извлечь структурированные данные из изображений документов, сохранить их в базу данных и предоставить возможность семантического поиска и генерации отчётов.
- Обработка изображений: Препроцессинг медицинских документов с улучшением качества для последующего анализа
- Извлечение данных: Автоматическое распознавание и структурирование информации из документов с помощью Vision LLM
- Семантический поиск: Поиск релевантной информации по содержимому документов с использованием векторных эмбеддингов
- Генерация отчётов: Создание PDF-отчётов на основе данных пациента с использованием RAG-подхода
- Интеллектуальные запросы: Ответы на вопросы о состоянии здоровья пациента на основе всех доступных данных
Система состоит из нескольких взаимосвязанных модулей:
- 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
- Клонируйте репозиторий:
git clone <repository-url>
cd CP- Установите зависимости:
# Используя uv (рекомендуется)
uv sync
# Или через pip
pip install -e .- Настройте переменные окружения:
Создайте файл
.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- Запустите MongoDB через Docker Compose:
docker-compose up -d- Запустите приложение:
# Через uvicorn напрямую
uvicorn src.main_route:app --reload --host 0.0.0.0 --port 8000
# Или через Python
python -m src.main_route- Откройте документацию API:
http://localhost:8000/docs
Загрузите изображение медицинского документа для извлечения данных:
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"
}Задайте вопрос о состоянии здоровья пациента:
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
}Создайте PDF-отчёт на основе всех данных пациента:
curl -X POST "http://localhost:8000/api/v1/generate_report" \
-H "Content-Type: application/json" \
-d '{
"patient_identifier": "123",
"query": "Создай общий медицинский отчёт о состоянии здоровья"
}' \
--output report.pdf
Описание: Система успешно извлекла данные из изображения, определила все показатели и сохранила их в структурированном виде.
Описание: 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 согласно заданной схеме
Система использует Retrieval-Augmented Generation для генерации ответов:
- Поиск пациента в SQLite (базовая информация)
- Семантический поиск в ChromaDB (релевантные записи)
- Загрузка дополнительных данных из MongoDB
- Объединение контекста и генерация ответа через LLM
uvicorn src.main_route:app --reload --host 0.0.0.0 --port 8000Логи сохраняются в src/logs/app.log и выводятся в консоль.
Этот проект распространяется под лицензией MIT — см. LICENSE.
+37533370727086
Проект разработан для автоматизации работы с медицинскими документами и повышения эффективности обработки медицинских данных.