video_highlighter / setup_check.py
prabhashaj
Initial commit: Video Highlighter with shot-based processing
ad6a892
"""
Quick setup verification script for Video Highlight Extractor
Run this to verify your installation is complete.
"""
import sys
def check_dependencies():
"""Check if all required dependencies are installed."""
print("πŸ” Checking dependencies...\n")
dependencies = {
'streamlit': 'Streamlit framework',
'cv2': 'OpenCV',
'torch': 'PyTorch',
'transformers': 'Hugging Face Transformers',
'ultralytics': 'YOLOv8',
'clip': 'OpenAI CLIP',
'PIL': 'Pillow',
'numpy': 'NumPy',
'sklearn': 'scikit-learn'
}
missing = []
for module, name in dependencies.items():
try:
if module == 'cv2':
import cv2
elif module == 'clip':
import clip
else:
__import__(module)
print(f"βœ… {name}")
except ImportError:
print(f"❌ {name} - NOT FOUND")
missing.append(name)
print()
# Check optional dependencies
print("πŸ“¦ Optional dependencies:")
try:
from decord import VideoReader
print("βœ… Decord (GPU-accelerated video decoding)")
except ImportError:
print("⚠️ Decord - Not installed (will use OpenCV fallback)")
try:
from scenedetect import detect
print("βœ… PySceneDetect (Scene detection)")
except ImportError:
print("⚠️ PySceneDetect - Not installed (will use fallback)")
print()
# Check CUDA
print("πŸ–₯️ GPU Support:")
try:
import torch
if torch.cuda.is_available():
print(f"βœ… CUDA available - {torch.cuda.get_device_name(0)}")
print(f" CUDA version: {torch.version.cuda}")
else:
print("⚠️ CUDA not available - Will use CPU")
except:
print("⚠️ Could not check CUDA status")
print()
# Check FFmpeg
print("🎬 FFmpeg:")
import subprocess
try:
result = subprocess.run(
['ffmpeg', '-version'],
capture_output=True,
text=True,
timeout=5
)
if result.returncode == 0:
version_line = result.stdout.split('\n')[0]
print(f"βœ… {version_line}")
else:
print("❌ FFmpeg found but error checking version")
missing.append("FFmpeg (functional)")
except FileNotFoundError:
print("❌ FFmpeg - NOT FOUND in PATH")
missing.append("FFmpeg")
except Exception as e:
print(f"⚠️ FFmpeg check failed: {e}")
print("\n" + "="*60)
if missing:
print(f"\n❌ Missing dependencies: {', '.join(missing)}")
print("\nπŸ“ To install missing dependencies:")
print(" pip install -r requirements.txt")
if "FFmpeg" in missing:
print("\nπŸ“ To install FFmpeg:")
print(" Windows: choco install ffmpeg")
print(" Linux: sudo apt-get install ffmpeg")
print(" Mac: brew install ffmpeg")
return False
else:
print("\nβœ… All required dependencies installed!")
print("\nπŸš€ Ready to run:")
print(" streamlit run app.py")
return True
def verify_structure():
"""Verify project structure is complete."""
print("\n" + "="*60)
print("\nπŸ“ Verifying project structure...\n")
from pathlib import Path
required_files = [
'app.py',
'requirements.txt',
'README.md',
'pipeline/__init__.py',
'pipeline/ingest.py',
'pipeline/segmentation.py',
'pipeline/aesthetic.py',
'pipeline/objects.py',
'pipeline/vlm.py',
'pipeline/scoring.py',
'pipeline/selector.py',
'utils/__init__.py',
'utils/config.py',
'utils/video_utils.py',
'utils/similarity.py'
]
required_dirs = [
'outputs/frames',
'outputs/video'
]
missing_files = []
for file in required_files:
if Path(file).exists():
print(f"βœ… {file}")
else:
print(f"❌ {file} - MISSING")
missing_files.append(file)
for dir_path in required_dirs:
if Path(dir_path).exists():
print(f"βœ… {dir_path}/")
else:
print(f"❌ {dir_path}/ - MISSING")
missing_files.append(dir_path)
print()
if missing_files:
print(f"❌ Missing files/directories: {len(missing_files)}")
return False
else:
print("βœ… All project files present!")
return True
if __name__ == "__main__":
print("="*60)
print("🎬 VIDEO HIGHLIGHT EXTRACTOR - Setup Verification")
print("="*60)
print()
deps_ok = check_dependencies()
structure_ok = verify_structure()
print("\n" + "="*60)
if deps_ok and structure_ok:
print("\nπŸŽ‰ Setup complete! Your application is ready to use.")
print("\nπŸ“š Next steps:")
print(" 1. Run: streamlit run app.py")
print(" 2. Upload a video in the sidebar")
print(" 3. Configure settings and click 'Extract Highlights'")
print("\nπŸ“– See README.md for detailed documentation")
else:
print("\n⚠️ Setup incomplete. Please address the issues above.")
sys.exit(1)
print("\n" + "="*60)