File size: 1,997 Bytes
d2885a7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
"""
This script is the command-line entrypoint for posture model training.
It loads all configs, starts the posture training pipeline, and prints final output.
This is cleaner than keeping training logic inside notebooks or mixed scripts.
It is also better for MLflow, DAGsHub tracking, and repeatable execution.
"""

from dotenv import load_dotenv

load_dotenv()  # ← add this BEFORE everything else

import sys
from pathlib import Path

ROOT_DIR = Path(__file__).resolve().parents[1]
if str(ROOT_DIR) not in sys.path:
    sys.path.append(str(ROOT_DIR))

from src.config.configuration import ConfigurationManager
from src.pipeline.posture_training_pipeline import PostureTrainingPipeline
from src.utils.common import create_directories, seed_everything
from src.utils.logger import get_logger


def main() -> None:
    config_manager = ConfigurationManager()

    project_config = config_manager.get_project_config()
    paths_config = config_manager.get_paths_config()
    posture_model_config = config_manager.get_posture_model_config()
    training_config = config_manager.get_training_config()

    create_directories(
        [
            paths_config.logs_dir,
            paths_config.metrics_dir,
            paths_config.posture_weights_dir,
        ]
    )

    seed_everything(project_config.random_seed)
    logger = get_logger(
        "train_posture_model", log_dir=paths_config.logs_dir, level="INFO"
    )

    logger.info("Starting posture training script.")
    logger.info("MLflow tracking URI will be read from config or environment variable.")

    pipeline = PostureTrainingPipeline(
        paths_config=paths_config,
        posture_model_config=posture_model_config,
        training_config=training_config,
        log_dir=paths_config.logs_dir,
        log_level="INFO",
    )

    result = pipeline.run()

    logger.info("Posture training script completed successfully.")
    logger.info("Final result summary: %s", result)


if __name__ == "__main__":
    main()