65.9K
CodeProject 正在变化。 阅读更多。
Home

Dynamsoft 条形码 SDK 的新功能:解码直接零件标记 (DPM) 代码。

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2019 年 10 月 23 日

CPOL
viewsIcon

4605

在本文中,我们将讨论 DPM 码带来的独特挑战,以及 Dynamsoft Barcode Reader 如何通过几行代码即可克服这些挑战。

直接零件标记 (DPM) 是一种永久标记设备产品信息的工艺。标记的信息通常以条形码的形式编码,例如 Data Matrix 和 QR Code。自 7.2 版本起,Dynamsoft Barcode Reader SDK 已增加了对 DPM DataMatrix 码解码的支持。

在本文中,我们将讨论 DPM 码带来的独特挑战,以及 Dynamsoft Barcode Reader 如何通过几行代码即可克服这些挑战。

DPM 的应用场景

DPM 可高效地在零件生命周期内进行跟踪,尤其是在恶劣环境下。它在以下行业中被广泛采用:

  • 电子制造
  • 汽车
  • 航空航天
  • 电信
  • 医疗设备和器械

解码 DPM 码的挑战

在零件上标记条形码的常用方法包括激光、点针和电化学蚀刻,这增加了算法的复杂性。

有四种可能的情况:

  1. 颜色和对比度 - 前景色和背景色过于相似,难以区分
  2. 点 - 如果点分布不均匀,容易导致解码错误
  3. 表面缺陷 - 零件表面在其生命周期中可能会损坏,导致条形码无法读取
  4. 光照 - 零件图像可能在缺乏光照的暗环境中拍摄,而光照对于增强前景和背景之间的对比度至关重要(例如仓库)

在 C/C++ 中解码 DPM 条形码

Dynamsoft Barcode Reader SDK 基于 C/C++ 构建。默认设置不支持 DPM 解码。

步骤 1. 下载试用版 SDK

您可以在此处下载试用版:Dynamsoft Barcode Reader v7.2

步骤 2. 实例化条形码读取器对象

CBarcodeReader reader;

步骤 3. 更新参数

根据在线文档,有两个与 DPM 模式相关的参数:

runtimeSettings->furtherModes.dpmCodeReadingModes[0] = DPMCRM_GENERAL;
runtimeSettings->localizationModes[0] = LM_STATISTICS_MARKS;

要支持 DPM,请在实例化条形码读取器对象后更新参数。

char sError[512];
PublicRuntimeSettings* runtimeSettings = new PublicRuntimeSettings();
reader.GetRuntimeSettings(runtimeSettings);
runtimeSettings->furtherModes.dpmCodeReadingModes[0] = DPMCRM_GENERAL;runtimeSettings->localizationModes[0] = LM_STATISTICS_MARKS;
reader.UpdateRuntimeSettings(runtimeSettings, sError, 512);

步骤 4. 获取试用版许可证密钥

注意:需要有效的许可证密钥。您可以通过注册新的 Dynamsoft 帐户在此处获取免费试用版许可证。在用 CMake 编译项目之前,请设置一个有效的许可证。

reader.InitLicense("LICENSE-KEY");

获取完整的 C++ 代码

https://github.com/dynamsoft-dbr/cmake

在 Python 中解码 DPM 条形码

基于 C/C++ API,我们可以创建一个开源项目,提供 CPython 的封装代码,让开发者能够用几行 Python 代码快速构建条形码读取器应用程序。

步骤 1. 构建 Python 条形码模块

获取Python 条形码扩展的源代码,并按照以下步骤为 **Windows**、**Linux** 和 **macOS** 平台构建和安装 Python 模块。

Windows

创建用于定位 Visual Studio 2015 常用工具的系统环境变量

SET VS90COMNTOOLS=%VS140COMNTOOLS%

src/setup.py 中更新库路径

dbr_lib_dir = r'<Dynamsoft\Barcode Reader 7.2>\Components\C_C++\Lib'
dbr_dll = r'<Dynamsoft\Barcode Reader 7.2>\Components\C_C++\Redist\x64'

构建和安装模块

cd src
python2/3 setup.py build install

Linux 和 macOS

导出您使用的库路径

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<YOUR-LIBRARY-PATH>

构建和安装模块

cd src
python2/3 setup.py build install

步骤 2. 创建 BarcodeReader 对象

要从图像文件解码条形码,代码片段如下:

from dbr import DynamsoftBarcodeReader
dbr = DynamsoftBarcodeReader()
dbr.initLicense('LICENSE-KEY')
results = dbr.decodeFile(fileName, dbr.BF_ALL)
for result in results:
    print('barcode format: ' + result[0])
    print('barcode value: ' + result[1])

这是一个示例图像。

步骤 3. 更新算法参数以启用 DPM

Dynamsoft Barcode Reader SDK 支持 JSON 格式的参数模板作为输入。您可以输出默认参数,并在 Python 中找到相关的属性进行更新。

