Spaces:
Runtime error
Runtime error
File size: 3,700 Bytes
3b421e3 ef5efca 3b421e3 ef5efca 3b421e3 7efde76 f0272e1 3b421e3 f0272e1 ef5efca 7efde76 3b421e3 f0272e1 3b421e3 7efde76 ef5efca 3b421e3 7efde76 ef5efca 3b421e3 ef5efca f0272e1 7efde76 3b421e3 f0272e1 ef5efca f0272e1 ef5efca f0272e1 ef5efca f0272e1 7efde76 3b421e3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
import sys
import subprocess
import pkg_resources
import os
import tempfile
required_packages = {
'torch': 'torch',
'gradio': 'gradio',
'transformers': 'transformers',
'decord': 'decord',
'numpy': 'numpy',
'instaloader': 'instaloader'
}
def install_packages(packages):
for package in packages:
subprocess.check_call([sys.executable, "-m", "pip", "install", package])
def check_and_install_packages():
installed_packages = {pkg.key for pkg in pkg_resources.working_set}
missing_packages = [required_packages[pkg] for pkg in required_packages if pkg not in installed_packages]
if missing_packages:
print("Installing missing packages...")
install_packages(missing_packages)
print("Packages installed successfully.")
else:
print("All required packages are already installed.")
# Check and install required packages
check_and_install_packages()
# Now import the required modules
import gradio as gr
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
from decord import VideoReader, cpu
import numpy as np
import instaloader
# Initialize Instaloader
L = instaloader.Instaloader()
def download_instagram_video(url):
try:
# Extract post shortcode from URL
shortcode = url.split("/")[-2]
# Download the post
post = instaloader.Post.from_shortcode(L.context, shortcode)
# Create a temporary directory
with tempfile.TemporaryDirectory() as tmpdirname:
# Download the video
L.download_post(post, target=tmpdirname)
# Find the downloaded video file
video_file = next(file for file in os.listdir(tmpdirname) if file.endswith('.mp4'))
video_path = os.path.join(tmpdirname, video_file)
return video_path
except Exception as e:
print(f"Error downloading video: {e}")
return None
def process_video(video_path, max_frames=64):
vr = VideoReader(video_path, ctx=cpu(0))
total_frames = len(vr)
frame_indices = np.linspace(0, total_frames - 1, max_frames, dtype=int)
frames = vr.get_batch(frame_indices).asnumpy()
return frames
# This is a placeholder for the actual LLaVA-Video model
def analyze_video(video_frames, question):
# In a real implementation, you would use the LLaVA-Video model here
return f"Analyzed {len(video_frames)} frames. Your question was: {question}"
def analyze_instagram_video(video_url, question):
if not video_url:
return "Please enter an Instagram video URL."
video_path = download_instagram_video(video_url)
if not video_path:
return "Failed to download the video. Please check the URL and try again."
video_frames = process_video(video_path)
response = analyze_video(video_frames, question)
return response
# Create Gradio interface
with gr.Blocks() as demo:
gr.Markdown("# 🎥 Instagram Video Analyzer")
gr.Markdown("Enter the URL of an Instagram video and ask questions about its content!")
with gr.Row():
with gr.Column():
video_url_input = gr.Textbox(label="Instagram Video URL", placeholder="https://www.instagram.com/p/...")
question_input = gr.Textbox(label="Ask a question about the video", placeholder="What's happening in this Instagram video?")
submit_button = gr.Button("Analyze Video")
output = gr.Textbox(label="Analysis Result")
submit_button.click(
fn=analyze_instagram_video,
inputs=[video_url_input, question_input],
outputs=output
)
if __name__ == "__main__":
demo.launch() |