Spaces:
Build error
Build error
| import cv2 | |
| from PIL import Image | |
| import numpy as np | |
| from tqdm import tqdm | |
| from ops.llava import Llava | |
| class llava_iqa(): | |
| def __init__(self) -> None: | |
| self._questions() | |
| self.llava = Llava(device='cuda') | |
| def _questions(self): | |
| # quailty, noise, structure, texture | |
| self.questions = {'noise-free':'Is the image free of noise or distortion', | |
| 'sharp':'Does the image show clear objects and sharp edges', | |
| 'structure':'Is the overall scene coherent and realistic in terms of layout and proportions in this image', | |
| 'detail':'Does this image show detailed textures and materials', | |
| 'quality':'Is this image overall a high quality image with clear objects, sharp edges, nice color, good overall structure, and good visual quailty'} | |
| def _load_renderings(self,video_fn): | |
| capturer = cv2.VideoCapture(video_fn) | |
| frames = [] | |
| while True: | |
| ret,frame = capturer.read() | |
| if ret == False or frame is None: break | |
| frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) | |
| frame = Image.fromarray(frame.astype(np.uint8)) | |
| frames.append(frame) | |
| # random sample... | |
| idxs = np.random.permutation(len(frames))[0:50] | |
| frames = [frames[i] for i in idxs] | |
| return frames | |
| def __call__(self,video_fn=f'data/vistadream/bust/video_rgb.mp4'): | |
| results = {} | |
| renderings = self._load_renderings(video_fn) | |
| for key,question in self.questions.items(): | |
| results[key] = [] | |
| query = f'<image>\n USER: {question}, just anwser with yes or no? \n ASSISTANT: ' | |
| for rendering in renderings: | |
| prompt = self.llava(rendering,query) | |
| split = str.rfind(prompt,'ASSISTANT: ') + len(f'ASSISTANT: ') | |
| prompt = prompt[split+1:] | |
| if prompt[0:2] == 'Ye': results[key].append(1) | |
| else: results[key].append(0) | |
| for key,val in results.items: | |
| results[key] = np.mean(np.array(val)) | |
| return results | |