Halcon学习—深度学习~应用训练的模型


*推理程序:调用model_best.hdl推理test目录下测试图像,结果放在result目录;
TestImageDir := 'test/'
ConfidenceThreshold := 0.9
dev_update_off()
dev_close_window ()
read_dl_model ('model_best.hdl', DLModelHandle)  //读取预训练模型
set_dl_model_param (DLModelHandle, 'batch_size', 1)  //设置模型参数,batch_size将数据集分为较小的数据子集,称为批处理
GpuId := 0
if (GpuId > 0)
    set_dl_model_param (DLModelHandle, 'gpu', GpuId)
endif
get_dl_model_param(DLModelHandle, 'image_dimensions', ImageDimensions)  //获取图像的ImageDimensions
get_dl_model_param(DLModelHandle, 'class_ids', ClassIDs)  //获取ClassIDs
file_exists('classes.txt', FileExists)  
if(FileExists)
    dlt_read_classnames ('classes.txt', ClassNames)  //读取ClassNames
    ClassNames := ['background', ClassNames]  //设置classNames
endif
ResultDir := 'result/'  
file_exists(ResultDir, FileExists)
if(FileExists)
    remove_dir_recursively (ResultDir)  //将已存在的result删除
    *remove_dir_recursively (ResultDir + 'labels/')
endif
make_dir (ResultDir)  //生成目录
*make_dir (ResultDir + 'labels/') 
list_image_files (TestImageDir, 'default', ['recursive'], ImageFiles)  //获得目录下所有 图片 文件
read_image (Image, ImageFiles[0])  //读取第一张图片
get_image_size(Image, Width, Height)  //获取图片的大小
tuple_min2(Width, Width, Min)  //计算两个元组的元素最小值。
Scale := Width / Min
dev_open_window(0, 0, Width  / Scale, Height  / Scale, 'black', WindowHandle)
dev_set_draw ('margin')
set_font(WindowHandle, 'Consolas-32')
dev_set_line_width(1)
Colors := ['red', 'green', 'blue', 'cyan', 'magenta', 'blue violet', 'firebrick', 'navy', 'yellow green', 'orange', 'forest green', 'cornflower blue', 'plum', 'tan', 'yellow', 'cadet blue', 'light blue', 'khaki']
create_dict (DLSample)  //设置一个新字典
MinArea := 10
tics := []
for Index := 0 to |ImageFiles|-1 by 1
    read_image (Image, ImageFiles[Index])
    count_seconds(Start)
    zoom_image_size (Image, ImagePreprocessed, ImageDimensions[0], ImageDimensions[1], 'constant')  //图像缩放到定尺寸
    convert_image_type (ImagePreprocessed, ImagePreprocessed, 'real')  //转换图片的类型为:real
    scale_image (ImagePreprocessed, ImagePreprocessed, 1, -127)  //缩放图像的灰度值。
    set_dict_object (ImagePreprocessed, DLSample, 'image')  //在字典中添加一个键/对象对。
    apply_dl_model (DLModelHandle, DLSample, [], DLResult)  //在一组图像上应用基于深度学习的网络以进行推理。
    get_dict_object (SegImage, DLResult, 'segmentation_image')  //从字典中检索与键关联的对象。
    get_dict_object (Confidence, DLResult, 'segmentation_confidence')  
    count_seconds(End)
    tics := [tics, (End - Start)*1000]  //计算测试时间
    dev_clear_window()
    dev_display (ImagePreprocessed)  
    Text := []
    for I := 1 to |ClassIDs|-1 by 1  
        gen_empty_region (Region)  //空数组
        threshold (SegImage, Region, I, I)  //阈值分割
        connection (Region, ConnectedRegions)  //连通区域
        select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', MinArea, 99999)  //选择面积在1-99999的区域
        union1 (SelectedRegions, Region)  //返回所有输入区域的并集。
        area_center (Region, Area, Row, Column)  //返回区域的面积、宽、高
        if (Area > 0)  //面积大于零,显示面积,注意这款里是所有缺陷面积的总和
            if (|ClassNames|)
                Text[|Text|] := ClassNames[I] + ': ' + Area$'6d'
            else
                Text[|Text|] := 'Class' + (I) + ': ' + Area$'6d'
            endif   
        endif
        dev_set_color(Colors[I-1])
        dev_display (Region)        
    endfor
    dev_disp_text (Text, 'window', 'top', 'left', 'black', [], [])  //Text的显示设置
    parse_filename (ImageFiles[Index], BaseName, Extension, Directory)  //将文件名解析为目录,基本文件名和扩展名
    dump_window (WindowHandle, 'png', ResultDir + BaseName)  //将窗口内容写入文件
    *convert_image_type (SegImage, SegImage, 'byte')
    *write_image(SegImage, 'png', 0, ResultDir + 'labels/' + BaseName)
endfor
tuple_mean(tics[1:(|tics|-1)], ImageProcTimeMs)  //返回一个数字元组的平均值
Text := 'infer: ' + ImageDimensions[0] + '×' + ImageDimensions[1] + '×' + ImageDimensions[2] + '×' + |ImageFiles|
Text[|Text|] := 'speed: ' + ImageProcTimeMs$'.1f' + ' ms/image' 
dev_disp_text (Text, 'window', 'center', 'left', 'blue', 'box', 'true')  
dump_window (WindowHandle, 'png', 'speed')  


参考文献:

1.https://www.cnblogs.com/zzyzxb/p/12855936.html

2.http://www.skcircle.com/?id=1282

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值