Files
momentry_core/test_large_video_asr.py
Warren b54c2def30 feat: add migrations, test scripts, and utility tools
- Add database migrations (006-028) for face recognition, identity, file_uuid
- Add test scripts for ASR, face, search, processing
- Add portal frontend (Tauri)
- Add config, benchmark, and monitoring utilities
- Add model checkpoints and pretrained model references
2026-04-30 15:11:53 +08:00

135 lines
3.8 KiB
Python

#!/usr/bin/env python3
"""
Test ASR processor on a single large video file.
"""
import sys
import os
import subprocess
import json
import tempfile
import time
import signal
from pathlib import Path
# Add scripts directory to path
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "scripts"))
def test_large_video(video_path, output_dir="test_large_output"):
"""Test ASR on a large video file."""
if not os.path.exists(video_path):
print(f"Video file not found: {video_path}")
return False
os.makedirs(output_dir, exist_ok=True)
# Create output file path
video_name = os.path.splitext(os.path.basename(video_path))[0]
output_file = os.path.join(output_dir, f"{video_name}.asr.json")
print(f"Testing ASR on: {os.path.basename(video_path)}")
print(f"Output: {output_file}")
# Run ASR processor with timeout
# Use the script directly
script_path = os.path.join(os.path.dirname(__file__), "scripts", "asr_processor.py")
cmd = [
"/opt/homebrew/bin/python3.11",
script_path,
"--video",
video_path,
"--output",
output_file,
"--model-size",
"tiny", # Use smallest for testing
"--progress",
]
print(f"Command: {' '.join(cmd)}")
start_time = time.time()
try:
# Run with timeout (2 hours for 2GB file)
timeout = 7200 # 2 hours
# Create a process
proc = subprocess.Popen(
cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True
)
# Wait with timeout
try:
stdout, stderr = proc.communicate(timeout=timeout)
returncode = proc.returncode
except subprocess.TimeoutExpired:
print(f"Process timed out after {timeout} seconds")
proc.kill()
stdout, stderr = proc.communicate()
returncode = -1
elapsed = time.time() - start_time
print(f"Elapsed time: {elapsed:.2f} seconds")
print(f"Return code: {returncode}")
if stdout:
print(f"STDOUT (last 10 lines):")
for line in stdout.strip().split("\n")[-10:]:
print(f" {line}")
if stderr:
print(f"STDERR (last 20 lines):")
for line in stderr.strip().split("\n")[-20:]:
print(f" {line}")
# Check output file
if os.path.exists(output_file):
try:
with open(output_file, "r") as f:
data = json.load(f)
print(
f"Success! Output file created with {len(data.get('segments', []))} segments"
)
print(f"Processing mode: {data.get('processing_mode', 'unknown')}")
print(f"Chunk count: {data.get('chunk_count', 1)}")
return True
except json.JSONDecodeError as e:
print(f"Output file is not valid JSON: {e}")
return False
else:
print("Output file not created")
return False
except Exception as e:
print(f"Error running ASR: {e}")
return False
if __name__ == "__main__":
# Test with a large video file
video_path = "../test_video/1636719d-c31f-78ac-f1dd-8ab0b0b36c66.mov"
# Check if file exists
if not os.path.exists(video_path):
# Try absolute path
video_path = (
"/Users/accusys/test_video/1636719d-c31f-78ac-f1dd-8ab0b0b36c66.mov"
)
if not os.path.exists(video_path):
print(f"Large video file not found at {video_path}")
print("Please specify a different video file path.")
sys.exit(1)
success = test_large_video(video_path)
if success:
print("\n✅ Large video ASR test PASSED")
sys.exit(0)
else:
print("\n❌ Large video ASR test FAILED")
sys.exit(1)