|
|
import pathlib |
|
|
from typing import List |
|
|
|
|
|
from diffusers.utils import export_to_video |
|
|
from PIL import Image |
|
|
|
|
|
from finetrainers.data.dataset import COMMON_CAPTION_FILES, COMMON_IMAGE_FILES, COMMON_VIDEO_FILES |
|
|
|
|
|
|
|
|
def create_dummy_directory_structure( |
|
|
directory_structure: List[str], tmpdir, num_data_files: int, caption: str, metadata_extension: str |
|
|
): |
|
|
for item in directory_structure: |
|
|
|
|
|
if item in COMMON_CAPTION_FILES: |
|
|
data_file = pathlib.Path(tmpdir.name) / item |
|
|
with open(data_file.as_posix(), "w") as f: |
|
|
for _ in range(num_data_files): |
|
|
f.write(f"{caption}\n") |
|
|
elif item in COMMON_IMAGE_FILES: |
|
|
data_file = pathlib.Path(tmpdir.name) / item |
|
|
with open(data_file.as_posix(), "w") as f: |
|
|
for i in range(num_data_files): |
|
|
f.write(f"images/{i}.jpg\n") |
|
|
elif item in COMMON_VIDEO_FILES: |
|
|
data_file = pathlib.Path(tmpdir.name) / item |
|
|
with open(data_file.as_posix(), "w") as f: |
|
|
for i in range(num_data_files): |
|
|
f.write(f"videos/{i}.mp4\n") |
|
|
elif item == "metadata.csv": |
|
|
data_file = pathlib.Path(tmpdir.name) / item |
|
|
with open(data_file.as_posix(), "w") as f: |
|
|
f.write("file_name,caption\n") |
|
|
for i in range(num_data_files): |
|
|
f.write(f"{i}.{metadata_extension},{caption}\n") |
|
|
elif item == "metadata.jsonl": |
|
|
data_file = pathlib.Path(tmpdir.name) / item |
|
|
with open(data_file.as_posix(), "w") as f: |
|
|
for i in range(num_data_files): |
|
|
f.write(f'{{"file_name": "{i}.{metadata_extension}", "caption": "{caption}"}}\n') |
|
|
elif item.endswith(".txt"): |
|
|
data_file = pathlib.Path(tmpdir.name) / item |
|
|
with open(data_file.as_posix(), "w") as f: |
|
|
f.write(caption) |
|
|
elif item.endswith(".jpg") or item.endswith(".png"): |
|
|
data_file = pathlib.Path(tmpdir.name) / item |
|
|
Image.new("RGB", (64, 64)).save(data_file.as_posix()) |
|
|
elif item.endswith(".mp4"): |
|
|
data_file = pathlib.Path(tmpdir.name) / item |
|
|
export_to_video([Image.new("RGB", (64, 64))] * 4, data_file.as_posix(), fps=2) |
|
|
else: |
|
|
data_file = pathlib.Path(tmpdir.name, item) |
|
|
data_file.mkdir(exist_ok=True, parents=True) |
|
|
|