Dynamsoft Barcode Reader使用教程:如何使用参数优化Dynamsoft条码解码性能

Dynamsoft Barcode Reader SDK一款多功能的条码读取控件,只需要几行代码就可以将条码读取功能嵌入到Web或桌面应用程序。这可以节省数月的开发时间和成本。能支持多种图像文件格式以及从摄像机或扫描仪获取的DIB格式。使用Dynamsoft Barcode Reader SDK,你可以创建强大且实用的条形码扫描仪软件,以满足你的业务需求。

Dynamsoft Barcode Reader最新版

如何配置用于解码性能的模板

如果您从未尝试过Dynamsoft Barcode Reader SDK,则可以在在线条形码游乐场玩耍,只需更改模式即可直接比较性能差异。

 §£nbsp;è¨
此外,如果您是专家,则可以单击高级设置自行调整一系列参数。

为了方便开发人员,我向Github上传了五个有用的模板文件:

  • Speed.json
  • Balanced.json
  • Coverage.json
  • Morecoverage.json
  • Mostcoverage.json

解码速度还是解码精度可以权衡取舍,具体取决于特定的使用方案。

这是我的测试图像:

nbsp;±
我们来看一下使用不同模板的检测准确性和时间成本:
BarcodeReader.exe AllSupportedBarcodeTypes.png  license.txt  speed.jsonTotal barcode(s) found: 12. Time cost: 63 msBarcodeReader.exe AllSupportedBarcodeTypes.png  license.txt   balanced.jsonTotal barcode(s) found: 13. Time cost: 140 msBarcodeReader.exe AllSupportedBarcodeTypes.png  license.txt   coverage.jsonTotal barcode(s) found: 13. Time cost: 844 msBarcodeReader.exe AllSupportedBarcodeTypes.png  license.txt   morecoverage.jsonTotal barcode(s) found: 13. Time cost: 1610 msBarcodeReader.exe AllSupportedBarcodeTypes.png  license.txt   mostcoverage.jsonTotal barcode(s) found: 13. Time cost: 3156 ms

就我而言,要保证准确性和解码速度,最合适的模板是balance.json。

使用多线程可以加快多条形码解码的性能吗/strong>

按照我们的常识,解码单个条形码的时间成本应小于解码多个条形码的时间成本。因此,读取多个条形码的一种可能的优化方法是创建多个工作线程,以同时处理不同的条形码符 。

这是用于顺序解码一维和二维条形码的代码:

barcode_decoding(buffer, size, BF_CODE_39, 1, license, config);barcode_decoding(buffer, size, BF_QR_CODE, 1, license, config);barcode_decoding(buffer, size, BF_PDF417, 1, license, config);barcode_decoding(buffer, size, BF_DATAMATRIX, 1, license, config);

总时间成本为407毫秒:

Thread id: 22536. Type: CODE_39Thread id: 22536. Total barcode(s) found: 1. Time cost: 235 msThread id: 22536. Type: QR_CODEThread id: 22536. Total barcode(s) found: 1. Time cost: 47 msThread id: 22536. Type: PDF417Thread id: 22536. Total barcode(s) found: 1. Time cost: 62 msThread id: 22536. Type: DATAMATRIXThread id: 22536. Total barcode(s) found: 1. Time cost: 63 ms

为了优化解码性能,我可以创建四个线程来执行相同的操作:

int starttime = gettime();thread t1(barcode_decoding, buffer, size, BF_CODE_39, 1, license, config);thread t2(barcode_decoding, buffer, size, BF_QR_CODE, 1, license, config);thread t3(barcode_decoding, buffer, size, BF_PDF417, 1, license, config);thread t4(barcode_decoding, buffer, size, BF_DATAMATRIX, 1, license, config);t1.join();t2.join();t3.join();t4.join();int endtime = gettime();printf("Thread time cost: %d msnn", (endtime - starttime));

最终时间成本为265毫秒:

Thread id: 24024. Type: QR_CODEThread id: 24024. Total barcode(s) found: 1. Time cost: 78 msThread id: 17384. Type: DATAMATRIXThread id: 17384. Total barcode(s) found: 1. Time cost: 78 msThread id: 24264. Type: PDF417Thread id: 24264. Total barcode(s) found: 1. Time cost: 94 msThread id: 4060. Type: CODE_39Thread id: 4060. Total barcode(s) found: 1. Time cost: 265 msThread time cost: 265 ms

到目前为止,似乎还不错。但是,如果将多种条形码类型传递给Dynamsoft条形码解码API,则会发生神奇的事情:

barcode_decoding(buffer, size, BF_CODE_39 | BF_DATAMATRIX | BF_QR_CODE | BF_PDF417, 1, license, config);

它比您自己的多线程解决方案快:

Thread id: 20308. Type: PDF417Thread id: 20308. Type: QR_CODEThread id: 20308. Type: DATAMATRIXThread id: 20308. Type: CODE_39Thread id: 20308. Total barcode(s) found: 4. Time cost: 250 ms

原因是所有Dynamsoft条形码解码API均在线程中实现。因此,您无需创建线程来优化解码性能。

线程数如何影响Dynamsoft Barcode SDK性能/strong>

您可能已经注意到,有一个名为maxAlgorithmThreadCount的参数。我们可以通过增加线程数来提高SDK性能吗/span>

我根据硬件线程做了一个简单的测试:

const auto processor_count = std::thread::hardware_concurrency();int minimum_count = 1, minimum_timecost = 0;    for (int i = 0; i < processor_count; i++)    {        printf("Thread count: %d. ", i + 1);        int timecost = barcode_decoding(buffer, size, formats, i, license, config);        if (i == 0)        {            minimum_count = 1;            if (timecost > 0)            {                minimum_timecost = timecost;            }        }        else {            if (timecost < minimum_timecost)            {                minimum_count = i + 1;                minimum_timecost = timecost;            }        }    }    printf("Multi-thread best performance: thread_count = %d, timecost = %d nn", minimum_count, minimum_timecost);

每次我运行该应用程序时,都会得到不同的结果。通过使用我的测试图像,性能没有显着差异:

Thread count: 1. Thread id: 26376. Total barcode(s) found: 13. Time cost: 141 msThread count: 2. Thread id: 26376. Total barcode(s) found: 13. Time cost: 141 msThread count: 3. Thread id: 26376. Total barcode(s) found: 13. Time cost: 125 msThread count: 4. Thread id: 26376. Total barcode(s) found: 13. Time cost: 140 msThread count: 5. Thread id: 26376. Total barcode(s) found: 13. Time cost: 157 msThread count: 6. Thread id: 26376. Total barcode(s) found: 13. Time cost: 203 msThread count: 7. Thread id: 26376. Total barcode(s) found: 13. Time cost: 156 msThread count: 8. Thread id: 26376. Total barcode(s) found: 13. Time cost: 140 msMulti-thread best performance: thread_count = 3, timecost = 125

显然,一张测试图像没有任何意义。理想情况下,您应该使用图像数据集来衡量性能。因此,如果您有兴趣,现在就去动手吧。


想要购买Dynamsoft Barcode Reader正版授权,或了解更多产品信息请点击【咨询在线客服】

Dynamsoft Barcode Reader使用教程:如何使用参数优化Dynamsoft条码解码性能

标签:

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年6月27日
下一篇 2020年6月27日

相关推荐

发表回复

登录后才能评论