Download code/src/preprocessing/extract_ob_zip.py from savastakan/hitit-cuneiform-ocr: direct link, hf CLI and curl.
- Browser
- Download file 2 kB
-
https://huggingface.co/savastakan/hitit-cuneiform-ocr/resolve/main/code/src/preprocessing/extract_ob_zip.py
- Command line
-
hf download hf://savastakan/hitit-cuneiform-ocr/code/src/preprocessing/extract_ob_zip.py
-
curl -L -o extract_ob_zip.py https://huggingface.co/savastakan/hitit-cuneiform-ocr/resolve/main/code/src/preprocessing/extract_ob_zip.py
2 kB
| #!/usr/bin/env python3 | |
| """Extract OB sign_crops.zip to fs + update manifest to storage='fs'.""" | |
| import json, argparse, zipfile, os, sys | |
| from pathlib import Path | |
| ROOT = Path("/arf/scratch/stakan/hitit-proje") | |
| def main(): | |
| ap = argparse.ArgumentParser() | |
| ap.add_argument('--manifest', default=str(ROOT / 'datasets/sources/old_babylonian_signs/manifest.jsonl')) | |
| ap.add_argument('--archive', default=str(ROOT / 'datasets/sources/old_babylonian_signs/sign_crops.zip')) | |
| ap.add_argument('--extract-dir', default=str(ROOT / 'datasets/sources/old_babylonian_signs/sign_crops')) | |
| ap.add_argument('--output-manifest', default=str(ROOT / 'datasets/sources/old_babylonian_signs/manifest_fs.jsonl')) | |
| args = ap.parse_args() | |
| # Extract zip (idempotent) | |
| ed = Path(args.extract_dir) | |
| if not ed.exists() or len(list(ed.rglob('*.jpg'))) == 0: | |
| print(f"Extracting {args.archive} → {ed}") | |
| ed.mkdir(parents=True, exist_ok=True) | |
| with zipfile.ZipFile(args.archive) as z: | |
| z.extractall(ed.parent) # extracts as sign_crops/ | |
| n_extracted = sum(1 for _ in ed.rglob('*.jpg')) + sum(1 for _ in ed.rglob('*.png')) | |
| print(f"Images on disk: {n_extracted}") | |
| # Rewrite manifest | |
| n_fs = 0; n_skip = 0 | |
| with open(args.manifest) as fin, open(args.output_manifest, 'w') as fout: | |
| for line in fin: | |
| r = json.loads(line) | |
| if r.get('storage') == 'zip' and r.get('member'): | |
| fs_path = str(ed.parent / r['member']) | |
| if os.path.exists(fs_path): | |
| r['storage'] = 'fs' | |
| r['path'] = fs_path | |
| r['integrity_ok'] = True | |
| fout.write(json.dumps(r) + '\n'); n_fs += 1 | |
| else: | |
| n_skip += 1 | |
| else: | |
| fout.write(line); n_fs += 1 | |
| print(f"Converted to fs: {n_fs}, missing files: {n_skip}") | |
| print(f"Output: {args.output_manifest}") | |
| if __name__ == '__main__': | |
| main() | |