jhj0517
Add video compare function
aa6793a
raw
history blame
2.17 kB
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 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.join(PROJECT_ROOT_DIR, "tests", "test.png")
TEST_VIDEO_PATH = os.path.join(PROJECT_ROOT_DIR, "tests", "test_expression.mp4")
TEST_EXPRESSION_OUTPUT_PATH = 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
@functools.lru_cache
def is_cuda_available():
return torch.cuda.is_available()