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
This commit is contained in:
151
test_direct_asr.py
Normal file
151
test_direct_asr.py
Normal file
@@ -0,0 +1,151 @@
|
||||
#!/opt/homebrew/bin/python3.11
|
||||
"""Test ASR processor directly (not via subprocess)."""
|
||||
|
||||
import sys
|
||||
import os
|
||||
import tempfile
|
||||
import json
|
||||
|
||||
# Add scripts directory to path
|
||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
# Import the run_asr function
|
||||
try:
|
||||
from scripts.asr_processor_debug import run_asr
|
||||
|
||||
print("✓ Imported run_asr from asr_processor_debug")
|
||||
except ImportError as e:
|
||||
print(f"✗ Failed to import: {e}")
|
||||
# Try alternative import
|
||||
try:
|
||||
import scripts.asr_processor_debug as asr_module
|
||||
|
||||
run_asr = asr_module.run_asr
|
||||
print("✓ Imported module")
|
||||
except Exception as e2:
|
||||
print(f"✗ Failed: {e2}")
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def test_small_video():
|
||||
"""Test on a small video file (should work)."""
|
||||
test_video = "/Users/accusys/test_video/20250209_212949.mp4"
|
||||
if not os.path.exists(test_video):
|
||||
print(f"Test video not found: {test_video}")
|
||||
return
|
||||
|
||||
print(f"Testing on small video: {test_video}")
|
||||
|
||||
# Create temp output file
|
||||
with tempfile.NamedTemporaryFile(suffix=".json", delete=False) as f:
|
||||
output_path = f.name
|
||||
|
||||
try:
|
||||
# Run ASR directly (no subprocess)
|
||||
print("Calling run_asr...")
|
||||
run_asr(
|
||||
video_path=test_video,
|
||||
output_path=output_path,
|
||||
uuid="test_direct",
|
||||
chunk_duration=600, # 10 minutes
|
||||
max_direct_duration=1200, # 20 minutes
|
||||
model_size="tiny",
|
||||
compute_type="int8",
|
||||
monitor_interval=60,
|
||||
)
|
||||
|
||||
# Check output
|
||||
if os.path.exists(output_path):
|
||||
with open(output_path, "r") as f:
|
||||
output = json.load(f)
|
||||
print(f"✓ ASR completed successfully")
|
||||
print(f" Segments: {len(output.get('segments', []))}")
|
||||
print(f" Language: {output.get('language')}")
|
||||
else:
|
||||
print("✗ Output file not created")
|
||||
|
||||
except Exception as e:
|
||||
print(f"✗ ASR failed: {e}")
|
||||
import traceback
|
||||
|
||||
traceback.print_exc()
|
||||
finally:
|
||||
if os.path.exists(output_path):
|
||||
os.unlink(output_path)
|
||||
print("✓ Cleaned up output file")
|
||||
|
||||
|
||||
def test_large_video_chunk():
|
||||
"""Test on a large video but with small chunk duration to debug hang."""
|
||||
# Use a large video file
|
||||
test_video = "/Users/accusys/test_video/1636719d-c31f-78ac-f1dd-8ab0b0b36c66.mov"
|
||||
if not os.path.exists(test_video):
|
||||
print(f"Large test video not found: {test_video}")
|
||||
return
|
||||
|
||||
print(f"\nTesting on large video with 60s chunks (debug): {test_video}")
|
||||
|
||||
# Create temp output file
|
||||
with tempfile.NamedTemporaryFile(suffix=".json", delete=False) as f:
|
||||
output_path = f.name
|
||||
|
||||
try:
|
||||
# Run with very short chunk duration to see if we can get past first chunk
|
||||
print("Calling run_asr with 60s chunks...")
|
||||
# We'll run in a separate thread with timeout
|
||||
import threading
|
||||
import time
|
||||
|
||||
result = {"success": False, "error": None, "output": None}
|
||||
|
||||
def run_asr_thread():
|
||||
try:
|
||||
run_asr(
|
||||
video_path=test_video,
|
||||
output_path=output_path,
|
||||
uuid="test_large_debug",
|
||||
chunk_duration=60, # 1 minute chunks (smaller for debugging)
|
||||
max_direct_duration=120, # 2 minutes
|
||||
model_size="tiny",
|
||||
compute_type="int8",
|
||||
monitor_interval=30,
|
||||
)
|
||||
result["success"] = True
|
||||
except Exception as e:
|
||||
result["error"] = str(e)
|
||||
result["traceback"] = traceback.format_exc()
|
||||
|
||||
thread = threading.Thread(target=run_asr_thread)
|
||||
thread.daemon = True
|
||||
thread.start()
|
||||
|
||||
# Wait for 30 seconds max
|
||||
thread.join(timeout=30)
|
||||
|
||||
if thread.is_alive():
|
||||
print("✗ ASR is hanging (thread still alive after 30 seconds)")
|
||||
result["timeout"] = True
|
||||
else:
|
||||
if result["success"]:
|
||||
print("✓ ASR completed within 30 seconds")
|
||||
if os.path.exists(output_path):
|
||||
with open(output_path, "r") as f:
|
||||
output = json.load(f)
|
||||
print(f" Segments: {len(output.get('segments', []))}")
|
||||
else:
|
||||
print(f"✗ ASR failed: {result.get('error')}")
|
||||
|
||||
except Exception as e:
|
||||
print(f"✗ Test failed: {e}")
|
||||
import traceback
|
||||
|
||||
traceback.print_exc()
|
||||
finally:
|
||||
if os.path.exists(output_path):
|
||||
os.unlink(output_path)
|
||||
print("✓ Cleaned up output file")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_small_video()
|
||||
test_large_video_chunk()
|
||||
Reference in New Issue
Block a user