Elliott Duke
Claude Opus 4.8
HomingPet: lost-dog reunification (FastAPI + React) with Render deploy
de1e3fc Download backend/scripts/load_dataset.py from Duke410/PawTrace: direct link, hf CLI and curl.
- Browser
- Download file 2.65 kB
-
https://huggingface.co/spaces/Duke410/PawTrace/resolve/main/backend/scripts/load_dataset.py
- Command line
-
hf download hf://spaces/Duke410/PawTrace/backend/scripts/load_dataset.py
-
curl -L -o load_dataset.py https://huggingface.co/spaces/Duke410/PawTrace/resolve/main/backend/scripts/load_dataset.py
2.65 kB
| """CLI for the batch loader (spec §4). | |
| Usage: | |
| python -m scripts.load_dataset --folder PATH --type known --name "My set" \ | |
| --csv PATH/known_dogs.csv [--description ...] [--mark-lost] [--mark-lost-pct 50] \ | |
| [--run-matching] [--seed 42] | |
| """ | |
| from __future__ import annotations | |
| import argparse | |
| from app.db import SessionLocal, engine | |
| from app.models import Base | |
| from app.services.batch_loader import load_dataset | |
| def main() -> None: | |
| parser = argparse.ArgumentParser(description="Batch-load a dataset of dog images.") | |
| parser.add_argument("--folder", required=True) | |
| parser.add_argument("--type", required=True, choices=["known", "unknown", "test_known", "test_found"]) | |
| parser.add_argument("--name", required=True) | |
| parser.add_argument("--csv", required=True) | |
| parser.add_argument("--description", default=None) | |
| parser.add_argument("--mark-lost", action="store_true") | |
| parser.add_argument("--mark-lost-pct", type=int, default=100) | |
| parser.add_argument("--run-matching", action="store_true") | |
| parser.add_argument("--skip-embeddings", action="store_true", | |
| help="Store images only; generate embeddings later via admin embed-all") | |
| parser.add_argument("--one-dog-per-image", action="store_true", | |
| help="Legacy: one dog record per image instead of grouping a folder's " | |
| "images into a single dog with multiple pictures") | |
| parser.add_argument("--seed", type=int, default=42) | |
| args = parser.parse_args() | |
| Base.metadata.create_all(bind=engine) | |
| db = SessionLocal() | |
| try: | |
| result = load_dataset( | |
| db, | |
| folder=args.folder, | |
| dataset_type=args.type, | |
| name=args.name, | |
| description=args.description, | |
| csv_path=args.csv, | |
| mark_lost=args.mark_lost, | |
| mark_lost_pct=args.mark_lost_pct, | |
| run_matching=args.run_matching, | |
| skip_embeddings=args.skip_embeddings, | |
| group_by_folder=not args.one_dog_per_image, | |
| seed=args.seed, | |
| ) | |
| finally: | |
| db.close() | |
| print(f"Dataset #{result.dataset_id} loaded:") | |
| print(f" dogs loaded: {result.dogs_loaded}") | |
| print(f" images processed: {result.images_processed}") | |
| print(f" cases created: {result.cases_created}") | |
| print(f" users created: {result.users_created}") | |
| print(f" errors: {len(result.errors)}") | |
| if result.matching: | |
| print(f" matching: {result.matching}") | |
| for err in result.errors[:20]: | |
| print(f" ! {err}") | |
| if __name__ == "__main__": | |
| main() | |