Spaces:
Running
Running
import json | |
import os | |
from pathlib import Path | |
from typing import Dict, Iterator, List, Tuple | |
import huggingface_hub | |
class HPSPrompts: | |
def __init__(self): | |
super().__init__() | |
self.hps_prompt_files = [ | |
"anime.json", | |
"concept-art.json", | |
"paintings.json", | |
"photo.json", | |
] | |
self._download_benchmark_prompts() | |
self.prompts: Dict[str, str] = {} | |
self._size = 0 | |
for file in self.hps_prompt_files: | |
category = file.replace(".json", "") | |
with open(os.path.join("downloads/hps", file), "r") as f: | |
prompts = json.load(f) | |
for i, prompt in enumerate(prompts): | |
if i == 100: | |
break | |
filename = f"{category}_{i:03d}.png" | |
self.prompts[filename] = prompt | |
self._size += 1 | |
def __iter__(self) -> Iterator[Tuple[str, Path]]: | |
for filename, prompt in self.prompts.items(): | |
yield prompt, Path(filename) | |
def name(self) -> str: | |
return "hps" | |
def size(self) -> int: | |
return self._size | |
def _download_benchmark_prompts(self) -> None: | |
folder_name = Path("downloads/hps") | |
folder_name.mkdir(parents=True, exist_ok=True) | |
for file in self.hps_prompt_files: | |
file_name = huggingface_hub.hf_hub_download( | |
"zhwang/HPDv2", file, subfolder="benchmark", repo_type="dataset" | |
) | |
if not os.path.exists(os.path.join(folder_name, file)): | |
os.symlink(file_name, os.path.join(folder_name, file)) | |
def metrics(self) -> List[str]: | |
return ["hps"] | |