这段代码是一个用于比较不同类型数据码(如GS1 DataMatrix、QR Code和Aztec Code)的解码结果的脚本。它使用了一种Halcon语言。
ParameterSets := []
ParameterSets := [ParameterSets,‘GS1 DataMatrix’,‘Data Matrix ECC 200’,‘datacode/gs1datamatrix/gs1datamatrix_generated_’,‘standard_recognition’]
ParameterSets := [ParameterSets,‘GS1 QR Code’,‘QR Code’,‘datacode/gs1qrcode/gs1qrcode_generated_’,‘standard_recognition’]
ParameterSets := [ParameterSets,‘GS1 Aztec Code’,‘Aztec Code’,‘datacode/gs1aztec/gs1aztec_generated_’,‘enhanced_recognition’]
*
- Constant variables
StatusHeight := 300
StatusWidth := 800
Scale := 1.0
ScaleInv := 1. / Scale
Colors := [‘black’,‘magenta’,‘black’,‘black’,‘forest green’,gen_tuple_const(10,‘black’)]
NumImages := 3
NumParams := 4
FNC1Separator := ‘\x1D’ - Initialization
dev_update_off ()
dev_close_window ()
dev_open_window (0, 0, 360, 256, ‘white’, WindowHandle)
set_display_font (WindowHandle, 16, ‘mono’, ‘true’, ‘false’)
dev_set_draw (‘margin’)
dev_set_color (‘green’)
dev_set_line_width (3)
for ParameterSetIndex := 0 to |ParameterSets| - NumParams by NumParams
GS1DataCodeType := ParameterSets[ParameterSetIndex]
GenDataCodeType := ParameterSets[ParameterSetIndex + 1]
ImageFilePrefix := ParameterSets[ParameterSetIndex + 2]
DefaultParameters := ParameterSets[ParameterSetIndex + 3]
*
* Create a GS1 and a non-GS1 data code reader to compare their results
create_data_code_2d_model (GS1DataCodeType, ‘default_parameters’, DefaultParameters, GS1DataCodeHandle)
create_data_code_2d_model (GenDataCodeType, ‘default_parameters’, DefaultParameters, GenDataCodeHandle)
for I := 1 to NumImages by 1
* Read a symbol image
read_image (Image, ImageFilePrefix + I$‘.2d’)
*
* Read the symbol both as a GS1 and as a non-GS1 symbol
find_data_code_2d (Image, SymbolXLDs, GenDataCodeHandle, [], [], ResultHandles, GenDecodedStrings)
find_data_code_2d (Image, SymbolXLDs, GS1DataCodeHandle, [], [], ResultHandles, GS1DecodedStrings)
*
* Escape the FNC1 character in the non-GS1 result to make
* it more apparent
tuple_split (GenDecodedStrings, FNC1Separator, Substrings)
if (|Substrings| > 1)
GenDecodedStrings := sum(Substrings[0:|Substrings| - 2] + ‘’) + Substrings[|Substrings| - 1]
endif
*
* Visualize results
get_image_size (Image, Width, Height)
set_system (‘flush_graphic’, ‘false’)
dev_set_window_extents (-1, -1, StatusWidth, Scale * Height + StatusHeight)
dev_set_part (-12, 0, Height + ScaleInv * StatusHeight - 13, ScaleInv * StatusWidth - 1)
dev_clear_window ()
dev_display (Image)
dev_display (SymbolXLDs)
Message := GenDataCodeType + ’ vs. ’ + GS1DataCodeType + ’ data interpretation’
disp_message (WindowHandle, Message, ‘window’, 12, 12, ‘black’, ‘false’)
Message := ‘’ + GenDataCodeType + ’ Data:’
Message := [Message,’ ’ + GenDecodedStrings]
Message := [Message,’ ‘]
Message := [Message,’’ + GS1DataCodeType + ’ Data*:‘]
Message := [Message,’ ’ + GS1DecodedStrings]
Message := [Message,’ ‘]
Message := [Message,’ ‘]
Message := [Message,’ *) The data is split into several GS1 element strings, ‘]
Message := [Message,’ each containing an application identifier (AI, a’]
Message := [Message,’ number enclosed in parentheses) and the element data’]
set_system (‘flush_graphic’, ‘true’)
disp_message (WindowHandle, Message, ‘window’, 12 + Scale * Height, 12, Colors, ‘false’)
if ((ParameterSetIndex < |ParameterSets| - NumParams) or (I < NumImages))
disp_continue_message (WindowHandle, ‘black’, ‘true’)
stop ()
endif
endfor
*
* Release memory allocated by the data code reader
clear_data_code_2d_model (GenDataCodeHandle)
clear_data_code_2d_model (GS1DataCodeHandle)
endfor
*
datamatrix:
qrcode
aztec
以下是程序运行结果
datamatrix:
QR code
aztec
以下是代码的主要功能和步骤的解释:
参数集定义:
ParameterSets 是一个数组,用于存储不同数据码类型的名称、生成类型、图像文件前缀和默认参数。
常量变量定义:
StatusHeight 和 StatusWidth 定义了状态栏的高度和宽度。
Scale 和 ScaleInv 用于图像缩放。
Colors 定义了用于显示不同信息的颜色。
NumImages 和 NumParams 定义了要处理的图像数量和参数集的数量。
FNC1Separator 定义了用于分隔非GS1结果中FNC1字符的分隔符。
初始化:
dev_update_off 和 dev_close_window 用于关闭设备更新和关闭窗口。
dev_open_window 打开一个新的窗口用于显示图像和结果。
set_display_font 设置显示字体。
dev_set_draw、dev_set_color 和 dev_set_line_width 设置绘图属性。
循环处理每个参数集:
循环遍历 ParameterSets,每次处理一个参数集。
对于每个参数集,创建两个数据码模型,一个用于GS1数据码类型,另一个用于通用数据码类型。
读取和解码图像:
循环读取每个图像文件,并使用两个数据码模型解码图像。
使用 find_data_code_2d 函数解码图像,并获取解码结果。
处理非GS1结果中的FNC1字符:
如果非GS1解码结果中包含FNC1字符,则将其替换为 ,以便更清晰地显示。
可视化结果:
使用 dev_display 显示图像和解码结果。
使用 disp_message 显示解码数据和相关信息。
循环结束条件:
如果还有更多的参数集或图像要处理,则显示继续消息并暂停。
释放资源:
在处理完每个参数集后,使用 clear_data_code_2d_model 释放数据码模型占用的内存。
这段代码的目的是比较不同数据码类型的解码结果,特别是在处理GS1标准数据码时,可能会有不同的解码策略和结果。通过可视化比较,用户可以直观地看到不同数据码类型和解码策略的影响。