media-authenticity / save_decof_frames.py
cryptomathematician
added different video detector
634e783
Raw
History Blame Contribute Delete
1.7 kB
"""Save the exact 8 frames DeCoF uses for key Veo videos for visual inspection."""
import os
import sys
import cv2
import numpy as np
from pathlib import Path
project_root = Path(__file__).parent
sys.path.insert(0, str(project_root))
sys.path.insert(0, str(project_root / 'sdk'))
import importlib.util
spec = importlib.util.spec_from_file_location(
'decof_detector', project_root / 'models' / 'video' / 'DeCoF' / 'detector.py'
)
module = importlib.util.module_from_spec(spec)
sys.modules['decof_detector'] = module
spec.loader.exec_module(module)
# Videos to inspect: sunflower (FAKE), jellyfish, northern_lights, cowboy
videos = {
'sunflower': 'D:/veo/veo/veo_example_041_sunflower.mp4',
'jellyfish': 'D:/veo/veo/veo_example_014_jellyfish.mp4',
'northern_lights': 'D:/veo/veo/veo_example_006_northern_lights.mp4',
'cowboy': 'D:/veo/veo/veo_cowboy_sun_1.mp4',
}
out_dir = project_root / 'decof_frames'
out_dir.mkdir(exist_ok=True)
detector = module.DeCoFDetector()
print("=" * 70)
print("Saving DeCoF frames for visual inspection")
print("=" * 70)
for name, path in videos.items():
print(f"\n[{name}] {os.path.basename(path)}")
frames = detector._extract_decof_frames(path)
print(f" Extracted {len(frames)} frames")
# Save each frame
for i, frame in enumerate(frames):
# frame is RGB numpy array
bgr = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
fname = f"{name}_frame{i:02d}.jpg"
fpath = out_dir / fname
cv2.imwrite(str(fpath), bgr)
print(f" Saved {len(frames)} frames to {out_dir}")
print(f"\nAll frames saved to: {out_dir}")
print("\nFrame indices (DeCoF protocol): 0, 4, 8, 13, 17, 22, 26, 31")