File size: 1,655 Bytes
7d07e42
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
02f4591
7d07e42
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from pydantic_settings import BaseSettings
from pydantic import Field
from functools import lru_cache
from pathlib import Path


class CVSettings(BaseSettings):
    # Device
    device: str = Field("cpu", env="CV_DEVICE")

    # CLIP
    clip_model: str = Field("ViT-B-32", env="CLIP_MODEL")
    clip_pretrained: str = Field("openai", env="CLIP_PRETRAINED")

    # YOLO — ONNX backend (tidak pakai ultralytics)
    # yolo_model field dipertahankan untuk backward compat env var, tapi tidak dipakai
    # detector langsung pakai yolov5nu.onnx yang di-download ke models_cache_dir
    yolo_conf_threshold: float = Field(0.25, env="YOLO_CONF")
    yolo_iou_threshold: float = Field(0.45, env="YOLO_IOU")

    # Image Captioning
    caption_model: str = Field(
        "Salesforce/blip-image-captioning-base", env="CAPTION_MODEL"
    )

    # OCR
    ocr_engine: str = Field("tesseract", env="OCR_ENGINE")
    ocr_languages: str = Field("en,id", env="OCR_LANGUAGES")

    # API
    api_host: str = Field("0.0.0.0", env="CV_API_HOST")
    api_port: int = Field(8001, env="CV_API_PORT")
    max_image_size_mb: float = Field(10.0, env="MAX_IMAGE_SIZE_MB")

    # Storage
    upload_dir: str = Field("./uploads", env="CV_UPLOAD_DIR")
    models_cache_dir: str = Field("./model_cache", env="CV_MODELS_CACHE")

    # MLflow

    class Config:
        env_file = ".env"
        env_file_encoding = "utf-8"

    def ensure_dirs(self):
        for d in [self.upload_dir, self.models_cache_dir, "./logs"]:
            Path(d).mkdir(parents=True, exist_ok=True)


@lru_cache()
def get_cv_settings() -> CVSettings:
    s = CVSettings()
    s.ensure_dirs()
    return s