Dynamsoft Barcode Reader 6.0 is on the way. The major upgrade version improves the performance of barcode detection and recognition dramatically. It is over two times faster than version 5.2. In this post, I will disclose some new features and demonstrate the corresponding APIs.
Dynamsoft Barcode Reader SDK v6.0 Preview
Parameter templates
The new barcode SDK version aims to simplify API usage by dynamically loading customized parameter templates. A template is just a JSON file:
{ "Version": "1.0", "ImageParameters": { "Name": "CUSTOM", "Timeout": 2147483647, "MaxImageDimension": 4000000, "PDFRasterDPI": 300, "ImageType": "AutoDetection", "TextFilterMode": "Enable", "MinImageDimensionToFilterText": 1000000, "RegionPredetectionMode": "Enable", "MinImageDimensionToPredetectRegion": 1000000, "LocalizationMode": "Lines", "BarcodeFormatIds": "ALL", "MaxBarcodesCount": 2147483647, "MaxThreadCount": 4, "DeblurLevel": 9, "Pages": "", "BarcodeInvertMode": "DarkOnLight" } }
The key “Name” is necessary. Once you set a pair of key and value, it will overwrite the default one.
You can create as many as templates you like, and then add them to a global setting file default.settings.json:
{ "Version": "1.0", "GlobalParameters": { "Name": "GLOBAL_DEFAULT", "MaxThreadCount": 4 }, "ParameterTemplateArray": [ "custom.json", "custom1.json", "custom2.json", ] }
Use function LoadSettingsFromFile() to load the global setting file.
int iRet = reader.LoadSettingsFromFile(templatePath, szErrorMsg, 256);
The templatePath has to be an absolute path. Usually, we put executable files and templates together. Use following C++ code to get the base path and compose the absolute path:
char szErrorMsg[256]; char basePath[255] = ""; _fullpath(basePath, argv[0], sizeof(basePath)); // Get the directory int iLast = 0; for (int i = 0; ; i++) { char tmp = basePath[i]; if (tmp == '\\') { iLast = i; } else if (tmp == '\0') { break; } } char templatePath[1024]; strncpy_s(templatePath, basePath, iLast); // Get the full path const char* pszSettingFile = "\\templates\\default.settings.json"; strcat_s (templatePath, pszSettingFile);
API changes
The template feature is pretty convenient and flexible in my view. According to different scenes and cases, I don’t need always to modify my code. The only thing I need to do is to adjust the parameters in JSON file. To make the customized template work, set the template name when calling barcode detection API.
iRet = reader.DecodeFile(pszImageFile, "CUSTOM");
If you just provide a file name, the method will load default settings internally.
There is also some code difference between 5.2 and 6.0 when getting the barcode results.
CMake: how to copy template directory to the output folder
After building the project, you have to copy the templates folder to the target directory if you use a path relative to the executable file. The command is copy_directory:
add_custom_command(TARGET BarcodeReader POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory "${PROJECT_SOURCE_DIR}/templates" $<TARGET_FILE_DIR:BarcodeReader>/"templates" )
Performance comparison: 5.2 vs. 6.0
Let’s take a glimpse of the performance comparison.
DBR v5.2
PS G:\cmake> .\build\Debug\BarcodeReader.exe G:\cmake\images\AllSupportedBarcodeTypes.tif Barcode Reader Version 5.2 Total barcode(s) found: 13. Total time spent: 0.219 seconds
DBR v6.0
PS F:\cmake\build> .\Debug\BarcodeReader.exe F:\cmake\images\AllSupportedBarcodeTypes.tif Barcode Reader Version 6.0 Total barcode(s) found: 13. Total time spent: 0.094 seconds
Dynamsoft Barcode Reader 6.0 is apparently the winner that has better performance and flexibility.
Source Code
https://github.com/dynamsoft-dbr/cmake/tree/6.0-preview
The post The Preview of Dynamsoft Barcode Reader v6.0 for Windows appeared first on Code Pool.