params = dbr.getParameters()
print(params)

设置属性值

  1. 将参数 JSON 字符串转换为 JSON 对象
    import json
    json_obj = json.loads(params)
  2. 更新与 DPM 相关的属性值
    templateName = json_obj['ImageParameter']['Name']
    json_obj['ImageParameter']['DPMCodeReadingModes'][0]['Mode'] = 'DPMCRM_GENERAL'
    json_obj['ImageParameter']['LocalizationModes'][0]['Mode'] = 'LM_STATISTICS_MARKS'
    
  3. 将 JSON 对象转换为字符串,并更新参数以优化条形码算法
    params = json.dumps(json_obj)
    ret = dbr.setParameters(params)

步骤 4. 运行代码

我们可以成功解码直接零件标记 DataMatrix 码。

完整的 Python 代码

from dbr import DynamsoftBarcodeReader
dbr = DynamsoftBarcodeReader()
dbr.initLicense('LICENSE-KEY')
 
params = dbr.getParameters()
print(params)
 
import json
json_obj = json.loads(params)
# Update JSON object
templateName = json_obj['ImageParameter']['Name']
# DPM
json_obj['ImageParameter']['DPMCodeReadingModes'][0]['Mode'] = 'DPMCRM_GENERAL'
json_obj['ImageParameter']['LocalizationModes'][0]['Mode'] = 'LM_STATISTICS_MARKS'
# Convert JSON object to string
params = json.dumps(json_obj)
# Set parameters
ret = dbr.setParameters(params)
 
results = dbr.decodeFile('dpm.jpg', dbr.BF_ALL)
for result in results:
    print('barcode format: ' + result[0])
    print('barcode value: ' + result[1])

https://github.com/dynamsoft-dbr/python/blob/7.x/examples/command-line/test.py

使用 OpenCV 构建 GUI 应用程序

GUI 应用程序比控制台应用程序更容易显示条形码定位。将 OpenCV 图像缓冲区传递给 dbr.decodeBuffer() 方法,并使用 cv2.imshow() 渲染条形码定位结果。

# results = dbr.decodeFile('dpm.jpg', dbr.BF_ALL)
# for result in results:
#     print('barcode format: ' + result[0])
#     print('barcode value: ' + result[1])

import cv2
image = cv2.imread('dpm.jpg', 1)
results = dbr.decodeBuffer(image, dbr.BF_ALL, templateName)

thickness = 2
color = (0,255,0)
for result in results:
    print("barcode format: " + result[0])
    print("barcode value: " + result[1])
    x1 = result[2]
    y1 = result[3]
    x2 = result[4]
    y2 = result[5]
    x3 = result[6]
    y3 = result[7]
    x4 = result[8]
    y4 = result[9]

    cv2.line(image, (x1, y1), (x2, y2), color, thickness)
    cv2.line(image, (x2, y2), (x3, y3), color, thickness)
    cv2.line(image, (x3, y3), (x4, y4), color, thickness)
    cv2.line(image, (x4, y4), (x1, y1), color, thickness)

cv2.imshow("Localization", image)
cv2.waitKey(0)

现在,条形码解码应用程序看起来更好。

尝试在线演示

如果您不想编写代码,请随时尝试在线条形码演示

相关文章

Dynamsoft Barcode Reader v7.2 新增对直接零件标记 (DPM) 的支持

技术支持

如果您对 Dynamsoft Barcode Reader SDK 有任何疑问,请随时联系support@dynamsoft.com

发布历史

v7.2, 2019/09/24

新内容

  • 增加了更多条形码格式
    1. GS1 Databar (Omnidirectional, Truncated,
      Stacked, Stacked Omnidirectional, Limited,
      Expanded, Expanded Stacked)
    2. PatchCode
    3. Maxicode (mode 2-5)
    4. Micro PDF417
    5. Micro QR
    6. GS1 COMPOSITE (OneD
      和 PDF417/Micro PDF 417 的组合)
    7. 非标准条形码
  • 增加了读取 DPM 码的能力。可以通过开启 PublicRuntimeSettings->furtherMode-> DPMCodeReadingModes 结构并将 LM_STATISTICS_MARKS 添加到 PublicRuntimeSettings->localizationModes 来启用。
  • 需要许可证才能获取中间结果,原始图像除外。
  • ExtendedResult 结构中添加了一个参数 `clarity`,用于显示已解码条形码区域的清晰度。
  • 对于 .NET,添加了一个方法 GetModeArgument(),用于获取模式参数的参数值。
  • 对于 C/C++,添加了一个方法 DBR_GetModeArgument()/GetModeArgument(),用于获取模式参数的参数值。
  • 对于 Java,添加了一个方法 getModeArgument(),用于获取模式参数的参数值。

已改进

  • 提高了 PDF417 的解码速度。
  • 提高了对圆柱状变形的 QR 和 Data Matrix 的解码能力。

已修复

  • 修复了小 bug
© . All rights reserved.