Buck_Tracker / api /config.py
codewithRiz's picture
time analytics added
f98ae68
import os
import logging
from zipfile import Path
from dotenv import load_dotenv
from ultralytics import YOLO
from google.cloud import storage
import google.auth
# ---------------- ENV ----------------
load_dotenv(override=True)
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
# ---------------- LOGGER ----------------
LOG_FILE = os.path.join(BASE_DIR, "api.log")
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(message)s",
handlers=[logging.FileHandler(LOG_FILE), logging.StreamHandler()]
)
logger = logging.getLogger("WildlifeLogger")
ENV = os.getenv("ENV", "DEV").upper()
logger.info(f"Running in {ENV}")
# ---------------- STORAGE ----------------
UPLOAD_DIR = os.path.join(BASE_DIR, "user_data")
os.makedirs(UPLOAD_DIR, exist_ok=True)
STORAGE_BACKEND = "local"
gcs_client = None
gcs_bucket = None
GCS_UPLOAD_DIR = "uploaded_images/"
if ENV == "PROD":
STORAGE_BACKEND = os.getenv("PROD_STORAGE_BACKEND", "gcs").lower()
GCS_BUCKET_NAME = os.getenv("PROD_GCS_BUCKET_NAME")
GCS_KEY_PATH = os.getenv("PROD_GOOGLE_APPLICATION_CREDENTIALS")
if STORAGE_BACKEND == "gcs":
try:
if os.getenv("GOOGLE_CLOUD_PROJECT"):
creds, project = google.auth.default()
gcs_client = storage.Client(credentials=creds, project=project)
else:
gcs_client = storage.Client.from_service_account_json(GCS_KEY_PATH)
gcs_bucket = gcs_client.bucket(GCS_BUCKET_NAME)
logger.info(f"Connected to GCS bucket: {GCS_BUCKET_NAME}")
except Exception as e:
logger.error(f"GCS connection failed: {e}")
STORAGE_BACKEND = "local"
# ---------------- UPLOAD RULES ----------------
MIN_IMAGES = 1
MAX_IMAGES = 1000
ALLOWED_EXTENSIONS = {"jpg", "jpeg", "png", "webp"}
# ---------------- YOLO MODELS ----------------
try:
logger.info("Loading YOLO models...")
DETECT_MODEL = YOLO("api/walidlife_models/detect/deer.pt")
BUCK_DOE_MODEL = YOLO("api/walidlife_models/classify/Buck_classificationt.pt", task="classify")
BUCK_TYPE_MODEL = YOLO("api/walidlife_models/classify/mules_vs_whitetails.pt", task="classify")
logger.info("YOLO models loaded")
except Exception as e:
logger.error(f"YOLO load failed: {e}")
DETECT_MODEL = BUCK_DOE_MODEL = BUCK_TYPE_MODEL = None