PrashanthB461 commited on
Commit
3bffc30
·
verified ·
1 Parent(s): 8d38dd8

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +13 -44
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, settings
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
- # Completely suppress all warnings
21
  warnings.filterwarnings("ignore")
22
- os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
23
 
24
- # Set up YOLO configuration directory
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 all third-party logging
48
- logging.getLogger("ultralytics").setLevel(logging.CRITICAL)
49
- logging.getLogger("PIL").setLevel(logging.CRITICAL)
50
- logging.getLogger("matplotlib").setLevel(logging.CRITICAL)
51
- logging.getLogger("urllib3").setLevel(logging.CRITICAL)
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
- # Completely suppress stdout/stderr during model loading
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
- # Suppress output during prediction
96
- original_stdout = sys.stdout
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
- # Double suppression during model initialization
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