File size: 1,701 Bytes
a8e7fe6 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | """Generate the graded-degradation robustness set (dataset/robust).
One scam + one bill, 6 degradation kinds x 3 intensity levels + 2 clean
baselines = 38 images. Run:
.venv\\Scripts\\python.exe scripts\\make_robust_set.py
"""
from __future__ import annotations
import json
import os
import random
import sys
sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "src"))
from guardian import letterforge # noqa: E402
KINDS = ("blur", "dim", "rotate", "perspective", "shadow", "noise")
def main() -> None:
out_dir = os.path.join("dataset", "robust")
os.makedirs(out_dir, exist_ok=True)
rng = random.Random(2026)
cases = [("scam", letterforge.gift_card_scam(rng)),
("bill", letterforge.utility_bill(rng))]
rows = []
for tag, gold in cases:
base, _ = letterforge.render_gold(gold, rng, degrade=False)
variants = [("clean", 0, base)]
variants += [(k, lvl, letterforge.degrade_graded(base, k, lvl))
for k in KINDS for lvl in (1, 2, 3)]
for kind, level, img in variants:
fname = f"{tag}_{kind}_{level}.png"
img.convert("RGB").save(os.path.join(out_dir, fname))
rows.append({"file": fname, "tag": tag, "kind": kind, "level": level,
"signal_ids": gold.signal_ids,
"acceptable_levels": list(gold.acceptable_levels)})
with open(os.path.join(out_dir, "labels.jsonl"), "w", encoding="utf-8") as f:
for row in rows:
f.write(json.dumps(row, ensure_ascii=False) + "\n")
print(f"wrote {len(rows)} images to {out_dir}")
if __name__ == "__main__":
main()
|