91 lines
3.9 KiB
Bash
Executable File
91 lines
3.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
#
|
||
# DXA Quality Assessment — единая точка входа.
|
||
#
|
||
# Использование: ./run.sh <команда> [аргументы]
|
||
# ./run.sh train [доп. аргументы для src.dxa.train]
|
||
# ./run.sh infer <вход> <выход.xlsx|.csv> [доп. аргументы]
|
||
# ./run.sh serve [порт]
|
||
# ./run.sh test
|
||
#
|
||
# Скрипт намеренно не содержит своей реализации обучения и инференса: вся
|
||
# логика живёт в Python-модулях, а здесь только вызовы. Дублирование цикла
|
||
# обучения (как было раньше) приводило к расхождению правил между режимами.
|
||
set -euo pipefail
|
||
|
||
GREEN='\033[0;32m'; YELLOW='\033[1;33m'; RED='\033[0;31m'; NC='\033[0m'
|
||
|
||
PYTHON=${PYTHON:-python3}
|
||
DATA_ROOT=${DATA_ROOT:-dataset_hack}
|
||
ANNOTATION_PATH=${ANNOTATION_PATH:-"dataset_hack/НД_для_обучения/разметка.xlsx"}
|
||
MODEL_PATH=${MODEL_PATH:-models/dxa_model.pth}
|
||
PORT=${PORT:-8000}
|
||
|
||
command=${1:-help}
|
||
shift || true
|
||
|
||
case "$command" in
|
||
train)
|
||
echo -e "${YELLOW}Обучение классификатора качества DXA${NC}"
|
||
"$PYTHON" -m src.dxa.train \
|
||
--data-root "$DATA_ROOT" \
|
||
--annotation-path "$ANNOTATION_PATH" \
|
||
--output-dir "$(dirname "$MODEL_PATH")" \
|
||
"$@"
|
||
echo -e "${GREEN}Готово. Чекпоинт: ${MODEL_PATH}${NC}"
|
||
;;
|
||
|
||
infer)
|
||
input_path=${1:-dataset_hack/Для теста}
|
||
output_path=${2:-results.xlsx}
|
||
shift 2 2>/dev/null || true
|
||
echo -e "${YELLOW}Пакетная обработка${NC}"
|
||
echo " вход: $input_path"
|
||
echo " выход: $output_path"
|
||
"$PYTHON" -m src.dxa.inference \
|
||
--input-path "$input_path" \
|
||
--output-path "$output_path" \
|
||
--model-path "$MODEL_PATH" \
|
||
"$@"
|
||
echo -e "${GREEN}Готово: ${output_path}${NC}"
|
||
;;
|
||
|
||
serve)
|
||
echo -e "${YELLOW}Запуск API на порту ${PORT}${NC}"
|
||
DXA_MODEL_PATH="$MODEL_PATH" \
|
||
"$PYTHON" -m uvicorn src.main:app --host 0.0.0.0 --port "$PORT"
|
||
;;
|
||
|
||
test)
|
||
echo -e "${YELLOW}Запуск тестов${NC}"
|
||
"$PYTHON" -m pytest tests/ -q
|
||
;;
|
||
|
||
help|*)
|
||
cat <<'USAGE'
|
||
DXA Quality Assessment — управление запуском
|
||
|
||
Команды:
|
||
train [аргументы] Обучить классификатор качества.
|
||
Пример: ./run.sh train --epochs 100 --head mlp
|
||
infer <вход> <выход> [арг.] Пакетная обработка DICOM (файл или каталог).
|
||
Пример: ./run.sh infer "dataset_hack/Для теста" results.xlsx
|
||
Дополнительно: --zip-out masks.zip
|
||
serve [порт] Запустить HTTP API и веб-интерфейс.
|
||
test Запустить тесты.
|
||
|
||
Переменные окружения:
|
||
DATA_ROOT Каталог датасета (по умолчанию dataset_hack)
|
||
ANNOTATION_PATH Excel с разметкой (только для отчёта о расхождениях)
|
||
MODEL_PATH Путь к чекпоинту (по умолчанию models/dxa_model.pth)
|
||
PORT Порт API (по умолчанию 8000)
|
||
PYTHON Интерпретатор (по умолчанию python3)
|
||
|
||
Типовой порядок работы:
|
||
./run.sh train # обучить модель
|
||
./run.sh infer dataset_hack results.xlsx
|
||
./run.sh serve # веб-интерфейс на http://localhost:8000
|
||
USAGE
|
||
;;
|
||
esac
|