Video-Scout / src /main.py
ashleshp's picture
first commit
fca155a
import sys
from pathlib import Path
from rich.console import Console
from rich.prompt import Prompt
from src.perception.engine import Qwen2PerceptionEngine
from src.memory.manager import SimpleMemoryManager
from src.core.orchestrator import VideoAgent
from src.config.settings import settings
console = Console()
def main():
console.rule("[bold blue]Agentic Video Understanding System[/]")
# 1. Initialize Components
with console.status("[bold green]Loading AI Models... (This uses GPU)[/]"):
perception = Qwen2PerceptionEngine()
# Pre-load to avoid delay on first query
try:
perception.load_model(settings.paths.model_path)
except Exception as e:
console.print(f"[bold red]Critical Error:[/] Failed to load Qwen2-VL. {e}")
console.print("Ensure you ran 'python scripts/download_model.py'")
sys.exit(1)
memory = SimpleMemoryManager(storage_dir=settings.paths.data_dir / "metadata")
agent = VideoAgent(perception, memory)
# 2. Select Video
video_id = "test_video"
video_path = settings.paths.data_dir / f"{video_id}.mp4"
if not video_path.exists():
console.print(f"[yellow]Warning:[/] Video {video_path} not found.")
console.print("Please place a video at data/test_video.mp4")
return
# 3. Initialize Memory for this video
memory.initialize_storage(video_id)
console.print(f"[green]Video Loaded:[/] {video_id}.mp4")
# 4. Interactive Loop
while True:
console.print()
query = Prompt.ask("[bold cyan]Ask a question[/] (or 'exit')")
if query.lower() in ["exit", "quit", "q"]:
break
with console.status("[bold yellow]Agent Thinking...[/]"):
try:
response = agent.ask(query, video_id)
console.print(f"[bold white]Answer:[/] {response}")
except Exception as e:
console.print(f"[bold red]Error:[/] {e}")
if __name__ == "__main__":
main()