AI_Safety_Demo5 / Integ.py
neerajkalyank's picture
Update Integ.py
9bd3704 verified
import os
import subprocess
import logging
from ultralytics import YOLO
from config import CONFIG
# Setup logging
logging.basicConfig(
level=logging.INFO,
format='{"time": "%(asctime)s", "level": "%(levelname)s", "message": "%(message)s"}'
)
logger = logging.getLogger(__name__)
def check_ffmpeg():
"""Verify FFmpeg is installed."""
try:
subprocess.run(["ffmpeg", "-version"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=True)
logger.info("FFmpeg is available.")
return True
except (subprocess.CalledProcessError, FileNotFoundError):
logger.error("FFmpeg is not installed or not found in PATH.")
return False
def check_model_files():
"""Verify model files exist or can be downloaded."""
model_path = CONFIG["MODEL_PATH"]
fallback_model = CONFIG["FALLBACK_MODEL"]
if not os.path.isfile(model_path):
logger.warning(f"Custom model {model_path} not found. Checking fallback.")
if not os.path.isfile(fallback_model):
logger.info(f"Downloading fallback model: {fallback_model}")
try:
import torch
torch.hub.download_url_to_file(
'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolov8n.pt',
fallback_model
)
logger.info(f"Downloaded {fallback_model}")
except Exception as e:
logger.error(f"Failed to download {fallback_model}: {e}")
return False
else:
logger.info(f"Custom model found: {model_path}")
return True
def test_model_inference():
"""Test YOLO model inference with a dummy image."""
try:
model_path = CONFIG["MODEL_PATH"] if os.path.isfile(CONFIG["MODEL_PATH"]) else CONFIG["FALLBACK_MODEL"]
model = YOLO(model_path)
# Create a dummy image (1x1 pixel)
import numpy as np
dummy_image = np.zeros((1, 1, 3), dtype=np.uint8)
results = model(dummy_image, conf=0.1, verbose=False)
logger.info("Model inference test passed.")
return True
except Exception as e:
logger.error(f"Model inference test failed: {e}")
return False
def run_integration_tests():
"""Run all integration tests."""
logger.info("Starting integration tests...")
tests = [
("FFmpeg availability", check_ffmpeg),
("Model files check", check_model_files),
("Model inference test", test_model_inference)
]
all_passed = True
for test_name, test_func in tests:
logger.info(f"Running test: {test_name}")
result = test_func()
if not result:
logger.error(f"Test failed: {test_name}")
all_passed = False
else:
logger.info(f"Test passed: {test_name}")
return all_passed
if __name__ == "__main__":
success = run_integration_tests()
exit(0 if success else 1)