Система DXA Quality Assessment — это медицинский AI-сервис для автоматизированной оценки качества исследований DXA (денситометрия костей). Система анализирует DICOM файлы и определяет:
| Параметр | Значение |
|---|---|
| Тип | Медицинский AI сервис |
| Входные данные | DICOM файлы (DXA исследования) |
| Выходные данные | JSON / XLSX отчеты |
| Тип классификации | Бинарный (OK / Violation) |
| Целевые регионы | Позвоночник (L1-L4), Бедро (левое/правое) |
┌─────────────────────────────────────────────────────────────────────────┐
│ DXA Quality Assessment │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────────┐ │
│ │ Клиент │───▶│ FastAPI │───▶│ Orchestrator │ │
│ │ (Web UI) │ │ Server │ │ (Pipeline Control) │ │
│ └──────────────┘ └──────────────┘ └───────────┬──────────────┘ │
│ │ │
│ ┌───────────────────┼───────────────┐ │
│ ▼ ▼ ▼ │
│ ┌───────────────┐ ┌─────────────┐ ┌──────────┐ │
│ │ DXA Classifier │ │ Segmentor │ │ Quality │ │
│ │ (ResNet18) │ │ (Threshold) │ │ Scorer │ │
│ └───────────────┘ └─────────────┘ └──────────┘ │
│ │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ Detailed Assessment Module │ │
│ │ ┌─────────┐ ┌──────────┐ ┌─────────┐ ┌───────┐ ┌────────┐ │ │
│ │ │ Motion │ │ Artifact │ │ Position│ │ ROI │ │Rotation│ │ │
│ │ │Detector │ │ Detector │ │Validator│ │ Check │ │ Checker│ │ │
│ │ └─────────┘ └──────────┘ └─────────┘ └───────┘ └────────┘ │ │
│ └────────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
| Компонент | Технология |
|---|---|
| Backend | Python 3.10, FastAPI, Uvicorn |
| ML/DL | PyTorch, torchvision (ResNet18) |
| Image Processing | PIL, OpenCV, pydicom, scipy |
| Data Handling | pandas, openpyxl |
| Containerization | Docker |
src/main.py) Точка входа — FastAPI приложение с REST эндпоинтами.
Основные функции:
# Основной API эндпоинт
@app.post("/api/v1/analyze/detailed")
async def analyze_dicom_detailed(file: UploadFile = File(...)):
# 1. Загрузка модели
# 2. Предобработка DICOM
# 3. Инференс ResNet18
# 4. Генерация сегментации
# 5. Детальная оценка качества
# 6. Формирование ответа
src/dxa/model.py) Модель для бинарной классификации качества изображения.
Архитектура:
Input (224x224x3)
│
▼
ResNet18 (pretrained on ImageNet)
│
├── Remove final FC layer
│
▼
Classifier Head:
├── Dropout(0.3)
├── Linear(512 → 256)
├── ReLU
├── Dropout(0.3)
└── Linear(256 → 2)
│
▼
Output: [prob_OK, prob_Violation]
Параметры модели:
Для сегментации используется простой пороговый метод:
# Threshold-based segmentation
threshold = np.percentile(image, 90)
segmentation = (image > threshold).astype(np.uint8)
Планируется: Замена на UNet или TotalSegmentator для более точной сегментации.
src/quality/detailed_assessment.py) Модуль детальной оценки качества включает:
Для позвоночника (spine):
Для бедра (hip):
src/dxa/inference.py) Определение анатомической области по содержимому изображения:
Алгоритм:
| Method | Endpoint | Description |
|---|---|---|
| GET | / |
Web interface |
| GET | /api/v1/health |
Health check |
| POST | /api/v1/analyze |
Basic analysis |
| POST | /api/v1/analyze/detailed |
Detailed analysis with metrics |
| POST | /api/v1/analyze/sr |
DICOM SR report |
| POST | /api/v1/batch |
Batch processing |
| POST | /api/v1/export |
Export to XLSX |
{
"anatomical_region": "spine",
"quality_class": 1,
"quality_label": "Violation detected",
"violation_type": "artifact_motion",
"reason": "Обнаружен артефакт движения (размытие)",
"confidence": 0.85,
"confidence_per_class": {
"correct": 0.15,
"violation": 0.85
},
"view_quality": "full",
"metrics": {
"motion": {
"motion_detected": true,
"blur_laplacian": 0.001,
"severity": "HIGH"
},
"artifacts": {
"any_detected": false,
"metal_detected": false
},
"roi_check": {
"valid": true
}
},
"overall_quality": "POOR",
"severity": "HIGH"
}
Для позвоночника:
correct — качество соответствует нормеposition_error — ошибка позиционированияartifact_motion — артефакт движения (размытие)artifact_other — другие артефактыlabeling_error — ошибка маркировкиincomplete_view — неполный видroi_error — ошибка ROIДля бедра:
correct — качество соответствует нормеposition_error — ошибка позиционированияrotation — нарушение ротацииartifact_motion — артефакт движенияartifact_other — другие артефактыroi_error — ошибка ROIincomplete_view — неполный вид| Метрика | Порог | Описание |
|---|---|---|
| Laplacian variance | < 0.002 | Низкая дисперсия = размытие |
| FFT high-freq ratio | < 0.3 | Низкая высокочастотная энергия |
| Edge duplication | bool | Дублирование краев |
Error 400: Cannot find if (Assumed diagram type: activity) (line: 22)
| Компонент | План |
|---|---|
| Region Detector | Отдельная модель для детекции региона |
| Segmentator | UNet или TotalSegmentator |
| Quality Classifier | Расширение на 8 классов нарушений |
| Violation Classifier | Отдельная модель для классификации типа нарушения |
| Artifact Detector | CNN для детекции металла/имплантатов |
| Visualization | Grad-CAM для внимания модели |
Система DXA Quality Assessment представляет собой полнофункциональный AI-сервис для автоматизированной оценки качества DXA исследований. Архитектура построена на принципах модульности и расширяемости, что позволяет поэтапно улучшать отдельные компоненты.
Основные характеристики: