Dynamsoft 条形码 SDK 的新功能:解码直接零件标记 (DPM) 代码。
在本文中,我们将讨论 DPM 码带来的独特挑战,以及 Dynamsoft Barcode Reader 如何通过几行代码即可克服这些挑战。
直接零件标记 (DPM) 是一种永久标记设备产品信息的工艺。标记的信息通常以条形码的形式编码,例如 Data Matrix 和 QR Code。自 7.2 版本起,Dynamsoft Barcode Reader SDK 已增加了对 DPM DataMatrix 码解码的支持。
在本文中,我们将讨论 DPM 码带来的独特挑战,以及 Dynamsoft Barcode Reader 如何通过几行代码即可克服这些挑战。
DPM 的应用场景
DPM 可高效地在零件生命周期内进行跟踪,尤其是在恶劣环境下。它在以下行业中被广泛采用:
- 电子制造
- 汽车
- 航空航天
- 电信
- 医疗设备和器械

解码 DPM 码的挑战
在零件上标记条形码的常用方法包括激光、点针和电化学蚀刻,这增加了算法的复杂性。
有四种可能的情况:
- 颜色和对比度 - 前景色和背景色过于相似,难以区分
- 点 - 如果点分布不均匀,容易导致解码错误
- 表面缺陷 - 零件表面在其生命周期中可能会损坏,导致条形码无法读取
- 光照 - 零件图像可能在缺乏光照的暗环境中拍摄,而光照对于增强前景和背景之间的对比度至关重要(例如仓库)
在 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)

设置属性值
- 将参数 JSON 字符串转换为 JSON 对象import json json_obj = json.loads(params) 
- 更新与 DPM 相关的属性值templateName = json_obj['ImageParameter']['Name'] json_obj['ImageParameter']['DPMCodeReadingModes'][0]['Mode'] = 'DPMCRM_GENERAL' json_obj['ImageParameter']['LocalizationModes'][0]['Mode'] = 'LM_STATISTICS_MARKS' 
- 将 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
新内容
- 增加了更多条形码格式- GS1 Databar (Omnidirectional, Truncated,
 Stacked, Stacked Omnidirectional, Limited,
 Expanded, Expanded Stacked)
- PatchCode
- Maxicode (mode 2-5)
- Micro PDF417
- Micro QR
- GS1 COMPOSITE (OneD
 和 PDF417/Micro PDF 417 的组合)
- 非标准条形码
 
- GS1 Databar (Omnidirectional, Truncated,
- 增加了读取 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


