Spaces:
Runtime error
Runtime error
| import os | |
| import tempfile | |
| from pathlib import Path | |
| import base64 | |
| from PIL import Image | |
| import io | |
| import shutil | |
| def save_uploaded_file(file_obj, extension=".jpg"): | |
| """ | |
| Save uploaded file to temporary location | |
| Args: | |
| file_obj: File object or PIL Image | |
| extension (str): File extension | |
| Returns: | |
| str: Path to saved file | |
| """ | |
| try: | |
| temp_dir = tempfile.mkdtemp() | |
| if isinstance(file_obj, Image.Image): | |
| # PIL Image | |
| temp_path = os.path.join(temp_dir, f"upload{extension}") | |
| file_obj.save(temp_path) | |
| elif hasattr(file_obj, 'name'): | |
| # File-like object | |
| temp_path = os.path.join(temp_dir, f"upload{extension}") | |
| shutil.copy2(file_obj.name, temp_path) | |
| else: | |
| # Assume it's a base64 string or bytes | |
| temp_path = os.path.join(temp_dir, f"upload{extension}") | |
| if isinstance(file_obj, str): | |
| # Base64 string | |
| if ',' in file_obj: | |
| file_data = base64.b64decode(file_obj.split(',')[1]) | |
| else: | |
| file_data = base64.b64decode(file_obj) | |
| with open(temp_path, 'wb') as f: | |
| f.write(file_data) | |
| elif isinstance(file_obj, bytes): | |
| with open(temp_path, 'wb') as f: | |
| f.write(file_obj) | |
| return temp_path | |
| except Exception as e: | |
| print(f"Error saving file: {e}") | |
| return None | |
| def cleanup_temp_files(file_paths): | |
| """ | |
| Clean up temporary files | |
| Args: | |
| file_paths (list): List of file paths to clean up | |
| """ | |
| for file_path in file_paths: | |
| try: | |
| if os.path.exists(file_path): | |
| if os.path.isfile(file_path): | |
| os.remove(file_path) | |
| elif os.path.isdir(file_path): | |
| shutil.rmtree(file_path) | |
| except Exception as e: | |
| print(f"Error cleaning up {file_path}: {e}") | |
| def image_to_base64(image, format='JPEG', quality=85): | |
| """ | |
| Convert PIL Image to base64 string | |
| Args: | |
| image (PIL.Image): Input image | |
| format (str): Output format | |
| quality (int): Compression quality | |
| Returns: | |
| str: Base64 encoded image string | |
| """ | |
| buffer = io.BytesIO() | |
| image.save(buffer, format=format, quality=quality) | |
| image_data = buffer.getvalue() | |
| return base64.b64encode(image_data).decode() | |
| def base64_to_image(base64_string): | |
| """ | |
| Convert base64 string to PIL Image | |
| Args: | |
| base64_string (str): Base64 encoded image string | |
| Returns: | |
| PIL.Image: Decoded image | |
| """ | |
| try: | |
| if ',' in base64_string: | |
| base64_string = base64_string.split(',')[1] | |
| image_data = base64.b64decode(base64_string) | |
| image = Image.open(io.BytesIO(image_data)) | |
| return image | |
| except Exception as e: | |
| print(f"Error decoding base64 image: {e}") | |
| return None | |
| def create_video_preview(video_path, num_frames=4): | |
| """ | |
| Create preview frames from video | |
| Args: | |
| video_path (str): Path to video file | |
| num_frames (int): Number of preview frames | |
| Returns: | |
| list: List of PIL Images | |
| """ | |
| try: | |
| import cv2 | |
| cap = cv2.VideoCapture(video_path) | |
| total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) | |
| fps = cap.get(cv2.CAP_PROP_FPS) | |
| if total_frames == 0: | |
| return [] | |
| # Select frames evenly distributed across the video | |
| frame_indices = np.linspace(0, total_frames-1, num_frames, dtype=int) | |
| frames = [] | |
| for frame_idx in frame_indices: | |
| cap.set(cv2.CAP_PROP_POS_FRAMES, frame_idx) | |
| ret, frame = cap.read() | |
| if ret: | |
| frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) | |
| frames.append(Image.fromarray(frame_rgb)) | |
| cap.release() | |
| return frames | |
| except Exception as e: | |
| print(f"Error creating video preview: {e}") | |
| return [] | |
| def validate_video_file(file_path): | |
| """ | |
| Validate that the file is a valid video | |
| Args: | |
| file_path (str): Path to video file | |
| Returns: | |
| bool: True if valid video file | |
| """ | |
| try: | |
| import cv2 | |
| cap = cv2.VideoCapture(file_path) | |
| ret = cap.isOpened() | |
| cap.release() | |
| return ret | |
| except: | |
| return False | |
| def validate_image_file(file_path): | |
| """ | |
| Validate that the file is a valid image | |
| Args: | |
| file_path (str): Path to image file | |
| Returns: | |
| bool: True if valid image file | |
| """ | |
| try: | |
| from PIL import Image | |
| with Image.open(file_path) as img: | |
| img.verify() | |
| return True | |
| except: | |
| return False |