Spaces:
Running
Running
| """ | |
| 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() |