ZEISS Vision: Orchestrating Document Data Extraction with Dapr Agents
ZEISS built a production-grade document extraction pipeline using Dapr Agents and Dapr Workflow, going from prototype to production in just two months, with zero labelled training data and recognition results on par with a specialized machine learning system.
Company Background
ZEISS is a German optics and optoelectronics manufacturer, with a global reputation for precision in lenses, microscopes, medical technology, and industrial measurement systems. In the Vision Care segment, ZEISS manufactures prescription lenses worn by patients worldwide. Their manufacturing processes demand exacting accuracy; a fraction of a dioptre in the wrong direction produces a lens that doesn't work for the patient.
Overview
ZEISS faced a deceptively hard problem at the start of their lens manufacturing pipeline: the input data was a mess. Fabian Steinbach, Software Architect at ZEISS, describes the challenge:
"To manufacture precision lenses, you need structured optical data, but sometimes all we have is a photo of a hand-scribbled note."
Prescription documents arrive in every imaginable format: handwritten notes, typed forms, multiple languages, and different writing systems. Getting structured optical data out of those documents accurately and reliably is critical. A wrong value means a wrong lens.
To solve this, ZEISS built a production-grade document extraction pipeline using Dapr Agents and Dapr Workflow, going from prototype to production in just two months, with zero labelled training data and recognition results on par with a specialized machine learning system.

Optical Character Recognition (OCR) Pipeline Solution Architecture
The Problem
Prescription documents received from patients by ZEISS are entirely unstandardized. They range from hand-scribbled notes to typed forms, spanning multiple languages and writing systems, much like the paperwork a patient receives from their doctor. The stakes are high: extracting the wrong value doesn't just cause a software error; it produces the wrong lens for a patient. Manual processing was not a scalable option, so ZEISS set out to automate the extraction reliably.
Why Dapr Agents?
Modern AI models proved surprisingly capable of interpreting messy prescription documents. But raw model capability wasn't enough to ship to production. Steinbach identified three non-negotiable requirements for ZEISS: control, reliability, and flexibility.
1. Control
ZEISS deliberately avoided a fully autonomous agent setup. Instead, the team constrained the AI within a structured Dapr Workflow: pre-processing → OCR → targeted LLM/agent calls. This gave ZEISS predictable, auditable results rather than the unpredictable outputs a free-running agent might produce.
2. Reliability
Dapr Workflow's durable execution model persists state after every step. If something fails mid-process, ZEISS's workflow resumes from where it left off — it doesn't start over.
"State is persisted after each step. If something goes wrong midway through, the process doesn't start over again. So an expensive, already-completed OCR task doesn't run again. That saves time and cost."
— Fabian Steinbach, Software Architect, ZEISS
3. Flexibility
The AI model landscape evolves quickly. By using Dapr's Conversation API building block, ZEISS can swap in a newer or cheaper model by changing configuration alone — no code changes required.
"Even when the model landscape changes, the workflow should stay stable. If a better or cheaper model appears tomorrow, we can use Dapr's conversation building block and just change the configuration."
— Fabian Steinbach, Software Architect, ZEISS
Architecture
The architecture is designed for future-proofing and scale. By leveraging event-driven scaling with KEDA and decoupled microservices via Dapr, the system is built to seamlessly absorb high-volume, global order loads as new processes are continuously migrated to the new platform. Dive deeper into the architecture.
Key Takeaways
Steinbach distilled the ZEISS project into three lessons that apply well beyond their use case:
-
Constrain the AI. A workflow-constrained agent outperformed a free-running one for ZEISS's use case. Guardrails aren't a limitation — they're a feature.
-
Use the right tool for the job. ZEISS mixed specialized OCR models, general-purpose LLMs, and deterministic logic. If a plain function can do the job, an LLM shouldn't be used.
-
Decouple model selection from code. Changing models via config — not code — means ZEISS can always leverage the best available model without engineering overhead.
Results
| Metric | Outcome |
|---|---|
| Development time to production | 2 months |
| Labelled training data required | Zero |
| Recognition accuracy | On par with a specialized ML system |
Watch
You can watch the video of Fabian Steinbach at KubeCon EU 2026 Keynote — ZEISS Agents Case Study
Key Resources
Ready to get started?
See how Diagrid can help you run Dapr in production with confidence.


