|
| 1 | +--- |
| 2 | +layout: default-layout |
| 3 | +title: Dynamsoft Capture Vision Architecture |
| 4 | +description: The introduction of Dynamsoft Capture Vision Architecture for Android. |
| 5 | +needAutoGenerateSidebar: true |
| 6 | +needGenerateH3Content: true |
| 7 | +noTitleIndex: false |
| 8 | +--- |
| 9 | + |
| 10 | +# Architecture of Dynamsoft Capture Vision |
| 11 | + |
| 12 | +Dynamsoft Capture Vision (DCV) is a powerful SDK architecture designed to adapt to a variety of image-processing scenarios, enabling the extraction of useful information from images. Its structure accommodates both entry-level needs and sophisticated business logic. The design allows developers to quickly build conceptual prototypes within minutes while also supporting complex customizations for more demanding tasks. In this article, we'll take a deep dive into the DCV architecture that makes this flexibility possible. |
| 13 | + |
| 14 | + |
| 15 | + |
| 16 | +## Router - Capture Vision Router (CVR) |
| 17 | + |
| 18 | + |
| 19 | + |
| 20 | +`CaptureVisionRouter` is the active coordinator in the DCV architecture. The other modules are mostly passive: they do not pull images or run on their own, but wait for CVR to invoke them as part of a capture workflow. |
| 21 | + |
| 22 | +In practice, CVR is responsible for: |
| 23 | + |
| 24 | +- Accepting images from a configured input source. |
| 25 | +- Loading and applying templates or simplified settings. |
| 26 | +- Scheduling one or more recognition or parsing tasks. |
| 27 | +- Returning standard results and optional intermediate results to registered receivers. |
| 28 | + |
| 29 | +--------------- |
| 30 | + |
| 31 | +## Input |
| 32 | + |
| 33 | +The standard input abstraction in DCV is `ImageSourceAdapter` (ISA). CVR does not depend on a specific camera or file source. As long as the source follows the ISA contract, CVR can consume it. |
| 34 | + |
| 35 | +This is important because it keeps image acquisition decoupled from recognition. You can start with a built-in input source, or work with your own source without changing the recognition pipeline. |
| 36 | + |
| 37 | +Common input choices include: |
| 38 | + |
| 39 | +- `CameraEnhancer` for scanning from a live camera preview. |
| 40 | +- `DirectoryFetcher` for processing images from a folder or batch source. |
| 41 | + |
| 42 | +For most Android apps, `CameraEnhancer` is the default choice because it already integrates camera control, preview, and image enhancement. This is also the setup used in [Build your APP with Foundational APIs](../../foundational-guide.md). |
| 43 | + |
| 44 | +--------------- |
| 45 | + |
| 46 | +## Functional modules |
| 47 | + |
| 48 | +- **Dynamsoft Barcode Reader (DBR)** |
| 49 | +- **Dynamsoft Code Parser (DCP)** |
| 50 | + |
| 51 | +Functional modules are the execution units in DCV. They do not actively pull images or schedule work by themselves. Instead, they execute a series of tasks arranged by CVR in the selected workflow. |
| 52 | + |
| 53 | +The functional modules in this architecture are: |
| 54 | + |
| 55 | +- **DBR (Dynamsoft Barcode Reader)**: Detects and decodes barcodes from images or video frames. |
| 56 | +- **DCP (Dynamsoft Code Parser)**: Parses supported encoded strings into structured, human-readable data. |
| 57 | + |
| 58 | +--------------- |
| 59 | + |
| 60 | +## Output - Result Receivers |
| 61 | + |
| 62 | +- Captured Result Receiver |
| 63 | +- Intermediate Result Receiver |
| 64 | + |
| 65 | +CVR exposes results through receiver interfaces instead of returning only a single final object. This makes the output side as flexible as the input side. |
| 66 | + |
| 67 | +### Captured Result Receiver |
| 68 | + |
| 69 | +`CapturedResultReceiver` is the standard API for receiving capture results from CVR. In a normal workflow, this is the primary receiver used by the application to obtain the results produced by the configured functional modules. |
| 70 | + |
| 71 | +For example, results returned through `CapturedResultReceiver` can include: |
| 72 | + |
| 73 | +- Barcode results produced by DBR. |
| 74 | +- Parsed results produced by DCP. |
| 75 | +- Original images. |
| 76 | + |
| 77 | +In other words, `CapturedResultReceiver` is the standard place to receive the main output of the DCV workflow. |
| 78 | + |
| 79 | +### Intermediate Result Receiver |
| 80 | + |
| 81 | +Before a final `CapturedResult` is produced, the algorithm processes the image through a large number of stages. Each stage completes a specific part of the workflow and may generate its own output. These outputs are the intermediate results. |
| 82 | + |
| 83 | +If the output of `CapturedResult` marks the end of processing for the entire image, then the output of an intermediate result marks the end of the corresponding stage. Because intermediate results are produced in real time as the workflow advances, users can inspect the output of a stage, modify it if needed, and let that change affect the final `CapturedResult`. |
| 84 | + |
| 85 | +`IntermediateResultReceiver` is the API used to receive these stage-level results. It is mainly used in advanced scenarios where you need visibility into the internal stages or want to introduce additional logic into the processing flow. |
| 86 | + |
| 87 | +Use it when you want to: |
| 88 | + |
| 89 | +- Trace and observe the result of each stage when troubleshooting recognition issues. |
| 90 | +- Manually intervene in the processing flow and introduce extra logic to improve the recognition result. |
| 91 | +- Obtain additional information that is not available through `CapturedResultReceiver`. |
| 92 | + |
| 93 | +If you mainly care about the standard outputs of the workflow, `CapturedResultReceiver` is usually enough. If you need more processing-stage data, combine it with intermediate results. Related topics: |
| 94 | + |
| 95 | +- [Understanding Barcode Results](understand-barcode-results.md) |
| 96 | +- [Get Original Image](../capabilities/get-original-image.md) |
| 97 | + |
| 98 | +--------------- |
| 99 | + |
| 100 | +## Next Steps |
| 101 | + |
| 102 | +- Read [Parameters, Settings & Templates](parameters-and-templates.md) to understand how workflows are configured. |
| 103 | +- Read [Understanding Barcode Results](understand-barcode-results.md) to understand what CVR returns. |
| 104 | +- Read [Build your APP with Foundational APIs](../../foundational-guide.md) to see this architecture mapped to Android code. |
| 105 | +- Read [Configure Simplified Settings](../capabilities/config-simplified-settings.md) or [Initialize Customized Templates](../capabilities/init-customized-template.md) when you are ready to customize the pipeline. |
| 106 | + |
| 107 | +--------------- |
0 commit comments