Ear-segmentation-ai

Configuration API

Config Classes

Config

Main configuration class for the entire application.

from earsegmentationai.core.config import Config

Attributes:

Methods:

# Load from YAML file
config = Config.from_yaml("config.yaml")

# Save to YAML file
config.to_yaml("config.yaml")

# Get model path
model_path = config.model_path

# Get default config
config = Config()

ModelConfig

Model-specific configuration.

from earsegmentationai.core.config import ModelConfig

Attributes:

ProcessingConfig

Processing configuration.

from earsegmentationai.core.config import ProcessingConfig

Attributes:

VideoConfig

Video processing configuration.

from earsegmentationai.core.config import VideoConfig

Attributes:

PathsConfig

Path configuration.

from earsegmentationai.core.config import PathsConfig

Attributes:

Global Configuration

get_config() / set_config()

Get or set global configuration.

from earsegmentationai.core.config import get_config, set_config

# Get current config
config = get_config()

# Modify and set
config.processing.device = "cuda:0"
set_config(config)

load_config()

Load configuration from file or environment.

from earsegmentationai.core.config import load_config

# Load from default locations
config = load_config()

# Load from specific file
config = load_config("custom_config.yaml")

Configuration Files

YAML Format

model:
  architecture: Unet
  encoder_name: resnet18
  encoder_weights: imagenet
  in_channels: 3
  classes: 1

processing:
  device: cuda:0
  input_size: [480, 320]
  batch_size: 4
  threshold: 0.5
  normalize_mean: [0.485, 0.456, 0.406]
  normalize_std: [0.229, 0.224, 0.225]

video:
  fps: 30
  codec: mp4v
  skip_frames: 1
  buffer_size: 10

paths:
  model_dir: ~/.cache/earsegmentationai/models
  cache_dir: ~/.cache/earsegmentationai
  output_dir: ./output

logging:
  level: INFO
  format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s"

Environment Variables

Configuration can be overridden using environment variables:

# Model config
export EARSEGMENTATIONAI_MODEL_ARCHITECTURE="Unet"
export EARSEGMENTATIONAI_MODEL_ENCODER="resnet34"

# Processing config
export EARSEGMENTATIONAI_DEVICE="cuda:0"
export EARSEGMENTATIONAI_THRESHOLD="0.6"
export EARSEGMENTATIONAI_BATCH_SIZE="8"

# Path config
export EARSEGMENTATIONAI_MODEL_DIR="/custom/models"
export EARSEGMENTATIONAI_CACHE_DIR="/custom/cache"

# Logging
export EARSEGMENTATIONAI_LOG_LEVEL="DEBUG"

Examples

Basic Usage

from earsegmentationai.core.config import Config

# Create default config
config = Config()

# Modify settings
config.processing.device = "cuda:0"
config.processing.threshold = 0.7

# Save to file
config.to_yaml("my_config.yaml")

Custom Configuration

from earsegmentationai.core.config import (
    Config, ModelConfig, ProcessingConfig
)

# Create custom config
config = Config(
    model=ModelConfig(
        encoder_name="resnet34",
        encoder_weights="imagenet"
    ),
    processing=ProcessingConfig(
        device="cuda:0",
        batch_size=8,
        threshold=0.6
    )
)

Loading Configuration

# From file
config = Config.from_yaml("config.yaml")

# From environment
from earsegmentationai.core.config import load_config
config = load_config()

# Merge multiple sources
base_config = Config()
file_config = Config.from_yaml("config.yaml")
config = base_config.merge(file_config)

Validation

from earsegmentationai.core.config import Config
from pydantic import ValidationError

try:
    config = Config(
        processing={"device": "invalid-device"}
    )
except ValidationError as e:
    print(f"Configuration error: {e}")