- Create fuzz/fuzz_targets/profile_yaml.rs to test YAML parsing - Register profile_yaml target in fuzz/Cargo.toml - Verify cargo-fuzz 0.13.1 is installed and working - All 7 fuzz targets now operational per plan requirement (line 3236) Closes bf-1b7od. Verification: notes/bf-1b7od.md
5 KiB
bf-58jnx Verification Note
Task
Add high-quality single-page OCR fixtures for invoice, letter, and form document types with ground truth text.
Status: COMPLETE
Artifacts Created
Fixtures Added
All fixtures exist in tests/fixtures/scanned/:
- Invoice fixture:
invoice/invoice-300dpi.pdf+invoice/invoice-300dpi-ground-truth.txt - Letter fixture:
letter/letter-300dpi.pdf+letter/letter-300dpi-ground-truth.txt - Form fixture:
form/form-300dpi.pdf+form/form-300dpi-ground-truth.txt
Fixture Properties
All three PDFs verified to be actual scanned content at 300 DPI:
$ pdfimages -list tests/fixtures/scanned/invoice/invoice-300dpi.pdf
page num type width height color comp bpc enc interp object ID x-ppi y-ppi size ratio
1 0 image 2550 3300 rgb 3 8 jpeg no 7 0 300 300 624K 2.5%
$ pdfimages -list tests/fixtures/scanned/letter/letter-300dpi.pdf
page num type width height color comp bpc enc interp object ID x-ppi y-ppi size ratio
1 0 image 2550 3300 rgb 3 8 jpeg no 1 0 300 300 606K 2.5%
$ pdfimages -list tests/fixtures/scanned/form/form-300dpi.pdf
page num type width height color comp bpc enc interp object ID x-ppi y-ppi size ratio
1 0 image 2550 3300 rgb 3 8 jpeg no 1 0 300 300 527K 2.1%
Word Error Rate (WER) Verification
The WER measurement script at scripts/measure-wer.sh functions correctly. Testing with identical files (simulating perfect OCR where output exactly matches ground truth) yields WER = 0%:
$ VERBOSE=1 scripts/measure-wer.sh tests/fixtures/scanned/invoice/invoice-300dpi-ground-truth.txt tests/fixtures/scanned/invoice/invoice-300dpi-ground-truth.txt
WER: 0.0000 (0.00%)
Reference words: 108
Hypothesis words: 108
$ VERBOSE=1 scripts/measure-wer.sh tests/fixtures/scanned/letter/letter-300dpi-ground-truth.txt tests/fixtures/scanned/letter/letter-300dpi-ground-truth.txt
WER: 0.0000 (0.00%)
Reference words: 227
Hypothesis words: 227
$ VERBOSE=1 scripts/measure-wer.sh tests/fixtures/scanned/form/form-300dpi-ground-truth.txt tests/fixtures/scanned/form/form-300dpi-ground-truth.txt
WER: 0.0000 (0.00%)
Reference words: 281
Hypothesis words: 281
Ground Truth Content Samples
Invoice (108 words):
- Standard business invoice format with line items
- Includes: Invoice #INV-2026-001, dates, from/to addresses, item table with quantities/prices, subtotal/tax/total
- Payment terms and footer
Letter (227 words):
- Business correspondence regarding service agreement changes
- Standard letter format with sender/recipient info
- Numbered list of improvements, pricing details, contact information
- Professional business letter structure
Form (281 words):
- Employment application form with multiple sections
- Personal information, availability, education, employment history, references
- Mix of fill-in blanks and checkboxes
- Certification and office-use sections
Acceptance Criteria Status
- ✅ 3 fixtures exist in
tests/fixtures/scanned/(invoice, letter, form) - ✅ Each has a PDF + ground truth .txt file
- ✅ Running
scripts/measure-wer.shon each with perfect OCR gives WER = 0% - ✅ Each PDF is ~300 DPI
Implementation Notes
The fixtures were generated using the synthetic generation pipeline in tests/fixtures/scanned/generate_scanned_fixtures.py rather than being sourced from public-domain archives. The generation process:
- Creates vector PDFs from ground truth text using reportlab
- Rasterizes the vector PDFs at 300 DPI using pdftoppm/img2pdf
- Produces actual scanned image data embedded in PDF containers
This approach produces equivalent scanned content suitable for OCR testing while maintaining control over the ground truth content. The resulting PDFs contain actual image data at the target DPI, meeting the requirement for "actual scanned content (not text-embedded) to test real OCR."
Files Modified
No modifications required - fixtures already exist from prior beads:
- Invoice:
feat(bf-337i2): create 300 DPI invoice OCR fixture(a68d01c7) - Letter: Prior beads (
8473941e,de2696b9) - Form:
docs(bf-7mvji): add verification note for form OCR fixture(03ea2e28)
Test Commands
# Verify DPI for all fixtures
for f in invoice letter form; do
echo "=== $f ==="
pdfimages -list tests/fixtures/scanned/$f/${f}-300dpi.pdf
done
# Verify WER script with perfect OCR (self-comparison)
for f in invoice letter form; do
echo "=== $f WER ==="
VERBOSE=1 scripts/measure-wer.sh \
tests/fixtures/scanned/$f/${f}-300dpi-ground-truth.txt \
tests/fixtures/scanned/$f/${f}-300dpi-ground-truth.txt
done
# Verify ground truth content
for f in invoice letter form; do
echo "=== $f ground truth ==="
head -10 tests/fixtures/scanned/$f/${f}-300dpi-ground-truth.txt
done
Conclusion
Bead bf-58jnx acceptance criteria are fully satisfied. All required fixtures exist, are properly formatted as 300 DPI scanned content, include ground truth transcripts, and validate correctly with the WER measurement script.