Spaces:
Running
Running
File size: 2,724 Bytes
d2885a7 | 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 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | """
This script is the command-line entrypoint for full image inference.
It loads configs, initializes the serving predictor, and runs one prediction.
This is useful for quick manual testing before API integration.
It is also a clean reproducible entrypoint for your new MLOps project.
"""
import argparse
import sys
from pathlib import Path
from dotenv import load_dotenv
load_dotenv()
ROOT_DIR = Path(__file__).resolve().parents[1]
if str(ROOT_DIR) not in sys.path:
sys.path.append(str(ROOT_DIR))
from src.config.configuration import ConfigurationManager
from src.serving.predictor import Predictor
from src.utils.common import create_directories
from src.utils.logger import get_logger
def parse_args():
parser = argparse.ArgumentParser(
description="Run pedestrian distraction inference on one image or video."
)
parser.add_argument(
"--image",
type=str,
required=False,
default=None,
help="Path to input image",
)
parser.add_argument(
"--video",
type=str,
required=False,
default=None,
help="Path to input video",
)
parser.add_argument(
"--frame-step",
type=int,
default=10,
help="Process every Nth frame from video",
)
return parser.parse_args()
def main() -> None:
args = parse_args()
if args.image is None and args.video is None:
print("Error: provide --image or --video")
sys.exit(1)
config_manager = ConfigurationManager()
paths_config = config_manager.get_paths_config()
create_directories(
[
paths_config.logs_dir,
paths_config.frontend_result_dir,
paths_config.metrics_dir,
]
)
logger = get_logger("run_inference", log_dir=paths_config.logs_dir, level="INFO")
predictor = Predictor(log_dir=paths_config.logs_dir, log_level="INFO")
if args.image:
logger.info("Starting inference on image: %s", args.image)
result = predictor.predict_image(Path(args.image), save_rendered_output=True)
logger.info("Inference completed successfully.")
logger.info("Prediction result: %s", result)
print(result)
elif args.video:
logger.info("Starting inference on video: %s", args.video)
logger.info("Frame step: %s", args.frame_step)
result = predictor.predict_video(
Path(args.video),
frame_step=args.frame_step,
save_rendered_output=True,
)
logger.info("Video inference completed.")
logger.info("Total frames processed: %s", result["total_frames_processed"])
print(result)
if __name__ == "__main__":
main()
|