Spaces:
Runtime error
Runtime error
| from PIL import Image, ImageChops | |
| import requests | |
| import os | |
| import torch | |
| import functools | |
| import numpy as np | |
| import cv2 | |
| from skimage.metrics import structural_similarity as compare_ssim | |
| from moviepy.editor import VideoFileClip | |
| from modules.utils.paths import * | |
| TEST_IMAGE_URL = "https://github.com/microsoft/onnxjs-demo/raw/master/src/assets/EmotionSampleImages/sad_baby.jpg" | |
| TEST_VIDEO_URL = "https://github.com/jhj0517/sample-medias/raw/master/vids/human-face/expression01_short.mp4" | |
| TEST_IMAGE_PATH = os.path.normpath(os.path.join(PROJECT_ROOT_DIR, "tests", "test.png")) | |
| TEST_VIDEO_PATH = os.path.normpath(os.path.join(PROJECT_ROOT_DIR, "tests", "test_expression.mp4")) | |
| TEST_EXPRESSION_OUTPUT_PATH = os.path.normpath(os.path.join(PROJECT_ROOT_DIR, "tests", "edited_expression.png")) | |
| TEST_EXPRESSION_AAA = 100 | |
| def download_image(url, path): | |
| if os.path.exists(path): | |
| return | |
| response = requests.get(url, stream=True) | |
| if response.status_code == 200: | |
| with open(path, 'wb') as file: | |
| for chunk in response.iter_content(1024): | |
| file.write(chunk) | |
| print(f"Image successfully downloaded to {path}") | |
| else: | |
| raise Exception(f"Failed to download image. Status code: {response.status_code}") | |
| def are_images_different(image1_path: str, image2_path: str): | |
| image1 = Image.open(image1_path) | |
| image2 = Image.open(image2_path) | |
| diff = ImageChops.difference(image1, image2) | |
| if diff.getbbox() is None: | |
| return False | |
| else: | |
| return True | |
| def are_videos_different(video1_path: str, video2_path: str): | |
| cap1 = cv2.VideoCapture(video1_path) | |
| cap2 = cv2.VideoCapture(video2_path) | |
| while True: | |
| ret1, frame1 = cap1.read() | |
| ret2, frame2 = cap2.read() | |
| if not ret1 or not ret2: | |
| if ret1 != ret2: | |
| return True | |
| break | |
| if frame1.shape != frame2.shape: | |
| frame1 = cv2.resize(frame1, (frame2.shape[1], frame2.shape[0])) | |
| score, _ = compare_ssim(frame1, frame2, full=True, multichannel=True) | |
| if score < 0.99: | |
| return True | |
| cap1.release() | |
| cap2.release() | |
| return False | |
| def validate_video(video_path): | |
| cap = cv2.VideoCapture(video_path) | |
| if not cap.isOpened(): | |
| print("Could not open video file.") | |
| return False | |
| frame_count = 0 | |
| while True: | |
| ret, frame = cap.read() | |
| if not ret: | |
| break | |
| frame_count += 1 | |
| cap.release() | |
| if frame_count == 0: | |
| print("No frames found in video file.") | |
| return False | |
| return True | |
| def has_sound(video_path: str): | |
| try: | |
| video = VideoFileClip(video_path) | |
| return video.audio is not None | |
| except Exception as e: | |
| return False | |
| def is_cuda_available(): | |
| return torch.cuda.is_available() | |