diff --git a/_config.yml b/_config.yml index 46f58364..403debc2 100644 --- a/_config.yml +++ b/_config.yml @@ -10,7 +10,6 @@ useVersionTree: true useJSVersionV3: true introduction: /barcode-reader/docs/core/introduction/ -comparison_tools: /barcode-reader/docs/core/introduction/comparison-tools/ programming: /barcode-reader/docs/core/programming/ features: /barcode-reader/docs/core/programming/features/ diff --git a/_includes/release-notes/product-highlight-10.0.0.md b/_includes/release-notes/product-highlight-10.0.0.md deleted file mode 100644 index fc871236..00000000 --- a/_includes/release-notes/product-highlight-10.0.0.md +++ /dev/null @@ -1,16 +0,0 @@ - -`DynamsoftBarcodeReader` SDK has been revamped to integrate with `DynamsoftCaptureVision (DCV)` architecture, which is newly established to aggregate the features of functional products powered by Dynamsoft. The features are designed to be pluggable, customizable and interactable. In addition, the functional products share the computation so that their processing speed is much higher than working individually. - -* `DynamsoftCaptureVision` architecture consists of: - * `ImageSourceAdapter(ISA)`, the standard input interface for you to convert image data from different sources into the standard input image data. In addition, `ISA` incorporates an image buffer management system that allows instant access to the buffered image data. - * `CaptureVisionRouter (CVR)`, an engine for you to update templates, retrieve images from `ISA`, coordinate corresponding functional products and dispatch the results to the receivers. - * Functional products that perform image processing, content understanding and semantic processing. The functional products are pluggable and passively called by CVR when they are required. - * Result receiver interfaces. You can implement `CapturedResultReceiver (CRR)` to receive the `CapturedResults` that output when the processing on an image is finalized. You can also implement `IntermediateResultReceiver (IRR)` to get timely results from different stages of the workflow. -* The parameter template system has been comprehensively upgraded. - * Multiple algorithm task settings are available. You can define barcode decoding, label recognizing, document scanning and semantic processing tasks in one template file. - * Extended the feature of the ROI system. By configuring the `target ROI` parameters, you can not only specify an `ROI` on the original image but also define the dependencies of the algorithm tasks. This feature enables you to customize the workflow when processing complex scenarios. - * The image processing parameters are separated from the task parameters so that the template settings become more clear and concise. -* The `intermediate result` system has been improved. - * Achieved the `intermediate result` sharing between different functional products. The results that have the same image source and processing parameters are directly reused, which speeds up the image processing workflow. You don’t need to add any additional code to enable the `intermediate result` sharing. The library can recognize all the reusable results automatically based on the template file you uploaded. - * The readability and interactivity of the `intermediate results` are enhanced. `IntermediateResultReceiver` allows you to receive up to 27 different types of `Intermediate results`. You can clearly read which stage of the algorithm each result is output from. In addition, `IntermediateResultManager` allows you to intervene in the workflows by modifying the `intermediate results`. - diff --git a/_includes/release-notes/product-highlight-10.2.0.md b/_includes/release-notes/product-highlight-10.2.0.md deleted file mode 100644 index fa9aaefb..00000000 --- a/_includes/release-notes/product-highlight-10.2.0.md +++ /dev/null @@ -1,5 +0,0 @@ - -* Introduced the capability for users to influence the image processing process by altering intermediate results. Users can now clone, edit, and substitute intermediate result units within the callback function of each type. Subsequent operations will then proceed based on the updated unit. -* Introduced a feature for multi-condition filtering across products. Users can now specify filtering criteria for the task results of a `TargetROIDef` by implementing an `OutputTaskSetting` based on the task results of varying products from descendant `TargetROIDef` objects. -* Enhanced the `Offset` parameter in `TargetROIDef`. Users now have the capability to meticulously customize components of the coordinate system, including the origin, X-axis, and Y-axis, for precise offset calculation. - diff --git a/_includes/release-notes/product-highlight-8.6.0.md b/_includes/release-notes/product-highlight-8.6.0.md deleted file mode 100644 index 37093c1f..00000000 --- a/_includes/release-notes/product-highlight-8.6.0.md +++ /dev/null @@ -1,5 +0,0 @@ - -- Improved the confidence calculating algorithm for 1D barcodes. Misreading rate of results with confidence between 30-100 has been significantly reduced. -- Improved the reading speed on clear images by implementing a new deblur mode `DM_BASED_ON_LOC_BIN`. - - diff --git a/_includes/release-notes/product-highlight-8.8.0.md b/_includes/release-notes/product-highlight-8.8.0.md deleted file mode 100644 index ddd45e1b..00000000 --- a/_includes/release-notes/product-highlight-8.8.0.md +++ /dev/null @@ -1,6 +0,0 @@ - -- Added a new localization mode `ONED_FAST_SCAN`, which significantly improved the localization speed for 1D barcodes. -- Added the ability to specify barcode width, height, angle to improve the recognition speed if you have advance information about barcodes. -- Optimized the logic of confidence scoring for 2D barcodes. The 2D barcode results with confidence greater than 30 are more accurate. - - diff --git a/_includes/release-notes/product-highlight-8.9.0.md b/_includes/release-notes/product-highlight-8.9.0.md deleted file mode 100644 index 21931124..00000000 --- a/_includes/release-notes/product-highlight-8.9.0.md +++ /dev/null @@ -1,4 +0,0 @@ - -- Preset templates are available for users to configure the `PublicRuntimeSettings` parameters. Users can set the template via the method `updateRuntimeSettings` by specifying an `EnumPresetTemplate` member. - - diff --git a/_includes/release-notes/product-highlight-9.0.0.md b/_includes/release-notes/product-highlight-9.0.0.md deleted file mode 100644 index 8d726ceb..00000000 --- a/_includes/release-notes/product-highlight-9.0.0.md +++ /dev/null @@ -1,7 +0,0 @@ - -- Simplified the license activation steps. Different license activation APIs are integrated into `initLicense` method. -- Added support for **Pharmacode**. -- Added support for **Code 11**, a 1D format. -- Deformation resisting modes `DRM_BROAD_WARP`, `DRM_LOCAL_REFERENCE` and `DRM_DEWRINKLE` are optimized and detached from `DRM_GENERAL`. Users can specify a more effective deformation resisting mode when processing **QRCode** and **DataMatrix codes**. -- Optimized the confidence scoring system for **PDF417 codes**. - diff --git a/_includes/release-notes/product-highlight-9.2.0.md b/_includes/release-notes/product-highlight-9.2.0.md deleted file mode 100644 index 473f946f..00000000 --- a/_includes/release-notes/product-highlight-9.2.0.md +++ /dev/null @@ -1,5 +0,0 @@ - -- Barcode boundary-seeking algorithm is refactored to improve stability. -- Pharmacode decoding is optimized to improve accuracy. -- The function of device-alias is added to allow users to give each device a readable name. For end-users and administrators, this makes it more friendly to distinguish between devices about license usage statistics. - diff --git a/_includes/release-notes/product-highlight-9.4.0.md b/_includes/release-notes/product-highlight-9.4.0.md deleted file mode 100644 index 15398980..00000000 --- a/_includes/release-notes/product-highlight-9.4.0.md +++ /dev/null @@ -1,4 +0,0 @@ - -- **DotCode** decoding has been improved by optimizing the localization and decoding algorithm. -- **Stacked**, **skewed** or **perspective distorted OneD barcode** decoding has been improved. - diff --git a/_includes/release-notes/product-highlight-9.6.0.md b/_includes/release-notes/product-highlight-9.6.0.md deleted file mode 100644 index acbf9d82..00000000 --- a/_includes/release-notes/product-highlight-9.6.0.md +++ /dev/null @@ -1,10 +0,0 @@ - -- **Image orientation** handling is supported by a new feature. With the new feature, you can: - - Get a **TranformationMatrix** along with the barcode location result. - - Implement coordinates transformation on the barcode location result with the **TransformationMatrix**. -- **DotCode** decoding is improved by optimizing the localization of DotCodes that are close to one another. -- **EAN8 barcode** decoding is improved by honing the accuracy of localization algorithms. -- **QR code** localizing is improved by reducing the mis-assemble rate of the finder patterns when using the localization mode LM_CONNECTED_BLOCK or LM_SCAN_DIRECTLY, which are designed for speed. The mis-assembling only occurs when there exist dense QR codes on the same image. -- **Mirrored rectangular DataMatrix barcode** is supported by implementing `MirrorMode` when localizing the barcodes. -- Deformed barcode decoding is improved by extending the supported modes and mode arguments of `DeformationResistingModes`. - diff --git a/_includes/sidelist-parameters-organization.html b/_includes/sidelist-parameters-organization.html index 77ef82a1..6d4139cd 100644 --- a/_includes/sidelist-parameters-organization.html +++ b/_includes/sidelist-parameters-organization.html @@ -259,7 +259,9 @@
  • EnableAddOnCode
  • EnableDataMatrixECC000-140
  • EnableQRCodeModel1
  • +
  • ExpectedBarcodesCount
  • FindUnevenModuleBarcode
  • +
  • HasVerticalQuietZone
  • HeadModuleRatio
  • IncludeImpliedAI01
  • IncludeTrailingCheckDigit
  • @@ -292,7 +294,8 @@
  • Global Parameter
  • diff --git a/introduction/comparison-tools/assets/batch-tool/batch-decode-started.png b/introduction/comparison-tools/assets/batch-tool/batch-decode-started.png deleted file mode 100644 index 6a09178d..00000000 Binary files a/introduction/comparison-tools/assets/batch-tool/batch-decode-started.png and /dev/null differ diff --git a/introduction/comparison-tools/assets/batch-tool/create-barcode-reading-templates.png b/introduction/comparison-tools/assets/batch-tool/create-barcode-reading-templates.png deleted file mode 100644 index 06590c46..00000000 Binary files a/introduction/comparison-tools/assets/batch-tool/create-barcode-reading-templates.png and /dev/null differ diff --git a/introduction/comparison-tools/assets/batch-tool/create-templates-subdirectory.png b/introduction/comparison-tools/assets/batch-tool/create-templates-subdirectory.png deleted file mode 100644 index 904a8f48..00000000 Binary files a/introduction/comparison-tools/assets/batch-tool/create-templates-subdirectory.png and /dev/null differ diff --git a/introduction/comparison-tools/assets/batch-tool/daemon-execution-interface.png b/introduction/comparison-tools/assets/batch-tool/daemon-execution-interface.png deleted file mode 100644 index a3d6d6a3..00000000 Binary files a/introduction/comparison-tools/assets/batch-tool/daemon-execution-interface.png and /dev/null differ diff --git a/introduction/comparison-tools/assets/batch-tool/guardian-config-default.png b/introduction/comparison-tools/assets/batch-tool/guardian-config-default.png deleted file mode 100644 index fcfb89c5..00000000 Binary files a/introduction/comparison-tools/assets/batch-tool/guardian-config-default.png and /dev/null differ diff --git a/introduction/comparison-tools/assets/batch-tool/testing-results.png b/introduction/comparison-tools/assets/batch-tool/testing-results.png deleted file mode 100644 index 760a083d..00000000 Binary files a/introduction/comparison-tools/assets/batch-tool/testing-results.png and /dev/null differ diff --git a/introduction/comparison-tools/batch-test.md b/introduction/comparison-tools/batch-test.md deleted file mode 100644 index b450520a..00000000 --- a/introduction/comparison-tools/batch-test.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -layout: default-layout -title: Dynamsoft Barcode Reader Comparison Tools - Batch Test -description: This page shows how to test barcode reading performance. -keywords: batch test, comparison tools -needAutoGenerateSidebar: true -permalink: /introduction/comparison-tools/batch-test.html ---- -# How to Batch Test Barcode Reading Performance - -This guide introduces how to use the BatchDecode program provided by Dynamsoft to test barcode reading performance. With this tool, you can run a batch barcode reading process on images in a specified directory and get decoding results plus performance metrics. - -## Download the Program - -If you haven't got the program yet, [download the package from here](https://download2.dynamsoft.com/samples/dbr/dbr_cpp_performanceevaluation.zip) and unpack it into the directory of your choice. - -## Configure and Run the Daemon Tool - -A daemon tool is designed to monitor the running state of the BatchDecode program, restart and continue the process when it crashes or becomes unresponsive. Before starting the daemon tool, please open `GuardianConfig.ini` and configure the settings first. - - ApplicationPath: Specify the full path of the BatchDecode program. - - ApplicationArgument: Specify the image folder formatted as "-i " and output folder formatted as "-o ". - - ApplicationLogDir: Specify the full path of the folder where the BatchDecode program outputs the result. - - TimeOutMin: Sets the timeout value. If the BatchDecode program has no new output for the specified time (in minute), it will be restarted. - -After saving the above settings, open a console window and run the daemon tool, `BatchDecodeProjectGuardian`, to start the testing. - -## Interpretation of the Report - -After the program has executed, you will see the performance testing report file, DBR_T_DEFAULT_xxxxx.csv, in the output directory. Open the file and you will see two sections: - -- The statistics section - -|Field |Description| -|--------|------| -|Total Image Count |Number of image files processed | -|Images with Barcodes Recognized | Number of image files with barcodes recognized | -|Total Barcode Count |Total barcodes recognized | -|Time Cost of All Images (ms) |Total time spent on reading barcodes from all images | -|Recognition Rate |Percentage of images with barcodes recognized, i.e., Images with Barcodes Recognized / Total Image Count| -|Avg Time of Total Scan Per Image (ms) |The average time spent decoding an image file, i.e., Total Time Spent for Recognition/ Total Image Count| -|Avg Time of Total Scan Per Barcode (ms) |The average time spent decoding a barcode, i.e., Total Time Cost of All Images/ Total Barcode Count. | -|Time Cost of Images with Barcodes Recognized (ms) |Total time spent decoding images with barcodes recognized| -|Avg Time of Successful Scan Per Image (ms) |The average time spent decoding an image file with barcodes found, i.e., Time Spent for Recognition Images with Barcodes Found/ Images with Barcodes Recognized| - -- The details section - -|Field |Description| -|--------|------| -|No. |ID of the source image file | -|Image Source |Path of the source image file | -|Time Cost (ms) |The time (in ms) spent reading barcodes in the file. | -|Barcode Count |Count of barcodes decoded in the file | -|Barcode Hex |Hex encoding of all the decoded barcode content. Mainly used for comparing different identification results. | -|Barcode Text |The content of the barcode identified. If the recognition result cannot be fully displayed due to the output format and/or word count limit, the field `Original` will be set to No.| -|Original|If the value of this field is No, you can refer to the 'Note' section at the bottom of the file to view the details of the barcode. | - -## Try Out Multiple Parameters - -To evaluate performances between different parameters, you can create a subdirectory `templates` in the directory where the BatchDecode program exists, then place the template files into the `templates` directory. Rerun the above configured daemon tool and then you will get reports for each template named as DBR_T__xxxxx.csv. - -## Integrate Other SDKs - -The BatchDecode program can be easily extended to test other barcode reader SDK. The main steps are as below: - -- Download the source code of the BatchDecode program from [here](https://github.com/Dynamsoft/barcode-reader-c-cpp-samples/tree/main/samples/C%2B%2B/Performance/BatchDecode) -- Create a subclass (ClassA as example) of Class `CBarcodeFileReader` -- Implement method ClassA::ReadFileBarcodes to decode image file and construct result info referring to `CDbrBarcodeFileReader::ReadFileBarcodes` \ No newline at end of file diff --git a/introduction/comparison-tools/index.md b/introduction/comparison-tools/index.md deleted file mode 100644 index bc68fce4..00000000 --- a/introduction/comparison-tools/index.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -layout: default-layout -title: Dynamsoft Barcode Reader Comparison Tools - Main Page -description: This page shows Dynamsoft Barcode Reader Comparison Tools. -keywords: comparison tools -needAutoGenerateSidebar: true -breadcrumbText: Comparison Tools -permalink: /introduction/comparison-tools/ ---- - -# How to test the barcode reading performance - -Dynamsoft provides tools for measuring the performance of barcode reading operations. - -For now, there is only one tool for batch test. - -- [Performance Measurement - Batch Test Tool]({{ site.comparison_tools }}batch-test.html) - -More tools will be posted here as they become available. - -{%- comment -%} -- [Interactive Test]({{ site.comparison_tools }}interactive-test.html) -- [Test Set Images]({{ site.comparison_tools }}test-set-images.html) -{%- endcomment -%} diff --git a/introduction/comparison-tools/interactive-test.md b/introduction/comparison-tools/interactive-test.md deleted file mode 100644 index e59145e2..00000000 --- a/introduction/comparison-tools/interactive-test.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -layout: default-layout -title: Dynamsoft Barcode Reader Comparison Tools - Interactive Test -description: This page shows Dynamsoft Barcode Reader Comparison Tools - Interactive Test. -keywords: interactive test, comparison tools -needAutoGenerateSidebar: false -permalink: /introduction/comparison-tools/interactive-test.html ---- diff --git a/introduction/comparison-tools/test-set-images.md b/introduction/comparison-tools/test-set-images.md deleted file mode 100644 index 20c5ffad..00000000 --- a/introduction/comparison-tools/test-set-images.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -layout: default-layout -title: Dynamsoft Barcode Reader Comparison Tools - Test Set Images -description: This page shows Dynamsoft Barcode Reader Comparison Tools - Test Set Images. -keywords: test set images, comparison tools -needAutoGenerateSidebar: false -permalink: /introduction/comparison-tools/test-set-images.html ---- diff --git a/license-activation/assets/set-full-license-2/ActivationContinue.png b/license-activation/assets/set-full-license-2/ActivationContinue.png deleted file mode 100644 index 7b1b64eb..00000000 Binary files a/license-activation/assets/set-full-license-2/ActivationContinue.png and /dev/null differ diff --git a/license-activation/assets/set-full-license-2/ConfigLicense.png b/license-activation/assets/set-full-license-2/ConfigLicense.png deleted file mode 100644 index fe6fe7c1..00000000 Binary files a/license-activation/assets/set-full-license-2/ConfigLicense.png and /dev/null differ diff --git a/license-activation/assets/set-full-license-2/ConfigLicense8.6.png b/license-activation/assets/set-full-license-2/ConfigLicense8.6.png deleted file mode 100644 index 3b55c792..00000000 Binary files a/license-activation/assets/set-full-license-2/ConfigLicense8.6.png and /dev/null differ diff --git a/license-activation/assets/set-full-license-2/FullLicenseList.png b/license-activation/assets/set-full-license-2/FullLicenseList.png deleted file mode 100644 index eaba027c..00000000 Binary files a/license-activation/assets/set-full-license-2/FullLicenseList.png and /dev/null differ diff --git a/license-activation/assets/set-full-license-2/SetAlias.png b/license-activation/assets/set-full-license-2/SetAlias.png deleted file mode 100644 index 24b6e6e1..00000000 Binary files a/license-activation/assets/set-full-license-2/SetAlias.png and /dev/null differ diff --git a/license-activation/assets/set-full-license-2/SetAlias8.6.png b/license-activation/assets/set-full-license-2/SetAlias8.6.png deleted file mode 100644 index 98f2bb47..00000000 Binary files a/license-activation/assets/set-full-license-2/SetAlias8.6.png and /dev/null differ diff --git a/license-activation/assets/set-full-license-3/Activate.png b/license-activation/assets/set-full-license-3/Activate.png deleted file mode 100644 index 94e17808..00000000 Binary files a/license-activation/assets/set-full-license-3/Activate.png and /dev/null differ diff --git a/license-activation/assets/set-full-license-3/Activate2.png b/license-activation/assets/set-full-license-3/Activate2.png deleted file mode 100644 index b8e3032a..00000000 Binary files a/license-activation/assets/set-full-license-3/Activate2.png and /dev/null differ diff --git a/license-activation/assets/set-full-license-3/Activate3.png b/license-activation/assets/set-full-license-3/Activate3.png deleted file mode 100644 index 8f9a2ae9..00000000 Binary files a/license-activation/assets/set-full-license-3/Activate3.png and /dev/null differ diff --git a/license-activation/assets/set-full-license-3/Activate4.png b/license-activation/assets/set-full-license-3/Activate4.png deleted file mode 100644 index 2134d48e..00000000 Binary files a/license-activation/assets/set-full-license-3/Activate4.png and /dev/null differ diff --git a/license-activation/assets/set-full-license-3/Activate5.png b/license-activation/assets/set-full-license-3/Activate5.png deleted file mode 100644 index bfc198ff..00000000 Binary files a/license-activation/assets/set-full-license-3/Activate5.png and /dev/null differ diff --git a/license-activation/assets/set-full-license/ActivatedKey2.png b/license-activation/assets/set-full-license/ActivatedKey2.png deleted file mode 100644 index 12d8acfb..00000000 Binary files a/license-activation/assets/set-full-license/ActivatedKey2.png and /dev/null differ diff --git a/license-activation/assets/set-full-license/ActivatedKey_Used2.png b/license-activation/assets/set-full-license/ActivatedKey_Used2.png deleted file mode 100644 index 06a86bd6..00000000 Binary files a/license-activation/assets/set-full-license/ActivatedKey_Used2.png and /dev/null differ diff --git a/license-activation/assets/set-full-license/ActivationPage.png b/license-activation/assets/set-full-license/ActivationPage.png deleted file mode 100644 index 2c1dec61..00000000 Binary files a/license-activation/assets/set-full-license/ActivationPage.png and /dev/null differ diff --git a/license-activation/assets/set-full-license/Add2.png b/license-activation/assets/set-full-license/Add2.png deleted file mode 100644 index 419cde69..00000000 Binary files a/license-activation/assets/set-full-license/Add2.png and /dev/null differ diff --git a/license-activation/assets/set-full-license/ContinueActivation2.png b/license-activation/assets/set-full-license/ContinueActivation2.png deleted file mode 100644 index d93067f6..00000000 Binary files a/license-activation/assets/set-full-license/ContinueActivation2.png and /dev/null differ diff --git a/license-activation/assets/set-full-license/DownloadLicense.png b/license-activation/assets/set-full-license/DownloadLicense.png deleted file mode 100644 index 42917cb8..00000000 Binary files a/license-activation/assets/set-full-license/DownloadLicense.png and /dev/null differ diff --git a/license-activation/assets/set-full-license/LicensePage.png b/license-activation/assets/set-full-license/LicensePage.png deleted file mode 100644 index fc12f7c7..00000000 Binary files a/license-activation/assets/set-full-license/LicensePage.png and /dev/null differ diff --git a/license-activation/assets/set-full-license/MachineID_Linux.png b/license-activation/assets/set-full-license/MachineID_Linux.png deleted file mode 100644 index 23881e03..00000000 Binary files a/license-activation/assets/set-full-license/MachineID_Linux.png and /dev/null differ diff --git a/license-activation/assets/set-full-license/MachineID_Windows.png b/license-activation/assets/set-full-license/MachineID_Windows.png deleted file mode 100644 index a0ea9a11..00000000 Binary files a/license-activation/assets/set-full-license/MachineID_Windows.png and /dev/null differ diff --git a/license-activation/assets/set-full-license/ManuallyActivate2.png b/license-activation/assets/set-full-license/ManuallyActivate2.png deleted file mode 100644 index 3f3e0018..00000000 Binary files a/license-activation/assets/set-full-license/ManuallyActivate2.png and /dev/null differ diff --git a/license-activation/assets/set-full-license/NewLicense2.png b/license-activation/assets/set-full-license/NewLicense2.png deleted file mode 100644 index 4754145d..00000000 Binary files a/license-activation/assets/set-full-license/NewLicense2.png and /dev/null differ diff --git a/license-activation/concurrent-instance-license.md b/license-activation/concurrent-instance-license.md deleted file mode 100644 index dbb1387d..00000000 --- a/license-activation/concurrent-instance-license.md +++ /dev/null @@ -1,83 +0,0 @@ ---- -layout: default-layout -title: Concurrent Instance License Initialization - Dynamsoft Barcode Reader Licensing -description: This page shows how to concurrent instance license. -keywords: license initialization, concurrent instance license -needAutoGenerateSidebar: false ---- - -# Concurrent Instance License Initialization - -## Get a Trial License - -Contact us to try out `Concurrent Instance License`. - -## Get a Full License - -Contact us to purchase a full license. - -## Set the License In the Code - -The following shows how to set the license in the code. - -
    - >- C++ - >- C# - >- Python - > -> -```cpp - int licenseCount = YOUR-PURCHASED-LICENSE-COUNT; - int errorCode = 1; - char errorMsg[512]; - // Set the license count you purchased - SetMaxConcurrentInstanceCount(licenseCount); - errorCode = CLicenseManager::InitLicense("YOUR-LICENSE-KEY", errorMsg, 512); - if (errorCode != EC_OK) - cout << "License initialization error: " << errorMsg << endl; - CCaptureVisionRouter *cvRouter = new CCaptureVisionRouter; - // Update parameter maxParallelTasks - SimplifiedCaptureVisionSettings setting; - cvRouter->GetSimplifiedSettings(CPresetTemplate::PT_READ_BARCODES, &setting); - setting.maxParallelTasks = licenseCount; - cvRouter->UpdateSettings(CPresetTemplate::PT_READ_BARCODES, &setting); - // add further process - // CCapturedResult *result = cvRouter->Capture("IMAGE-FILE", CPresetTemplate::PT_READ_BARCODES); -``` -> -```csharp - int licenseCount = YOUR-PURCHASED-LICENSE-COUNT; - int errorCode = 0; - string errorMsg; - errorCode = LicenseManager.InitLicense("YOUR-LICENSE-KEY", out errorMsg); - LicenseManager.SetMaxConcurrentInstanceCount(licenseCount) - if (errorCode != (int)EnumErrorCode.EC_OK && errorCode != (int)EnumErrorCode.EC_LICENSE_CACHE_USED) - { - Console.WriteLine("License initialization error: " + errorMsg); - } - else - { - CaptureVisionRouter cvRouter = new CaptureVisionRouter(); - SimplifiedCaptureVisionSettings settings; - cvRouter.GetSimplifiedSettings(PresetTemplate.PT_READ_BARCODES, out settings); - setting.maxParallelTasks = licenseCount; - cvRouter.UpdateSettings(PresetTemplate.PT_READ_BARCODES, settings, out errorMsg); - // add code for further process - // CapturedResult result = cvRouter.Capture("IMAGE-FILE", PresetTemplate.PT_READ_BARCODES); - } -``` -> -```python -license_count = YOUR-PURCHASED-LICENSE-COUNT -LicenseManager.set_max_concurrent_instance_count(license_count) -error_code, error_msg = LicenseManager.init_license("YOUR-LICENSE-KEY") -if error_code != EnumErrorCode.EC_OK and error_code != EnumErrorCode.EC_LICENSE_CACHE_USED: - print("License initialization error: " + error_msg) -else: - cvr_instance = CaptureVisionRouter() - error_code, error_msg, settings = cvr_instance.get_simplified_settings(EnumPresetTemplate.PT_READ_BARCODES) - settings.max_parallel_tasks = license_count - error_code, error_msg = cvr_instance.update_settings(EnumPresetTemplate.PT_READ_BARCODES, settings) - # add code for further process - # result_array = cvr_instance.capture_multi_pages("IMAGE-FILE", EnumPresetTemplate.PT_READ_BARCODES) -``` diff --git a/license-activation/set-full-license-7.md b/license-activation/set-full-license-7.md deleted file mode 100644 index 16fa57de..00000000 --- a/license-activation/set-full-license-7.md +++ /dev/null @@ -1,582 +0,0 @@ ---- -layout: default-layout -title: How to set full license in version 7.x - Dynamsoft Barcode Reader Licensing -description: This page shows how to set full license of Dynamsoft Barcode Reader in version 7.x. -keywords: full license, licensing, 7.x, License 1.0 -needAutoGenerateSidebar: true -needGenerateH3Content: false -permalink: /license-activation/set-full-license-7.html ---- - -# How to set full license in version 7.x - -> This article shows how to set the license in DBR version 7.x using License 1.0 protocol. - -## For using C/C++/.NET/Java/Python on Windows & Linux - -Different methods are used for setting trial and full license keys. In the demo or sample applications, we use `.InitLicense()` or `.ProductKeys` to set trial license keys. For the purchased version, you need to use `initLicenseFromServer()` or `initLicenseFromLicenseContent()` to complete the license registration. - -You can use a development/runtime license by following the steps below: - -1. [Activate a development/runtime license](#activate-a-developmentruntime-license) -2. [Register the development/runtime license key](#register-the-development-license-key) - -### Activate a development/runtime license - - Once you obtain a Development License, you can find your license information at Customer Portal. - - To activate a development license (8-digit key), select **Unactivated** license, click the **License Id** link beside it. - - ![NewLicense2][1] - - On the license page, click the **Activate** button on the top left. - -![LicensePage][11] - - On the next page, click the **Activate** button. - - ![ActivationPage][2] - - On the following popup window, click the **OK** button. - - ![ContinueActivation2][3] - - Then you can see the status, quota, used seats and expiration date of the activated license key. - - ![ActivatedKey2][4] - - You can repeat the above steps to activate other license keys. - -### Register the development license key - -Here are the possible options to register a development license: - -- [Option 1: Connect to Dynamsoft server once and use the SDK offline](#connect-once) -- [Option 2: Always connect to Dynamsoft server for license verification](#always-connect) -- [Option 3: No Internet connection](#offline) - -#### Option 1: Connect to Dynamsoft server once and use the SDK offline {#connect-once} - - If you wish to use the SDK offline after activating, please follow the steps below: - - 1. Use `initLicenseFromServer()` to connect to Dynamsoft Hosted server (or your own server) to obtain the license information. The machine needs Internet connection to complete the device registration for the first time. - 2. Use `outputLicenseToString()` to get the information of the license and store the information to the development machine. - 3. Use `initLicenseFromLicenseContent()` API to register the license. If you got error message such as: license expired, run out of quota or barcode invalid etc. You need to recall `initLicenseFromServer()` to update the information of the license. - -Code snippet in C: -```c -void* _br = NULL; -int iLicMsg = -1; -char info[1024]; -_br = DBR_CreateInstance(); -FILE *file; -// Check if there is a license file on the local machine. If yes, use the local license file; Otherwise, connect to Dynamsoft Hosted server to verify the license. -if ((file = fopen("license.txt", "r")) == NULL) -{ - // Connect to the Dynamsoft server to verify the license - iLicMsg = DBR_InitLicenseFromServer(_br, "", "licenseKey1;licenseKey2"); - // The second parameter is the IP of the license server. Leaving it empty ("") means it will connect to Dynamsoft License Server for online verification automatically. - // If error occurs to the license - if (iLicMsg != DBR_OK) { - printf("Failed to initialize the license: %d\r\n%s\r\n", iLicMsg, DBR_GetErrorString(iLicMsg)); - return iLicMsg; - } - DBR_OutputLicenseToString(_br, info, 1024); // For the third parameter, the recommended length is 512 for one license key. - // If you have N license keys, please set it to N * 512. - - // If you wish to use SDK offline, store the license information in txt or other format - FILE *fp = fopen("license.txt", "w"); - if (fp == 0){ - printf("can't open file\n"); - return 0; - } - fwrite(info, sizeof(char) * 1024, 1, fp); - fclose(fp); -} -else{ - // Use the local license file and use Dynamsoft Barcode Reader SDK offline - FILE *fp = fopen("license.txt", "r"); - fscanf(fp, "%s", &info); - fclose(fp); - iLicenMsg = DBR_InitLicenseFromLicenseContent(_br, "licenseKey1;licenseKey2", info); - // If error occurs to the license - if (iLicMsg != DBR_OK) { - printf("Failed to initialize the license successfully: %d\r\n%s\r\n", iLicMsg, DBR_GetErrorString(iLicMsg)); - return iLicMsg; - } -} - -// Barcode decoding happens here -//.... -DBR_DestroyInstance(_br); -``` - -Code snippet in C++: -```cpp -CBarcodeReader* reader = new CBarcodeReader(); -int iLicMsg = -1; -char info[1024]; -string filePath= "license.txt"; -// To be able to use the license key offline, you need to store the license file obtained from Dynamsoft server once you use the API, InitLicenseFromServer. -fstream licenseFile; -licenseFile.open(filePath, ios::in); -// Check if there is a license file on the local machine. If not, connect to Dynamsoft Hosted server to verify the license. Otherwise, use the local license file. -if (!licenseFile) -{ - // Connect to Dynamsoft server to verify the license. - iLicMsg = reader->InitLicenseFromServer("", "licenseKey1;licenseKey2"); - // The first parameter is the IP of the license server. Leaving it empty ("") means it will connect to Dynamsoft License Server for online verification automatically. - - // If error occurs to the license - if (iLicMsg != DBR_OK) - { - printf("Failed to initialize the license: %d\r\n%s\r\n", iLicMsg, CBarcodeReader::GetErrorString(iLicMsg)); - return iLicMsg; - } - // If you wish to use SDK offline, store the license information in TXT or other format - reader->OutputLicenseToString(info, 1024); // For the third parameter, the recommended length is 512 for one license key. - // If you have N license keys, please set it to N * 512. - - ofstream licFileOut(filePath); - licFileOut << info; - licFileOut.close(); -} -else -{ - // Use the local license file and use Dynamsoft Barcode Reader SDK offline - ifstream licFileIn(filePath); - licFileIn >> info; - licFileIn.close(); - iLicMsg = reader->InitLicenseFromLicenseContent("licenseKey1;licenseKey2", info); - // If error occurs to the license - if (iLicMsg != DBR_OK) - { - printf("Failed to initialize the license successfully: %d\r\n%s\r\n", iLicMsg, CBarcodeReader::GetErrorString(iLicMsg)); - return iLicMsg; - } -} -// Decode barcodes happens here -//.... -delete reader; -``` - -Code snippet in C#: -```csharp -int iLicMsg = -1; -string path = @"Put your file path here"; -// To be able to use the license key offline, you need to store the license file obtained from Dynamsoft server once you use the API, InitLicenseFromServer. -BarcodeReader _br = new BarcodeReader(); -// Check if there is a license file in the local machine. If not, connect to Dynamsoft Hosted server to verify the license. Otherwise, use the local license file. -if (!File.Exists(path)) -{ - // Connect to Dynamsoft server to verify the license - iLicMsg = _br.InitLicenseFromServer("", "licenseKey1;licenseKey2"); - // The first parameter is the string of the license server. Leaving it empty ("") means it will connect to Dynamsoft License Server for online verification. - if(iLicMsg != 0) - { - Console.WriteLine("License error Code:",iLicMsg); - return; - } - // If you wish to use SDK offline, store the license information as txt format - string license = _br.OutputLicenseToString(); - File.WriteAllText(path, license); -} -else{ - // Use the local license file and use Dynamsoft Barcode Reader SDK - string license = File.ReadAllText(path); - iLicMsg = _br.InitLicenseFromLicenseContent("licenseKey1;licenseKey2",license); - if(iLicMsg != 0) - { - Console.WriteLine("Error Code:",iLicMsg); - return; - } -} -// Decode barcodes happens here -//.... -``` - -Code snippet in Java: -```java -try { - File file = new File("`"); - BarcodeReader reader = new BarcodeReader(); - // Check if there is a license file on the local machine. If not, connect to Dynamsoft Hosted server to verify the license. Otherwise, use the license file. - if (!file.exists()){ - // Connect to Dynamsoft server to verify the license. - reader.initLicenseFromServer("", "licenseKey1;licenseKey2"); - //The first parameter is the string of the license server. Leaving it empty ("") means it will connect to Dynamsoft License Server for online verification. - //The second parameter refer to 8-bit short key. You may buy our product with more than 2 supported barcode format types and in that case you need to list every license key divided by colon(;) - //If you bought our product with single supported barcode format type, please just fill in your single license key in second parameter. - // If you wish to use SDK offline, store the license information as txt format or in other format - String license = reader.outputLicenseToString(); - PrintWriter pw = new PrintWriter(file); - pw.print(license); - pw.close(); - } - else{ - // Use the local license file and use Dynamsoft Barcode Reader SDK - byte[] encoded = Files.readAllBytes(file.toPath()); - String license = new String(encoded, "utf-8"); - reader.initLicenseFromLicenseContent("licenseKey1;licenseKey2",license); - } -}catch(Exception e) { //if your license is invalid, a BarcodeReaderException will be throw out -System.out.println(e); -} -``` - -Code snippet in Python: -```python -from typing import List -from dbr import * -license_key = "Input your own license" -reader = BarcodeReader() - -#Check if there is a license file on the local machine. If not, connect to Dynamsoft Hosted server to verify the license. Otherwise, use the local license file. -if os.path.exists(license.txt): - #Use the local license file to activate the SDK - with open("license.txt","r") as f: - license_content = f.read() -try - error = reader.init_license_from_license_content(license_key, license_content) - if error[0] != EnumErrorCode.DBR_OK: - print(error[0]) - print(error[1]) -except BarcodeReaderError as bre: - print(bre) -else: -try - error = reader.init_license_from_server(license_server, license_key) - if error[0] != EnumErrorCode.DBR_OK: - print(error[0]) - print(error[1]) -except BarcodeReaderError as bre: - print(bre) - #If you wish to use SDK offline, store the license information as .txt or other format - license_content = reader.output_license_to_string() - with open("license.txt","w") as f: - f.write(license_content) -``` - -**Note:** - - The license verification process on the machine can be a one-time process. Once it is registered, the registration file for this specific device can be returned and stored to the machine. - - - If you need to increase the quota of your existing license key, please [contact us](https://www.dynamsoft.com/company/customer-service/#contact). - -#### Option 2: Always connect to Dynamsoft server for license verification {#always-connect} - - If your development machine can access Internet all the time, you can use the `initLicenseFromServer()` method to register the development license. It will connect to Dynamsoft server for license verification each time you use the SDK. - -Code snippet in C: -```c -void* _br = NULL; -int iLicMsg = -1; -_br = DBR_CreateInstance(); -// Connect to the Dynamsoft server to verify the license -iLicMsg = DBR_InitLicenseFromServer(_br, "", "licenseKey1;licenseKey2"); -// If error occurs to the license -if (iLicMsg != DBR_OK) { - printf("Failed to initialize the license: %d\r\n%s\r\n", iLicMsg, DBR_GetErrorString(iLicMsg)); - return iLicMsg; -} -// Barcode decoding happens here -//.... -DBR_DestroyInstance(_br); -``` - -Code snippet in C++: -```cpp -CBarcodeReader* reader = new CBarcodeReader(); -int iLicMsg = -1; -// Connect to Dynamsoft server to verify the license. -iLicMsg = reader->InitLicenseFromServer("", "licenseKey1;licenseKey2"); -// If error occurs to the license -if (iLicMsg != DBR_OK) -{ - printf("Failed to initialize the license: %d\r\n%s\r\n", iLicMsg, CBarcodeReader::GetErrorString(iLicMsg)); - return iLicMsg; -} -// Decode barcodes happens here -//.... -delete reader; -``` - -Code snippet in C#: -```csharp -int iLicMsg = -1; -BarcodeReader _br = new BarcodeReader(); -// Connect to Dynamsoft server to verify the license. -iLicMsg = _br.InitLicenseFromServer("", "licenseKey1;licenseKey2"); -if(iLicMsg != 0) -{ - Console.WriteLine("License error Code:",iLicMsg); - return; -} -// Decode barcodes happens here -//.... -_br.Dispose(); -``` - -Code snippet in Java: -```java -try { - BarcodeReader reader = new BarcodeReader(); - // Connect to Dynamsoft server to verify the license. - reader.initLicenseFromServer("", "licenseKey1;licenseKey2"); - //now you are free to start barcode decoding. -} -catch(Exception ex) { - //if your license is invalid, a BarcodeReaderException will be throw out - //com.dynamsoft.barcode.BarcodeReaderException: The license key is invalid. - System.out.println(ex); -} -``` - -Code snippet in Python: -```python -from typing import List -from dbr import * -license_key = "Input your own license" -reader = BarcodeReader() -try -error = reader.init_license_from_server(license_server, license_key) -if error[0] != EnumErrorCode.DBR_OK: - print(error[0]) - print(error[1]) -except BarcodeReaderError as bre: - print(bre) -``` - -#### Option 3: No Internet connection {#offline} - -If your machine is not allowed to access Internet, you can follow the steps below to manually register the device and get the license content. - -1. Log in Customer Portal and click **License Id**. - -![ActivatedKey_Used2][5] - -2. Click the **Add Device** button to add a device. - -![Add2][6] - -3. Get amd run the Dynamsoft tool on the device to be registered and get the machine ID. - - **For Windows:** - - Download MachineIDGenerator.exe and run it. The returned string, e.g. `tZRk-6qb2-sEyE-wcz7-jf6j-8DH/-Di3u-zjSv-G86f-ol3x`, is the machine ID. - -![MachineID_Windows][7] - - **For Linux:** - - Download MachineIDGenerator.tar.gz and unzip it. Open **Terminal** and type `./MachineIDGenerator`. The returned string, e.g. `iJpN-Cajc-qQip-Sl50-NEX+-z1dJ-XmmV-lS9O-G86f-ol3x`, is the machine ID. - - ![MachineID_Linux][8] - -4. Input the machine ID in the text box and click **Submit**. - - ![ManuallyActivate2][9] - - Then the license file (`.dslf`), which contains the license content, will be downloaded automatically. - - ![DownloadLicense][10] - -5. Use the `initLicenseFromLicenseContent(licenseKey, licenseContent)` API to activate the SDK offline. - - `licenseKey`: 8-digit key in the customer portal - - `licenseContent`: the string in the `.dslf` file - -Code snippet in C: -```c -void* _br = NULL; -int iLicMsg = -1; -_br = DBR_CreateInstance(); -// Use the SDK offline -iLicMsg = DBR_InitLicenseFromLicenseContent(_br, "licenseKey1;licenseKey2", "LicenseContent")); -// If error occurs to the license -if (iLicMsg != DBR_OK) { - printf("Failed to initialize the license: %d\r\n%s\r\n", iLicMsg, DBR_GetErrorString(iLicMsg)); - return iLicMsg; -} -// Barcode decoding happens here -//.... -DBR_DestroyInstance(_br); -``` - -Code snippet in C++: -```cpp -CBarcodeReader* reader = new CBarcodeReader(); -int iLicMsg = -1; -// Use the SDK offline -iLicMsg = reader->InitLicenseFromLicenseContent("licenseKey1;licenseKey2", "LicenseContent"); -// If error occurs to the license -if (iLicMsg != DBR_OK) -{ - printf("Failed to initialize the license: %d\r\n%s\r\n", iLicMsg, CBarcodeReader::GetErrorString(iLicMsg)); - return iLicMsg; -} -// Decode barcodes happens here -//.... -delete reader; -``` - -Code snippet in C#: -```csharp -int iLicMsg = -1; -BarcodeReader _br = new BarcodeReader(); -// Use the SDK offline -iLicMsg = _br.InitLicenseFromLicenseContent("licenseKey1;licenseKey2", "LicenseContent"); -if(iLicMsg != 0) -{ - Console.WriteLine("License error Code:",iLicMsg); - return; -} -// Decode barcodes happens here -//.... -_br.Dispose(); -``` - -Code snippet in Java: -```java -try{ - BarcodeReader reader = new BarcodeReader(); - // Use the SDK offline - reader.initLicenseFromLicenseContent("licenseKey1;licenseKey2", "LicenseContent"); -}catch(BarcodeReaderException e) { //if your license is invalid, a BarcodeReaderException will be thrown - System.out.println(e.getErrorCode()); - System.out.println(e.getMessage()); -} -``` - -Code snippet in Python: -```python -from typing import List -from dbr import * -license_key = "Input your own license" -reader = BarcodeReader() -os.path.exists(license.txt): - #Use the local license file to activate the SDK - with open("license.txt","r") as f: - license_content = f.read() -try - error = reader.init_license_from_license_content(license_key, license_content) - if error[0] != EnumErrorCode.DBR_OK: - print(error[0]) - print(error[1]) -except BarcodeReaderError as bre: - print(bre) -``` - -## For iOS/Android SDK - -Please use a development/runtime license by following the steps below: - -1. [Activate a development/runtime license](#activate) -2. [Register the development/runtime license key](#register-the-developmentruntime-license-key) - -### Activate a development/runtime license {#activate} - - Once you obtain a Development License, you can find your license information at Customer Portal. - - To activate a development license (8-digit key), select **Unactivated** license, click the **Activate Now** link beside it. - - ![NewLicense2][1] - - On the next page, click the **Activate** button. - - ![ActivationPage][2] - - On the following popup window, click the **OK** button. - - ![ContinueActivation2][3] - - Then you can see the status, quota, used seats and expiration date of the activated license key. - - ![ActivatedKey2][4] - - You can repeat the above steps to activate other license keys. - -### Register the development/runtime license key - - Use `initLicenseFromServer()` to connect to Dynamsoft hosted server or your own server to obtain the license information. The machine needs Internet connection to complete the device registration for the first time. - - Code snippet in obj-c: - ```obj-c -DynamsoftBarcodeReader *m_barcodeReader; -m_barcodeReader = [[DynamsoftBarcodeReader alloc] initWithLicenseFromServer:serverURL licenseKey:licenseKey verificationDelegate:self]; - ``` - - Code snippet in swift: - ```swift -var barcodeReader: DynamsoftBarcodeReader!; -barcodeReader = DynamsoftBarcodeReader(licenseFromServer: serverURL, licenseKey: licenseKey, verificationDelegate: self); - ``` - - Code snippet in Java: - ```java -BarcodeReader dbr = new BarcodeReader(); - -dbr.initLicenseFromServer("", "", new DBRServerLicenseVerificationListener() { - @Override - public void licenseVerificationCallback(boolean isSuccess, Exception error) { - } - }); - ``` -## Common error code - -- **Error Code: -10044** - - **Error Message:** Failed to request the license content - - **Solution:** - - Check your network connection and make sure you have Internet access. If you have a firewall configured on the device, it is very likely that our license server is blocked by your firewall. Please [contact Dynamsoft](https://www.dynamsoft.com/company/customer-service/#contact) to resolve the issue. - - -- **Error Code: -10054** - - **Error Message:** The license key has no remaining quota - - **Solution:** - - You can [contact Dynamsoft](https://www.dynamsoft.com/company/customer-service/#contact) to expand the volume of your current runtime license key. Rest assured that your license key remains unchanged during the upgrade process, so no code change is required to your application. - - -- **Error Code: -10004** - - **Error Message:** The license has expired - - **Solution:** - - Your annual runtime license has expired. You can log into the customer portal to renew your runtime license by credit card or PayPal. Alternatively, you can [contact Dynamsoft](https://www.dynamsoft.com/company/customer-service/#contact) if you prefer other payment methods (wire transfer or check). Rest assured that your license key remains unchanged during the upgrade process, so no code change is required to your application. - - -- **Error Code: -10042** - - **Error Message:** The license DLL is missing (for C/C++) - - **Solution:** - - For 8-digit license keys, we use a separate license DLL to verify the License. Please copy `DynamsoftLicClientx64.dll` (or `DynamsoftLicClientx86.dll`) from `[INSTALLATION FOLDER]\Components\C_C++\Redist\x64\` (or `[INSTALLATION FOLDER]\Components\C_C++\Redist\x86`) to the same folder as the barcode reader dll `DynamsoftBarcodeReaderx64.dll` (or `DynamsoftBarcodeReaderx86.dll`). - - -- **Error Code: -10052** - - **Error Message:** The license content is invalid - - **Solution:** - - This error happens when you are trying to use InitLicenseFromLicenseContent() API to activate the license. Please refer to [Use a Development License](#register-the-development-license-key) section to double check if the license content is correct. -If you run into any issues, please [contact Dynamsoft Support](https://www.dynamsoft.com/company/customer-service/#contact). - -[1]:assets\set-full-license\NewLicense2.png -[2]:assets\set-full-license\ActivationPage.png -[3]:assets\set-full-license\ContinueActivation2.png -[4]:assets\set-full-license\ActivatedKey2.png -[5]:assets\set-full-license\ActivatedKey_Used2.png -[6]:assets\set-full-license\Add2.png -[7]:assets\set-full-license\MachineID_Windows.png -[8]:assets\set-full-license\MachineID_Linux.png -[9]:assets\set-full-license\ManuallyActivate2.png -[10]:assets\set-full-license\DownloadLicense.png -[11]:assets\set-full-license\LicensePage.png diff --git a/license-activation/set-full-license-8.md b/license-activation/set-full-license-8.md deleted file mode 100644 index 12e386a8..00000000 --- a/license-activation/set-full-license-8.md +++ /dev/null @@ -1,187 +0,0 @@ ---- -layout: default-layout -title: Dynamsoft Barcode Reader Licensing - How to set full license in 8.x -description: Find out about the different methods used for setting trial and full license key in DBR v8.x -keywords: full license, licensing -needAutoGenerateSidebar: true -needGenerateH3Content: true -permalink: /license-activation/set-full-license-8.html ---- - -# How to set full license in version 8.x - -Different methods are used for setting trial and full license keys. In our demo or sample applications, we use `.InitLicense()` or `.ProductKeys` to set trial license keys. - -For the purchased version, you need to use `initLicenseFromDLS()` to set the Handshake Codes for your licenses. - -You can set the license by following the steps below: - -1. [Activate the license](#activate-the-license) -2. [Configure the license (optional)](#configure-the-license-optional) -3. [Set the license in the code](#set-the-license-in-the-code) - -## Activate the license - - Once you purchase a full license from our online store, you can find your license information at Customer Portal. - - To activate the license, click "Please first activate the license". - - ![FullLicenseList][1] - - On the next page, set an Alias for your license or leave the default Alias and click the "Activate" button. - - > Read more on What is an Alias - - ![SetAlias][2] - - On the following popup window, click the "OK" button. - - ![ActivationContinue][3] - - Then you can see the message "Activation secceeded!...". Click "configure this new license item at this page" to continue. - - ![ConfigLicense][4] - - You can repeat the above steps to activate other license keys. - -## Configure the license (optional) - - After the license is activated, the Handshake Code will be generated automatically. Read more on What is a Handshake Code. - - Basically, you can skip the step. But if you would like to edit the Handshake Codes for the license or view the statistics of a handshake code, please refer to how to manage the handshake code. - -## Set the license in the code - -
    ->- Javascript ->- C ->- C++ ->- C# ->- Java ->- Objective-C ->- Swift ->- Java-Android ->- Python -> ->1. -```js - // Please replace the organizationID with your own - Dynamsoft.DBR.BarcodeReader.organizationID = "YOUR-ORGANIZATION-ID"; - let reader = await Dynamsoft.DBR.BarcodeReader.createInstance(); -``` -2. -```c - char errorBuf[512]; - DMDLSConnectionParameters parameters; - DBR_InitDLSConnectionParameters(¶meters); - // Please replace the organizationID with your own - parameters.organizationID = "YOUR-ORGANIZATION-ID"; - DBR_InitLicenseFromDLS(¶meters, errorBuf, 512); -``` -3. -```cpp - int iRet = -1; - char szErrorMsg[256]; - DM_DLSConnectionParameters dlspar; - CBarcodeReader::InitDLSConnectionParameters(&dlspar); - // Please replace the organizationID with your own - dlspar.organizationID = "YOUR-ORGANIZATION-ID"; - iRet = CBarcodeReader::InitLicenseFromDLS(&dlspar, szErrorMsg, 256); - if (iRet != DBR_OK) - { - printf("Error code: %d. Error message: %s\n", iRet, szErrorMsg); - return -1; - } -``` -4. -```csharp - DMDLSConnectionParameters dlspar = BarcodeReader.InitDLSConnectionParameters(); - // Please replace the organizationID with your own - dlspar.OrganizationID = "YOUR-ORGANIZATION-ID"; - EnumErrorCode iRet = BarcodeReader.InitLicenseFromDLS(dlspar, out strErrorMSG); -``` -5. -```java - DMDLSConnectionParameters dlspar = BarcodeReader.initDLSConnectionParameters(); - // Please replace the organizationID with your own - dlspar.organizationID = "YOUR-ORGANIZATION-ID"; - BarcodeReader.initLicenseFromDLS(dlspar); -``` -6. - ```objc - iDMDLSConnectionParameters* dls = [[iDMDLSConnectionParameters alloc] init]; - // Please replace the organizationID with your own - dls.organizationID = @"YOUR-ORGANIZATION-ID"; - _dbr = [[DynamsoftBarcodeReader alloc] initLicenseFromDLS:dls verificationDelegate:self]; - - (void)DLSLicenseVerificationCallback:(bool)isSuccess error:(NSError * _Nullable)error - { - NSNumber* boolNumber = [NSNumber numberWithBool:isSuccess]; - dispatch_async(dispatch_get_main_queue(), ^{ - [self->m_verificationReceiver performSelector:self->m_verificationCallback withObject:boolNumber withObject:error]; - NSLog(@"ifsuccess : %@",boolNumber); - NSLog(@"error code: %ld:",(long)error.code); - NSLog(@"errormsg : %@",error.userInfo); - //UIImage *image =[UIImage imageNamed:@"AllSupportedBarcodeTypes.bmp"]; - //NSError* errormsg = nil; - //NSArray* readResult = [_dbr decodeImage:image withTemplate:@"" error:&errormsg]; - }); - } - ``` -7. -```swift - let dls = iDMDLSConnectionParameters(); - // Please replace the organizationID with your own - dls.organizationID = "YOUR-ORGANIZATION-ID"; - barcodeReader = DynamsoftBarcodeReader(licenseFromDLS: dls, verificationDelegate: self) - func dlsLicenseVerificationCallback(_ isSuccess: Bool, error: Error?) - { - //TODO add your code for license verification - } -``` -8. -```java - DBRDLSLicenseVerificationListener dlsListener = new DBRDLSLicenseVerificationListener() { - @Override - public void DLSLicenseVerificationCallback(boolean success, Exception error) { - } - }; - DMDLSConnectionParameters parameters = new DMDLSConnectionParameters(); - // Please replace the organizationID with your own - parameters.organizationID = "YOUR-ORGANIZATION-ID"; - dbr.initLicenseFromDLS(parameters,dlsListener); -``` -9. -```python - reader = BarcodeReader() - connection_paras = reader.init_dls_connection_parameters() - # Please replace the organizationID with your own - connection_paras.organization_id = "YOUR-ORGANIZATION-ID" - try: - error = reader.init_licesne_from_dls(connection_paras) - if error[0] != EnumErrorCode.DBR_OK: - print(error[1]) - except BarcodeReaderError as bre: - print(bre) -``` - - Code snippet in Xamarin: - Please refer to this article. - - If you run into any issues, please [contact Dynamsoft Support](https://www.dynamsoft.com/company/customer-service/#contact). - -**Notes:** - -All license usage data is submitted to the Dynamsoft License Server (`DLS`) hosted by Dynamsoft. You can - -* View activated license items -* View the license usage statistics -* Get notified about license status - -> Read more about the mechanism behind license tracking. -> -[1]:assets\set-full-license-2\FullLicenseList.png -[2]:assets\set-full-license-2\SetAlias8.6.png -[3]:assets\set-full-license-2\ActivationContinue.png -[4]:assets\set-full-license-2\ConfigLicense8.6.png - - diff --git a/license-activation/set-full-license.md b/license-activation/set-full-license.md deleted file mode 100644 index 25a9101a..00000000 --- a/license-activation/set-full-license.md +++ /dev/null @@ -1,197 +0,0 @@ ---- -layout: default-layout -title: How to set full license - Dynamsoft Barcode Reader Licensing -description: This page shows how to set full license of Dynamsoft Barcode Reader. -keywords: full license, licensing -needAutoGenerateSidebar: true -needGenerateH3Content: true -noTitleIndex: false -permalink: /license-activation/set-full-license.html ---- - -# How to set full license in version 9.x - -You can set the license by following the steps below: - -- [How to set full license in version 9.x](#how-to-set-full-license-in-version-9x) - - [Activate the license](#activate-the-license) - - [Configure the license by projects (optional)](#configure-the-license-by-projects-optional) - - [Set the license in the code](#set-the-license-in-the-code) - -## Activate the license - -Once you purchase a full license from Dynamsoft, you can find your license information in the Customer Portal (License | Full License). - -To activate the license, click "Activate". - - ![Activate][1] - -On the next page, set an Alias for your license or leave the default Alias, choose where you want the license to be hosted ("Dynamsoft's License Server" -or "My Self-Hosted License Server") and click the "Activate" button. - -![Activate2][2] - -> 1. **Alias** is a way to identify the license. You can set a meaningful Alias to a license so that you can easily identify the purpose of the license. -> -> 2. In most cases, you should choose "Dynamsoft's License Server", choose "My Self-Hosted License Server" only when you have [consulted us](https://www.dynamsoft.com/contact/). -> -> 3. You might be prompted to add the new license to an existing project or create a new project for this license. - -On the following popup window, click the "OK" button. - -![Activate3][3] - -You will find that the **License Key** is listed on the license details page now. - -![Activate5][5] - -You can copy the **License Key** and use it in your application. - -If you have other new licenses, you can follow the same steps to activate them. - -> A license usually expires one year after it is activated. Do not activate the license until you actually need to use it. - -## Configure the license by projects (optional) - -If you have multiple projects which you want to manage the license usage separately, you can click the project name (found after "Linked Project Name") on the license details page to get to the configuration page. Read how to manage the project for more information. - -## Set the license in the code - -Replace the trial license with the purchased license key: - -
    - >- JavaScript - >- C - >- C++ - >- C# - >- Java - >- Android - >- Objective-C - >- Swift - >- Python - > -> -```javascript -Dynamsoft.DBR.BarcodeScanner.license = "YOUR-LICENSE-KEY"; -let scanner = await Dynamsoft.DBR.BarcodeScanner.createInstance(); -``` -> -```c -int errorCode = 0; -char errorBuf[512]; -errorCode = DBR_InitLicense("YOUR-LICENSE-KEY", errorBuf, 512); -if (errorCode != DBR_OK) -{ - // Add your code for license error processing; -} -// ... -void* dbr = DBR_GetInstance(); -if(dbr != NULL) -{ - // Add your code here to call decoding method, process barcode results and so on - // ... - // Release the allocated resources for the instance - DBR_RecycleInstance(dbr); -} -``` -> -```cpp -int errorCode = 0; -char errorBuf[512]; -errorCode = CBarcodeReader::InitLicense("YOUR-LICENSE-KEY", errorBuf, 512); -if (errorCode != DBR_OK) -{ - // Add your code for license error processing; -} -// ... -CBarcodeReader* dbr = CBarcodeReader::GetInstance(); -if(dbr != NULL) -{ - // Add your code here to call decoding method, process barcode results and so on - // ... - // Release the allocated resources for the instance - dbr->Recycle(); -} -``` -> -```csharp -string errorMsg; -EnumErrorCode errorCode = BarcodeReader.InitLicense("YOUR-LICENSE-KEY", out errorMsg); -if (errorCode != EnumErrorCode.DBR_SUCCESS) -{ - // Add your code for license error processing; -} -// ... -BarcodeReader reader = BarcodeReader.GetInstance(); -if (reader != null) -{ - // Add your code here to call decoding method, process barcode results and so on - // ... - // Release the allocated resources for the instance - reader.Recycle(); -} -``` -> -```java -try { - BarcodeReader.initLicense("YOUR-LICENSE-KEY"); - // ... - BarcodeReader reader = BarcodeReader.getInstance(); - if(reader != null) - { - // Add your code here to call decoding method, process barcode results and so on - // ... - // Release the allocated resources for the instance - reader.recycle(); - } -} catch (BarcodeReaderException ex) { - // ... -} -``` -> -```java -BarcodeReader.initLicense("YOUR-LICENSE-KEY", new DBRLicenseVerificationListener() { - @Override - public void DBRLicenseVerificationCallback(boolean isSuccessful, Exception e) { - // Add your code for license verification. - } -}); -``` -> -```objc -[DynamsoftBarcodeReader initLicense:@"YOUR-LICENSE-KEY" verificationDelegate:self]; -- (void)DBRLicenseVerificationCallback:(bool)isSuccess error:(NSError *)error -{ - // Add your code for license verification. -} -``` -> -```swift -DynamsoftBarcodeReader.initLicense("YOUR-LICENSE-KEY", verificationDelegate: self) -func dbrLicenseVerificationCallback(_ isSuccess: Bool, error: Error?) -{ - // Add your code for license verification. -} -``` -> -```python -error = BarcodeReader.init_license("YOUR-LICENSE-KEY") -if error[0] != EnumErrorCode.DBR_OK: - # Add your code for license error processing -# ... -reader = BarcodeReader.get_instance() -if reader != None: - # Add your code here to call decoding method, process barcode results and so on - # ... - # Release the allocated resources for the instance - reader.recycle() -``` - - -If you run into any issues, please [contact Dynamsoft Support](https://www.dynamsoft.com/company/customer-service/#contact). - -[1]:assets\set-full-license-3\Activate.png -[2]:assets\set-full-license-3\Activate2.png -[3]:assets\set-full-license-3\Activate3.png -[4]:assets\set-full-license-3\Activate4.png -[5]:assets\set-full-license-3\Activate5.png diff --git a/license-activation/set-trial-license.md b/license-activation/set-trial-license.md deleted file mode 100644 index 843e862b..00000000 --- a/license-activation/set-trial-license.md +++ /dev/null @@ -1,153 +0,0 @@ ---- -layout: default-layout -title: How to set trial license - Dynamsoft Barcode Reader Licensing -description: This page shows how to set trial license of Dynamsoft Barcode Reader. -keywords: trial license, licensing -needAutoGenerateSidebar: false -needGenerateH3Content: false ---- - -# How to set trial license - -You can request a 30-day trial license via the [Request a Trial License](https://www.dynamsoft.com/customer/license/trialLicense?utm_source=docs&product=dbr){:target="_blank"} link. - -> NOTE -> -> In case the trial license fails to be generated, Dynamsoft Support team will get in touch with you. Or you can [contact us](https://www.dynamsoft.com/contact/). - -The following shows how to set the license in the code - -
    - >- JavaScript - >- C - >- C++ - >- C# - >- Java - >- Android - >- Objective-C - >- Swift - >- Python - > -> -```javascript -Dynamsoft.DBR.BarcodeScanner.license = "YOUR-LICENSE-KEY"; -let scanner = await Dynamsoft.DBR.BarcodeScanner.createInstance(); -``` -> -```c -int errorCode = 0; -char errorBuf[512]; -errorCode = DBR_InitLicense("YOUR-LICENSE-KEY", errorBuf, 512); -if (errorCode != DBR_OK) -{ - // Add your code for license error processing; -} -// ... -void* dbr = DBR_GetInstance(); -if(dbr != NULL) -{ - // Add your code here to call decoding method, process barcode results and so on - // ... - // Release the allocated resources for the instance - DBR_RecycleInstance(dbr); -} -``` -> -```cpp -int errorCode = 0; -char errorBuf[512]; -errorCode = CBarcodeReader::InitLicense("YOUR-LICENSE-KEY", errorBuf, 512); -if (errorCode != DBR_OK) -{ - // Add your code for license error processing; -} -// ... -CBarcodeReader* dbr = CBarcodeReader::GetInstance(); -if(dbr != NULL) -{ - // Add your code here to call decoding method, process barcode results and so on - // ... - // Release the allocated resources for the instance - dbr->Recycle(); -} -``` -> -```csharp -string errorMsg; -EnumErrorCode errorCode = BarcodeReader.InitLicense("YOUR-LICENSE-KEY", out errorMsg); -if (errorCode != EnumErrorCode.DBR_SUCCESS) -{ - // Add your code for license error processing; -} -// ... -BarcodeReader reader = BarcodeReader.GetInstance(); -if (reader != null) -{ - // Add your code here to call decoding method, process barcode results and so on - // ... - // Release the allocated resources for the instance - reader.Recycle(); -} -``` -> -```java -try { - BarcodeReader.initLicense("YOUR-LICENSE-KEY"); - // ... - BarcodeReader reader = BarcodeReader.getInstance(); - if(reader != null) - { - // Add your code here to call decoding method, process barcode results and so on - // ... - // Release the allocated resources for the instance - reader.recycle(); - } -} catch (BarcodeReaderException ex) { - // ... -} -``` -> -```java -BarcodeReader.initLicense("YOUR-LICENSE-KEY", new DBRLicenseVerificationListener() { - @Override - public void DBRLicenseVerificationCallback(boolean isSuccessful, Exception e) { - // Add your code for license verification. - } -}); -``` -> -```objc -[DynamsoftBarcodeReader initLicense:@"YOUR-LICENSE-KEY" verificationDelegate:self]; -- (void)DBRLicenseVerificationCallback:(bool)isSuccess error:(NSError *)error -{ - // Add your code for license verification. -} -``` -> -```swift -DynamsoftBarcodeReader.initLicense("YOUR-LICENSE-KEY", verificationDelegate: self) -func dbrLicenseVerificationCallback(_ isSuccess: Bool, error: Error?) -{ - // Add your code for license verification. -} -``` -> -```python -error = BarcodeReader.init_license("YOUR-LICENSE-KEY") -if error[0] != EnumErrorCode.DBR_OK: - # Add your code for license error processing -# ... -reader = BarcodeReader.get_instance() -if reader != None: - # Add your code here to call decoding method, process barcode results and so on - # ... - # Release the allocated resources for the instance - reader.recycle() -``` - -If you run into any issues, please [contact Dynamsoft Support](https://www.dynamsoft.com/company/customer-service/#contact). - -
    -
    -
    -
    \ No newline at end of file diff --git a/programming/features/barcode-formats-and-count-v10.5.2100.md b/programming/features/barcode-formats-and-count-v10.5.2100.md deleted file mode 100644 index fb8858fa..00000000 --- a/programming/features/barcode-formats-and-count-v10.5.2100.md +++ /dev/null @@ -1,274 +0,0 @@ ---- -layout: default-layout -title: Barcode Formats and Count - Dynamsoft Barcode Reader SDK -description: This page describes how to set barcode formats and count in Dynamsoft Barcode Reader SDK. -keywords: Barcode Formats, Expected Count -needAutoGenerateSidebar: true -needGenerateH3Content: true -noTitleIndex: true ---- - -# Specify Barcode Formats and Count - -## Set Barcode Formats - -Specifying the barcode format is always the first step when it comes to the configuration of Dynamsoft Barcode Reader(DBR). Be sure to confirm that the target barcode formats are indeed supported by DBR by checking our [list of supported barcode types](https://www.dynamsoft.com/barcode-types/). Excluding undesired barcode types will improve the processing efficiency. - -You can configure the parameter in two different ways, depending on your requirements. You can do it through `SimplifiedCaptureVisionSettings`, or if it suits your needs better, you can opt for `JSON Template`. Below are examples illustrating both of these configuration methods: - -* Configure barcode format via `SimplifiedCaptureVisionSettings`. - -
    ->- JavaScript ->- C++ ->- Android ->- Objective-C ->- Swift ->- Python ->- C# -> -> -```javascript -// Obtain current runtime settings of `router` instance. Here we use `ReadSingleBarcode` as an example. You can change it to your own template name or the name of other preset template. -let settings = await router.getSimplifiedSettings("ReadSingleBarcode"); -// Specify the barcode formats by enumeration values. -// Use "|" to enable multiple barcode formats at one time. -settings.barcodeSettings.barcodeFormatIds = Dynamsoft.DBR.EnumBarcodeFormat.BF_QR_CODE | Dynamsoft.DBR.EnumBarcodeFormat.BF_QR_CODE; -// Update the settings to a specific template. -await router.updateSettings("ReadSingleBarcode", settings); -``` -> -```c++ -char szErrorMsg[256] = {0}; -// Obtain current runtime settings of `CCaptureVisionRouter` instance. -CCaptureVisionRouter* cvRouter = new CCaptureVisionRouter; -SimplifiedCaptureVisionSettings settings; -cvRouter->GetSimplifiedSettings(CPresetTemplate::PT_READ_BARCODES, &settings); -// Specify the barcode formats by enumeration values. -// Use "|" to enable multiple barcode formats at one time. -settings.barcodeSettings.barcodeFormatIds = BF_QR_CODE | BF_ONED; -// Update the settings. -cvRouter->UpdateSettings(CPresetTemplate::PT_READ_BARCODES, &settings, szErrorMsg, 256); -``` -> -```java -try { - // Obtain current runtime settings. `cvr` is an instance of `CaptureVisionRouter`. - // Here we use `EnumPresetTemplate.PT_READ_BARCODES` as an example. You can change it to your own template name or the name of other preset template. - SimplifiedCaptureVisionSettings captureVisionSettings = cvr.getSimplifiedSettings(EnumPresetTemplate.PT_READ_BARCODES); - captureVisionSettings.barcodeSettings.barcodeFormatIds = EnumBarcodeFormat.BF_QR_CODE | EnumBarcodeFormat.BF_ONED; - // Update the settings. Remember to specify the same template name you used when getting the settings. - cvr.updateSettings(EnumPresetTemplate.PT_READ_BARCODES, captureVisionSettings); -} catch (CaptureVisionRouterException e) { - e.printStackTrace(); -} -``` -> -```objc -NSError *error; -// Obtain current runtime settings. `cvr` is an instance of `CaptureVisionRouter`. -// Here we use `EnumPresetTemplate.PT_READ_BARCODES` as an example. You can change it to your own template name or the name of other preset template. -DSSimplifiedCaptureVisionSettings *captureVisionSettings = [self.cvr getSimplifiedSettings:DSPresetTemplateReadBarcodes error:&error]; -captureVisionSettings.barcodeSettings.barcodeFormatIds = DSBarcodeFormatQRCode | DSBarcodeFormatOneD; -// Update the settings. Remember to specify the same template name you used when getting the settings. -[self.cvr updateSettings:DSPresetTemplateReadBarcodes settings:captureVisionSettings error:&error]; -``` -> -```swift -do{ - // Obtain current runtime settings. `cvr` is an instance of `CaptureVisionRouter`. - // Here we use `EnumPresetTemplate.PT_READ_BARCODES` as an example. You can change it to your own template name or the name of other preset template. - let captureVisionSettings = try cvr.getSimplifiedSettings(PresetTemplate.readBarcodes.rawValue) - captureVisionSettings.barcodeSettings?.barcodeFormatIds = [.qrCode,.oneD] - // Update the settings. Remember to specify the same template name you used when getting the settings. - try cvr.updateSettings(PresetTemplate.readBarcodes.rawValue, settings: captureVisionSettings) -}catch{ - // Add code to do when error occurs. -} -``` -> -```python -cvr_instance = CaptureVisionRouter() -# Obtain current runtime settings of `CCaptureVisionRouter` instance. -err_code, err_str, settings = cvr_instance.get_simplified_settings(EnumPresetTemplate.PT_READ_BARCODES.value) -# Specify the barcode formats by enumeration values. -# Use "|" to enable multiple barcode formats at one time. -settings.barcode_settings.barcode_format_ids = EnumBarcodeFormat.BF_QR_CODE.value | EnumBarcodeFormat.BF_ONED.value -# Update the settings. -err_code, err_str = cvr_instance.update_settings(EnumPresetTemplate.PT_READ_BARCODES.value, settings) -``` -> -```csharp -using (CaptureVisionRouter cvRouter = new CaptureVisionRouter()) -{ - SimplifiedCaptureVisionSettings settings; - string errorMsg; - // Obtain current runtime settings of `CCaptureVisionRouter` instance. - cvRouter.GetSimplifiedSettings(PresetTemplate.PT_READ_BARCODES, out settings); - // Specify the barcode formats by enumeration values. - // Use "|" to enable multiple barcode formats at one time. - settings.barcodeSettings.barcodeFormatIds = (ulong)(EnumBarcodeFormat.BF_QR_CODE | EnumBarcodeFormat.BF_ONED); - // Update the settings. - cvRouter.UpdateSettings(PresetTemplate.PT_READ_BARCODES, settings, out errorMsg); -} -``` - - -* Configure barcode format via `JSON parameter template file` - * Update parameter `BarcodeFormatIds` in your JSON template - ```json - { - "CaptureVisionTemplates": [ - { - "Name" : "CV_0", - "ImageROIProcessingNameArray": ["TA_0" ] - } - ], - "TargetROIDefOptions" : [ - { - "Name" : "TA_0", - "TaskSettingNameArray": [ "BR_0" ] - } - ], - "BarcodeReaderTaskSettingOptions": [ - { - "Name" : "BR_0", - "BarcodeFormatIds" : ["BF_ONED", "BF_QR_CODE"] - } - ] - } - ``` - - * Apply the above settings following the article [Use Templates for Configuring Parameters]({{ site.features }}use-runtimesettings-or-templates.html#json-template). - -## Set Barcode Count - -The `ExpectedBarcodesCount` parameter controls the number of expected results of the recognized barcodes from a single image. The process will be stopped as soon as the count of successfully decoded barcodes reaches the expected amount. - -There are some suggestions on how to set the `ExpectedBarcodesCount`: - -- When your project is designed for decoding a **single** barcode per image or frame, the recommended `ExpectedBarcodesCount` is **1**. This will sharply improve the processing speed. -- When there are **n** barcodes in a single image or frame (**n** is a fixed number) and you'd like the barcode reader to decode **all of them**, the recommended `ExpectedBarcodesCount` is **n**. -- When the number of barcodes is unknown and you want to output **as many** barcode results as possible, you can set the `ExpectedBarcodesCount` to the **maximum possible value** of `ExpectedBarcodesCount`. -- When the number of barcodes is unknown and you want to output **at least one** barcode result as **soon** as possible, you can set the `ExpectedBarcodesCount` to **0**. The barcode reader will try to decode at least one barcode from the image. - -You can configure the parameter in two different ways, depending on your requirements. You can do it through `SimplifiedBarcodeReaderSettings`, or if it suits your needs better, you can opt for `JSON Template`. Below are examples illustrating both of these configuration methods: - -* Configure expected barcode count via `SimplifiedCaptureVisionSettings`. - -
    - >- JavaScript - >- C++ - >- Android - >- Objective-C - >- Swift - >- Python - >- C# - > -> -```javascript -// Obtain current runtime settings of `router` instance. Here we use `ReadSingleBarcode` as an example. You can change it to your own template name or the name of other preset template. -let settings = await router.getSimplifiedSettings("ReadSingleBarcode"); -// Specify the expected barcode count. -settings.barcodeSettings.expectedBarcodesCount = 1; -// Update the settings. -await router.updateSettings("ReadSingleBarcode", settings); -``` -> -```c++ -char szErrorMsg[256] = {0}; -// Obtain current runtime settings of `CCaptureVisionRouter` instance. -CCaptureVisionRouter* cvRouter = new CCaptureVisionRouter; -SimplifiedCaptureVisionSettings settings; -cvRouter->GetSimplifiedSettings(CPresetTemplate::PT_READ_BARCODES, &settings); -// Specify the expected barcode count. -settings.barcodeSettings.expectedBarcodesCount = 1; -// Update the settings. -cvRouter->UpdateSettings(CPresetTemplate::PT_READ_BARCODES, &settings, szErrorMsg, 256); -``` -> -```java -try { - // Obtain current runtime settings. `cvr` is an instance of `CaptureVisionRouter`. - // Here we use `EnumPresetTemplate.PT_READ_BARCODES` as an example. You can change it to your own template name or the name of other preset template. - SimplifiedCaptureVisionSettings captureVisionSettings = cvr.getSimplifiedSettings(EnumPresetTemplate.PT_READ_BARCODES); - captureVisionSettings.barcodeSettings.expectedBarcodesCount = 1; - // Update the settings. Remember to specify the same template name you used when getting the settings. - cvr.updateSettings(EnumPresetTemplate.PT_READ_BARCODES, captureVisionSettings); -} catch (CaptureVisionRouterException e) { - e.printStackTrace(); -} -``` -> -```objc -NSError *error; -// Obtain current runtime settings. `cvr` is an instance of `DSCaptureVisionRouter`. -// Here we use `EnumPresetTemplate.PT_READ_BARCODES` as an example. You can change it to your own template name or the name of other preset template. -DSSimplifiedCaptureVisionSettings *captureVisionSettings = [self.cvr getSimplifiedSettings:DSPresetTemplateReadBarcodes error:&error]; -captureVisionSettings.barcodeSettings.expectedBarcodesCount = 1; -// Update the settings. Remember to specify the same template name you used when getting the settings. -[self.cvr updateSettings:DSPresetTemplateReadBarcodes settings:captureVisionSettings error:&error]; -``` -> -```swift -do{ - // Obtain current runtime settings. `cvr` is an instance of `CaptureVisionRouter`. - // Here we use `EnumPresetTemplate.PT_READ_BARCODES` as an example. You can change it to your own template name or the name of other preset template. - let captureVisionSettings = try cvr.getSimplifiedSettings(PresetTemplate.readBarcodes.rawValue) - captureVisionSettings.barcodeSettings?.expectedBarcodesCount = 1 - // Update the settings. Remember to specify the same template name you used when getting the settings. - try cvr.updateSettings(PresetTemplate.readBarcodes.rawValue, settings: captureVisionSettings) -}catch{ - // Add code to do when error occurs. -} -``` -> -```python -cvr_instance = CaptureVisionRouter() -# Obtain current runtime settings of `CCaptureVisionRouter` instance. -err_code, err_str, settings = cvr_instance.get_simplified_settings(EnumPresetTemplate.PT_READ_BARCODES.value) -# Specify the expected barcode count. -settings.barcode_settings.expected_barcodes_count = 1 -# Update the settings. -err_code, err_str = cvr_instance.update_settings(EnumPresetTemplate.PT_READ_BARCODES.value, settings) -``` -> -```csharp -using (CaptureVisionRouter cvRouter = new CaptureVisionRouter()) -{ - SimplifiedCaptureVisionSettings settings; - string errorMsg; - // Obtain current runtime settings of `CCaptureVisionRouter` instance. - cvRouter.GetSimplifiedSettings(PresetTemplate.PT_READ_BARCODES, out settings); - // Specify the expected barcode count. - settings.barcodeSettings.expectedBarcodesCount = 1; - // Update the settings. - cvRouter.UpdateSettings(PresetTemplate.PT_READ_BARCODES, settings, out errorMsg); -} -``` - -* Configure barcode format via `JSON parameter template file` - * update parameter `ExpectedBarcodesCount` in your JSON template - ```json - { - "CaptureVisionTemplates": [ - { - "Name" : "CV_0", - "ImageROIProcessingNameArray": ["TA_0" ] - } - ], - "TargetROIDefOptions" : [ - { - "Name" : "TA_0", - "TaskSettingNameArray": [ "BR_0" ] - } - ], - "BarcodeReaderTaskSettingOptions": [ - { - "Name" : "BR_0", - "ExpectedBarcodesCount" : 1 - } - ] - } - ``` - * Apply the above settings following the article [Use Templates for Configuring Parameters]({{ site.features }}use-runtimesettings-or-templates.html#json-template). diff --git a/programming/features/control-terminate-phase-v10.5.2100.md b/programming/features/control-terminate-phase-v10.5.2100.md deleted file mode 100644 index fbb3c5ac..00000000 --- a/programming/features/control-terminate-phase-v10.5.2100.md +++ /dev/null @@ -1,146 +0,0 @@ ---- -layout: default-layout -title: Control the termination phase of Dynamsoft Barcode Reader SDK -description: This article describes how to terminate the barcode decoding task as needed. -needAutoGenerateSidebar: true -keywords: terminate timeout -breadcrumbText: Termination Control ---- - -# Control when to terminate a decoding process - -Typically, Dynamsoft Barcode Reader (DBR) will terminate a decoding process after the barcode is decoded or the process has failed. In some cases we may want the process to terminate earlier than that. To do this, we use either the parameter [ `TerminateSetting` ]({{ site.dcvb_parameters_reference }}barcode-reader-task-settings/terminate-setting.html) or the parameter [ `Timeout` ]({{ site.dcvb_parameters_reference }}capture-vision-template/timeout.html). The former specifies the stage to terminate the process while the latter specifies the maximum time allowed for the process. - -## TerminateSetting - -This parameter specifies a certain stage to terminate the barcode reader algorithm task. By default, the task will only terminate after all these stages are completed and the barcode is recognized. To terminate the task as early as possible, you have two options: - -First, you can set the `section` parameter alone to make the task exit after completing all stages in a specific section. - -Second, you can use the `section + stage` parameters to terminate the task immediately after completing a specific stage within a section. - -Below is an example illustrating how to configure parameter `TerminateSetting` via `JSON Template`. - -```json -{ - "CaptureVisionTemplates": [ - { - "Name" : "CV_0", - "ImageROIProcessingNameArray": ["TA_0" ] - } - ], - "TargetROIDefOptions" : [ - { - "Name" : "TA_0", - "TaskSettingNameArray": [ "BR_0" ] - } - ], - "BarcodeReaderTaskSettingOptions": [ - { - "Name" : "BR_0", - "TerminateSetting": - { - "Section": "ST_REGION_PREDETECTION", - "Stage": "IRUT_GRAYSCALE_IMAGE" - } - } - ] -} -``` - -Apply the above settings following the article [Use Templates for Configuring Parameters]({{ site.features }}use-runtimesettings-or-templates.html#json-template). - -## Timeout - -This parameter controls the timeout for an individual decoding process in milliseconds. When the timeout occurs, the decoding will be terminated. - -Allowed values are between 0 and 0x7fffffff. The default value is 10000. - -The timeout setting is helpful in multi-image decoding situations where some images may take a long time to process. With proper timeout, we can balance the tradeoff between speed and read rate. - -> The timeout setting is especially useful when decoding barcodes from consecutive video frames, where the same barcode appears in multiple frame images, and it takes much less time to read it in a clear frame, meaning blurry frames should be skipped fast. - -You can configure the parameter in two different ways, depending on your requirements. You can do it through `SimplifiedCaptureVisionSettings`, or if it suits your needs better, you can opt for `JSON Template`. Below are examples illustrating both of these configuration methods: - -* Configure timeout via `SimplifiedCaptureVisionSettings`. - -
    - >- JavaScript - >- C++ - >- Python - >- C# - > -> -```javascript -// Obtain current runtime settings of `router` instance. Here we use `ReadSingleBarcode` as an example. You can change it to your own template name or the name of other preset template. -let settings = await router.getSimplifiedSettings("ReadSingleBarcode"); -// Specify the timeout -settings.timeout = 1000; -// Update the settings to a specific template. -await router.updateSettings("ReadSingleBarcode", settings); -``` -> -```c++ -char szErrorMsg[256] = {0}; -// Obtain current runtime settings of `CCaptureVisionRouter` instance. -CCaptureVisionRouter* cvRouter = new CCaptureVisionRouter; -SimplifiedCaptureVisionSettings settings; -cvRouter->GetSimplifiedSettings(CPresetTemplate::PT_READ_BARCODES, &settings); -// Specify the timeout. -settings.timeout = 1000; -// Update the settings. -cvRouter->UpdateSettings(CPresetTemplate::PT_READ_BARCODES, &settings, szErrorMsg, 256); -``` -> -```python -cvr_instance = CaptureVisionRouter() -# Obtain current runtime settings of `CCaptureVisionRouter` instance. -err_code, err_str, settings = cvr_instance.get_simplified_settings(EnumPresetTemplate.PT_READ_BARCODES.value) -# Specify the timeout. -settings.timeout = 1000 -# Update the settings. -err_code, err_str = cvr_instance.update_settings(EnumPresetTemplate.PT_READ_BARCODES.value, settings) -``` -> -```csharp -using (CaptureVisionRouter cvRouter = new CaptureVisionRouter()) -{ - SimplifiedCaptureVisionSettings settings; - string errorMsg; - // Obtain current runtime settings of `CCaptureVisionRouter` instance. - cvRouter.GetSimplifiedSettings(PresetTemplate.PT_READ_BARCODES, out settings); - // Specify the timeout. - settings.timeout = 1000; - // Update the settings. - cvRouter.UpdateSettings(PresetTemplate.PT_READ_BARCODES, settings, out errorMsg); -} -``` - - -* Configure parameter `Timeout` via `JSON Template` - -```json -{ - "CaptureVisionTemplates": [ - { - "Name" : "CV_0", - "ImageROIProcessingNameArray": ["TA_0" ], - "Timeout":1000 - } - ], - "TargetROIDefOptions" : [ - { - "Name" : "TA_0", - "TaskSettingNameArray": [ "BR_0" ] - } - ], - "BarcodeReaderTaskSettingOptions": [ - { - "Name" : "BR_0" - } - ] -} -``` - -Apply the above settings following the article [Use Templates for Configuring Parameters]({{ site.features }}use-runtimesettings-or-templates.html#json-template). - diff --git a/release-notes/dbr-rn-11.md b/release-notes/dbr-rn-11.md index be31e542..19f4c9b2 100644 --- a/release-notes/dbr-rn-11.md +++ b/release-notes/dbr-rn-11.md @@ -10,6 +10,25 @@ noTitleIndex: true # Release Notes for Dynamsoft Barcode Reader - 11.x +## 11.2 (10/14/2025) + +### ✨ Key Highlights + +**AI-Powered Barcode Detection & Decoding** +- 🧠 **First-to-Market AI Localization**: Revolutionary `OneDLocalization` and `DataMatrixQRCodeLocalization` neural network models for superior detection of **blurred/low-resolution 1D codes** and **DataMatrix/QR codes with missing or damaged finder patterns** +- ⚡ **Specialized Decoders**: Cutting-edge `EAN13Decoder` and `Code128Decoder` models deliver unprecedented accuracy for **blurred and long-distance** scenarios +- 🔍 **Enhanced Clarity Processing**: Completely redesigned `OneDDeblur` model with superior **motion blur and focus blur** recovery algorithms +- 🎯 **Flexible Model Configuration**: Advanced `ModelNameArray` parameter enables on-demand model loading and precise selection for specific barcode scenarios + +**Precision Control** +- ⚙️ **Granular Deblur Methods**: Fine-tuned `DM_DEEP_ANALYSIS` with specialized method control - `OneDGeneral`, `TwoDGeneral`, and `EAN13Enhanced` for targeted optimization +- 🎯 **Smart Barcode Counting**: New `ExpectedBarcodesCount` parameter enables **format-specific quantity control** and **early termination optimization** for known-quantity scenarios +- 🔍 **Advanced Region Detection**: New `RPM_GRAY_CONSISTENCY` mode enables precise region detection based on **grayscale uniformity** and **local consistency** for document and label processing + +| Versions | Available Editions | +| -------- | ------------------ | +| 11.2.1000 | [C++]({{ site.cpp_release_notes}}cpp-11.html#1121000-10142025){:target="_blank"} / [.NET]({{ site.dotnet_release_notes }}dotnet-11.html#1121000-10142025){:target="_blank"} / [Python]({{ site.python_release_notes}}python-11.html#1121000-10142025){:target="_blank"} / [Java]({{ site.java_release_notes}}java-11.html#1121000-10142025){:target="_blank"} | + ## 11.0 (03/04/2025) ### Highlights diff --git a/release-notes/index.md b/release-notes/index.md index e4f73206..9f322598 100644 --- a/release-notes/index.md +++ b/release-notes/index.md @@ -9,6 +9,7 @@ permalink: /release-notes/index.html # Dynamsoft Barcode Reader SDK - Release Notes +- [Version 11.2 (10-14-2025)]({{ site.release_notes }}dbr-rn-11.html#112) - [Version 11.0 (03-04-2025)]({{ site.release_notes }}dbr-rn-11.html#110) - [Version 10.4 (07-23-2024)]({{ site.release_notes_v10 }}dbr-rn-10.html#104) - [Version 10.2 (01-16-2024)]({{ site.release_notes_v10 }}dbr-rn-10.html#102)