1. 使用场景
- 同种类型的二维码,比如大小、码制、工艺都一样的
- 需要识别多个,多个大批量识别
- 对作业时间有要求,工业效率有要求
2. 方式选取
- 作业时间有要求就不能采用普通的识别方式
- 因为码制相同,工艺相同,可以采用训练参数来进行设定搜寻二维码的
- 再次正式使用时,加载训练好的参数,用训练好的参数进行解码
3. 训练解码参数
#查找图片存放的文件夹
file_exists ('image/newca', FileExists)
if(not FileExists)
Message := '要训练的路径不存在'
dev_disp_text (Message, 'window', 'top', 'left', 'black', [], [])
return()
endif
#查找要训练的图片
list_image_files ('image/newca', ['png','jpg','bmp'], [], ImageFiles)
if (|ImageFiles| = 0)
Message := '要训练的图片不存在'
dev_disp_text (Message, 'window', 'top', 'left', 'black', [], [])
return()
endif
#创建矩阵二维码的默认解析二维码参数 查找默认设定为尽可能的多寻找二维码
create_data_code_2d_model ('Data Matrix ECC 200', 'default_parameters', 'maximum_recognition', DataCodeHandle)
#设定查找参数 二维码是黑色的 背景是白色的
set_data_code_2d_param (DataCodeHandle, 'polarity', 'dark_on_light')
dev_open_window (0, 0, 1500, 300, 'black', WindowID)
for Index := 0 to |ImageFiles|-1 by 1
dev_clear_window()
#根据文件名加载单个图片
read_image(Image, ImageFiles[Index])
#使用9*9的矩形画笔增强原始图片 黑的更黑,白的更白 增加对比对使轮廓更清晰,把二维码从图形中凸显出来
emphasize (Image, image,9, 9, 1)
#提升总体灰度,比如原来图片灰度分布在20-220,使用max后拉伸至 0-255 也是为了对比度拉出来
scale_image_max (image, image)
#这个最前面加个train代表训练 后面使它的参数 是个数组可以在训练的时候指定其他查找要求,比如这个就是要求查找50个,如果实在没有停止
find_data_code_2d (image, SymbolXLDs, DataCodeHandle, ['train','stop_after_result_num'],['all',50], ResultHandles, DecodedDataStrings)
count_obj (SymbolXLDs, Number)
if(Number
4.使用训练参数搜索图片中的二维码
#读取训练好的解码参数
read_data_code_2d_model ('2d_data_code_model.dcm', DataCodeHandle)
dev_close_window ()
dev_open_window (0, 0, 1500, 300, 'black', WindowID)
#读取要作业的图片
read_image (Image, 'D:/Image__2023-01-10__09-13-20工作.bmp')
#预处理图片 提高对比度
emphasize (Image, image,9, 9, 1)
scale_image_max (image, image)
#开始使用参数读取图片中的二维码
find_data_code_2d (image, SymbolXLDs, DataCodeHandle,'stop_after_result_num',50, ResultHandles, DecodedDataStrings)
count_obj (SymbolXLDs, Number)
clear_data_code_2d_model(DataCodeHandle)
5.原始读取二维码与训练参数读取对比
搜寻耗时1.2S,碰到少于预估数量的,会到4-5S在工业生产中不可忍受。
使用训练参数读取二维码耗时、超时都可控。
机房租用,北京机房托管,大带宽租用,IDC机房服务器主机租用托管-价格及服务咨询 www.e1idc.net