braillevision / scripts /augment_data.py
Krishna Venkatesh
chore: verify Docker and update project checklist
223db34
Raw
History Blame Contribute Delete
1.73 kB
"""Create lighting, blur, and rotation variants for Braille images."""
from __future__ import annotations
import argparse
from pathlib import Path
from PIL import Image, ImageEnhance, ImageFilter, UnidentifiedImageError
IMAGE_EXTENSIONS = {".jpg", ".jpeg", ".png", ".bmp", ".tif", ".tiff", ".webp"}
def augment_image(path: Path, out_dir: Path) -> None:
try:
img = Image.open(path).convert("RGB")
except UnidentifiedImageError:
return
variants = {
"normal": img,
"dim": ImageEnhance.Brightness(img).enhance(0.65),
"bright": ImageEnhance.Brightness(img).enhance(1.35),
"side_light": ImageEnhance.Contrast(
ImageEnhance.Brightness(img).enhance(0.85)
).enhance(1.6),
"contrast": ImageEnhance.Contrast(img).enhance(1.45),
"blur": img.filter(ImageFilter.GaussianBlur(1.2)),
"rotate_pos5": img.rotate(5, expand=False, fillcolor="white"),
"rotate_neg5": img.rotate(-5, expand=False, fillcolor="white"),
}
out_dir.mkdir(parents=True, exist_ok=True)
for name, variant in variants.items():
variant.save(out_dir / f"{path.stem}_{name}{path.suffix}")
def main() -> None:
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument(
"--input", "--src", dest="src", type=Path, default=Path("data/samples")
)
parser.add_argument(
"--output", "--out", dest="out", type=Path, default=Path("data/processed")
)
args = parser.parse_args()
for image_path in sorted(args.src.glob("*.*")):
if image_path.suffix.lower() not in IMAGE_EXTENSIONS:
continue
augment_image(image_path, args.out)
if __name__ == "__main__":
main()