VeriDoc Studio runs a full KYC document-intelligence pipeline on-device: OCR extraction, Verhoeff checksum validation, error-level forgery analysis and neural face detection — no upload, no server, no tracking.
Every stage produces auditable signals that roll up into a single trust score — the same shape as production KYC systems.
Tesseract LSTM compiled to WebAssembly reads names, dates and ID numbers straight from the document image — fully offline.
Aadhaar numbers are verified with the actual Verhoeff algorithm; PAN structure, dates and names get strict format checks. OCR alone is never trusted.
Error Level Analysis recompresses the image and maps compression inconsistencies into a tamper heatmap plus a suspicion score.
An UltraFace ONNX model running on onnxruntime-web locates ID photos and webcam faces on-device.
Weighted scoring across validation, fields, forgery, quality and face signals — exportable as a JSON verification report.
Every model sits behind a pluggable registry. Train your own PyTorch models with the included ml/ pipeline and drop them in as ONNX.
Drop a document — or use the bundled specimen IDs — and watch the pipeline run stage by stage.
Image quality scoring: sharpness, contrast, resolution — low-quality captures are flagged before OCR.
WASM OCR extracts raw text; field parsers pull name, DOB, gender and ID numbers; keywords classify the document type.
Verhoeff checksums, PAN format rules, ELA forgery heatmaps and neural face detection produce independent trust signals.
Signals combine into a weighted trust score with a VERIFIED / REVIEW / SUSPECT verdict and a downloadable JSON report.
The heuristic engines shipping today are placeholders by design. A complete PyTorch pipeline lives in ml/: synthetic ID-card data generation, document-type classifier training, forgery-classifier scaffold and one-command ONNX export. Swap any stage by registering your model — the UI never changes.
View source on GitHub// every stage resolves through the registry ModelRegistry.register("doctype-classifier", () => ort.InferenceSession.create( "vendor/models/doctype.onnx")); # train it yourself, then export python ml/synth_data.py --n 2000 python ml/train_doctype.py --epochs 10 python ml/export_onnx.py