ai-sl-api / examples /example_usage.py
deenasun's picture
add two input options and R2 cloud upload-download
03ba989
"""
Example: How to programmatically access video output from the AI-SL API
This file demonstrates different ways users can receive and process video
output from the Gradio interface.
"""
import requests
import base64
from pathlib import Path
def download_video_from_url(video_url, output_path="downloaded_video.mp4"):
"""
Download a video from a public URL
"""
try:
response = requests.get(video_url, stream=True)
response.raise_for_status()
with open(output_path, 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
print(f"Video downloaded to: {output_path}")
return output_path
except Exception as e:
print(f"Error downloading video: {e}")
return None
def save_base64_video(base64_data, output_path="video_from_base64.mp4"):
"""
Save a base64-encoded video to a file
"""
try:
# Remove the data URL prefix if present
if base64_data.startswith('data:video/mp4;base64,'):
base64_data = base64_data.split(',')[1]
# Decode and save
video_data = base64.b64decode(base64_data)
with open(output_path, 'wb') as f:
f.write(video_data)
print(f"Video saved from base64 to: {output_path}")
return output_path
except Exception as e:
print(f"Error saving base64 video: {e}")
return None
def process_gradio_output(gradio_result):
"""
Process the output from the Gradio interface
gradio_result should be a tuple: (json_data, video_output, download_html)
"""
json_data, video_output, download_html = gradio_result
print("Processing Results:")
print(f"Status: {json_data['status']}")
print(f"Video Count: {json_data['video_count']}")
print(f"Gloss: {json_data['gloss']}")
# Handle video output based on format
if json_data.get('video_format') == 'base64':
# Video is base64 encoded
print("Video format: Base64")
video_path = save_base64_video(video_output, "asl_output.mp4")
else:
# Video is a URL (from R2 upload)
print("Video format: URL")
video_path = download_video_from_url(video_output, "asl_output.mp4")
return video_path
# Example usage scenarios:
def example_1_direct_download():
"""
Example 1: Direct download from R2 URL
"""
print("=== Example 1: Direct Download ===")
# Simulate getting a video URL from the interface
video_url = "https://your-r2-endpoint.com/bucket/video.mp4"
# Download the video
video_path = download_video_from_url(video_url)
if video_path:
print(f"Video ready for processing: {video_path}")
# Now you can use the video file for further processing
# e.g., upload to another service, analyze with OpenCV, etc.
def example_2_base64_processing():
"""
Example 2: Processing base64 video data
"""
print("=== Example 2: Base64 Processing ===")
# Simulate getting base64 data from the interface
base64_video = ("data:video/mp4;base64,AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAA...") # noqa: E501
# Save the video
video_path = save_base64_video(base64_video)
if video_path:
print(f"Video ready for processing: {video_path}")
def example_3_programmatic_interface():
"""
Example 3: Using the Gradio interface programmatically
"""
print("=== Example 3: Programmatic Interface ===")
# If you want to call the Gradio interface programmatically
# You can use the gradio_client library
try:
from gradio_client import Client
# Connect to your running Gradio interface
client = Client("http://localhost:7860") # Adjust URL as needed
# Upload a document and get results
result = client.predict(
"path/to/your/document.pdf", # File path
api_name="/predict" # Adjust based on your interface
)
# Process the results
video_path = process_gradio_output(result)
print(f"Processed video: {video_path}")
except ImportError:
print("gradio_client not installed. Install with: "
"pip install gradio_client")
except Exception as e:
print(f"Error calling Gradio interface: {e}")
def example_4_video_processing():
"""
Example 4: Further video processing
"""
print("=== Example 4: Video Processing ===")
# Once you have the video file, you can process it further
video_path = "asl_output.mp4"
if Path(video_path).exists():
print(f"Processing video: {video_path}")
# Example: Get video information
try:
import cv2
cap = cv2.VideoCapture(video_path)
fps = cap.get(cv2.CAP_PROP_FPS)
frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
duration = frame_count / fps
cap.release()
print(f"Video info: {duration:.2f} seconds, {fps} FPS, "
f"{frame_count} frames")
except ImportError:
print("OpenCV not installed. Install with: "
"pip install opencv-python")
# Example: Upload to another service
# upload_to_youtube(video_path)
# upload_to_drive(video_path)
# etc.
if __name__ == "__main__":
# Run examples
example_1_direct_download()
example_2_base64_processing()
example_3_programmatic_interface()
example_4_video_processing()