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"] | |