Spaces:
Runtime error
Runtime error
Update app.py
Browse files
app.py
CHANGED
|
@@ -5,7 +5,7 @@ import warnings
|
|
| 5 |
from fastapi import FastAPI, File, UploadFile, HTTPException
|
| 6 |
from contextlib import asynccontextmanager
|
| 7 |
import torch
|
| 8 |
-
from ultralytics import YOLO
|
| 9 |
import cv2
|
| 10 |
import requests
|
| 11 |
import json
|
|
@@ -17,21 +17,15 @@ import logging
|
|
| 17 |
import pandas as pd
|
| 18 |
|
| 19 |
# --- Initial Configuration ---
|
| 20 |
-
#
|
| 21 |
warnings.filterwarnings("ignore")
|
| 22 |
-
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
|
| 23 |
|
| 24 |
-
#
|
| 25 |
yolo_config_dir = "/tmp/Ultralytics"
|
| 26 |
-
|
| 27 |
-
# Clean and recreate directory
|
| 28 |
if os.path.exists(yolo_config_dir):
|
| 29 |
shutil.rmtree(yolo_config_dir)
|
| 30 |
os.makedirs(yolo_config_dir, exist_ok=True)
|
| 31 |
-
|
| 32 |
-
# Set environment variable and update Ultralytics settings
|
| 33 |
os.environ["YOLO_CONFIG_DIR"] = yolo_config_dir
|
| 34 |
-
settings.update({'config_dir': yolo_config_dir})
|
| 35 |
|
| 36 |
# --- Logging Configuration ---
|
| 37 |
# Configure logging before any other operations
|
|
@@ -44,13 +38,11 @@ logging.basicConfig(
|
|
| 44 |
# Get logger instance
|
| 45 |
logger = logging.getLogger(__name__)
|
| 46 |
|
| 47 |
-
# Suppress
|
| 48 |
-
logging.getLogger("ultralytics").setLevel(logging.
|
| 49 |
-
logging.getLogger("PIL").setLevel(logging.
|
| 50 |
-
logging.getLogger("matplotlib").setLevel(logging.
|
| 51 |
-
logging.getLogger("urllib3").setLevel(logging.
|
| 52 |
-
logging.getLogger("requests").setLevel(logging.CRITICAL)
|
| 53 |
-
logging.getLogger("torch").setLevel(logging.CRITICAL)
|
| 54 |
|
| 55 |
# Log environment variable once
|
| 56 |
logger.info(f"YOLO_CONFIG_DIR set to: {os.getenv('YOLO_CONFIG_DIR')}")
|
|
@@ -71,19 +63,15 @@ class YOLOv8Model:
|
|
| 71 |
try:
|
| 72 |
logger.info("Initializing YOLOv8 model")
|
| 73 |
|
| 74 |
-
#
|
| 75 |
original_stdout = sys.stdout
|
| 76 |
-
original_stderr = sys.stderr
|
| 77 |
sys.stdout = open(os.devnull, 'w')
|
| 78 |
-
sys.stderr = open(os.devnull, 'w')
|
| 79 |
|
| 80 |
try:
|
| 81 |
self.model = YOLO(model_path)
|
| 82 |
finally:
|
| 83 |
sys.stdout.close()
|
| 84 |
-
sys.stderr.close()
|
| 85 |
sys.stdout = original_stdout
|
| 86 |
-
sys.stderr = original_stderr
|
| 87 |
|
| 88 |
logger.info("YOLOv8 model loaded successfully")
|
| 89 |
except Exception as e:
|
|
@@ -92,15 +80,8 @@ class YOLOv8Model:
|
|
| 92 |
|
| 93 |
def predict(self, image):
|
| 94 |
try:
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
sys.stdout = open(os.devnull, 'w')
|
| 98 |
-
try:
|
| 99 |
-
results = self.model(image)
|
| 100 |
-
return results.pandas().xyxy[0]
|
| 101 |
-
finally:
|
| 102 |
-
sys.stdout.close()
|
| 103 |
-
sys.stdout = original_stdout
|
| 104 |
except Exception as e:
|
| 105 |
logger.error(f"Prediction error: {e}")
|
| 106 |
raise
|
|
@@ -194,25 +175,13 @@ async def lifespan(app: FastAPI):
|
|
| 194 |
global yolo_model
|
| 195 |
logger.info("FastAPI application starting up")
|
| 196 |
try:
|
| 197 |
-
|
| 198 |
-
original_stdout = sys.stdout
|
| 199 |
-
original_stderr = sys.stderr
|
| 200 |
-
sys.stdout = open(os.devnull, 'w')
|
| 201 |
-
sys.stderr = open(os.devnull, 'w')
|
| 202 |
-
|
| 203 |
-
try:
|
| 204 |
-
yolo_model = YOLOv8Model()
|
| 205 |
-
finally:
|
| 206 |
-
sys.stdout.close()
|
| 207 |
-
sys.stderr.close()
|
| 208 |
-
sys.stdout = original_stdout
|
| 209 |
-
sys.stderr = original_stderr
|
| 210 |
-
|
| 211 |
logger.info("YOLOv8 model initialized successfully")
|
| 212 |
except Exception as e:
|
| 213 |
logger.error(f"Startup error: {e}")
|
| 214 |
raise
|
| 215 |
yield
|
|
|
|
| 216 |
logger.info("FastAPI application shutting down")
|
| 217 |
yolo_model = None
|
| 218 |
|
|
|
|
| 5 |
from fastapi import FastAPI, File, UploadFile, HTTPException
|
| 6 |
from contextlib import asynccontextmanager
|
| 7 |
import torch
|
| 8 |
+
from ultralytics import YOLO
|
| 9 |
import cv2
|
| 10 |
import requests
|
| 11 |
import json
|
|
|
|
| 17 |
import pandas as pd
|
| 18 |
|
| 19 |
# --- Initial Configuration ---
|
| 20 |
+
# Suppress all warnings
|
| 21 |
warnings.filterwarnings("ignore")
|
|
|
|
| 22 |
|
| 23 |
+
# Clean up and set YOLO_CONFIG_DIR
|
| 24 |
yolo_config_dir = "/tmp/Ultralytics"
|
|
|
|
|
|
|
| 25 |
if os.path.exists(yolo_config_dir):
|
| 26 |
shutil.rmtree(yolo_config_dir)
|
| 27 |
os.makedirs(yolo_config_dir, exist_ok=True)
|
|
|
|
|
|
|
| 28 |
os.environ["YOLO_CONFIG_DIR"] = yolo_config_dir
|
|
|
|
| 29 |
|
| 30 |
# --- Logging Configuration ---
|
| 31 |
# Configure logging before any other operations
|
|
|
|
| 38 |
# Get logger instance
|
| 39 |
logger = logging.getLogger(__name__)
|
| 40 |
|
| 41 |
+
# Suppress third-party logging
|
| 42 |
+
logging.getLogger("ultralytics").setLevel(logging.ERROR)
|
| 43 |
+
logging.getLogger("PIL").setLevel(logging.WARNING)
|
| 44 |
+
logging.getLogger("matplotlib").setLevel(logging.WARNING)
|
| 45 |
+
logging.getLogger("urllib3").setLevel(logging.WARNING)
|
|
|
|
|
|
|
| 46 |
|
| 47 |
# Log environment variable once
|
| 48 |
logger.info(f"YOLO_CONFIG_DIR set to: {os.getenv('YOLO_CONFIG_DIR')}")
|
|
|
|
| 63 |
try:
|
| 64 |
logger.info("Initializing YOLOv8 model")
|
| 65 |
|
| 66 |
+
# Temporarily suppress stdout for model loading
|
| 67 |
original_stdout = sys.stdout
|
|
|
|
| 68 |
sys.stdout = open(os.devnull, 'w')
|
|
|
|
| 69 |
|
| 70 |
try:
|
| 71 |
self.model = YOLO(model_path)
|
| 72 |
finally:
|
| 73 |
sys.stdout.close()
|
|
|
|
| 74 |
sys.stdout = original_stdout
|
|
|
|
| 75 |
|
| 76 |
logger.info("YOLOv8 model loaded successfully")
|
| 77 |
except Exception as e:
|
|
|
|
| 80 |
|
| 81 |
def predict(self, image):
|
| 82 |
try:
|
| 83 |
+
results = self.model(image)
|
| 84 |
+
return results.pandas().xyxy[0]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 85 |
except Exception as e:
|
| 86 |
logger.error(f"Prediction error: {e}")
|
| 87 |
raise
|
|
|
|
| 175 |
global yolo_model
|
| 176 |
logger.info("FastAPI application starting up")
|
| 177 |
try:
|
| 178 |
+
yolo_model = YOLOv8Model()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 179 |
logger.info("YOLOv8 model initialized successfully")
|
| 180 |
except Exception as e:
|
| 181 |
logger.error(f"Startup error: {e}")
|
| 182 |
raise
|
| 183 |
yield
|
| 184 |
+
logger
|
| 185 |
logger.info("FastAPI application shutting down")
|
| 186 |
yolo_model = None
|
| 187 |
|