工业软件Halcon的常用功能及常用工具展示

news2025/3/17 6:56:55

工业软件Halcon的常用功能及常用工具展示

  • 1.BLOB+特征
  • 2.BLOB+差分+特征
  • 3.光度立体
  • 4.特征训练
  • 5. 测量拟合
  • 6. 频域+空间域结合法
  • 7.深度学习法
  • 总结

1.BLOB+特征

官方示例子:surface_scratch.hdev
该程序显示了通过局部阈值和形态学后处理提取表面划痕,一共分为三步:
1)获取图像;
2)分割图像,使用局部阈值进行分割;
3)形态学处理,选择大面积的区域,可视化分数划痕,通过形态学合并细分划痕,最后区分大小划痕。

输出的结果:

在这里插入图片描述
界面:

在这里插入图片描述
途中了解了一下局部阈值分割算子:dyn_threshold
dyn_threshold(OrigImage, ThresholdImage : RegionDynThresh : Offset, LightDark : )
参数:
OrigImage (input_object):原始图像
ThresholdImage (input_object):处理后图像(一般采用滤波处理)
RegionDynThresh (output_object):分割后区域
Offset (input_control):灰度值偏移量。
LightDark (input_control):提取区域类型( ‘dark’, ‘equal’, ‘light’, ‘not_equal’)
给定具体的条件,该算子可以分割出不同的区域:
在这里插入图片描述
ThresholdImage图可以通过mean_image, binomial_filter, gauss_filter等滤波方式处理。
滤波选择的掩膜尺寸越大,提取的区域越大。根据经验,掩膜大小选择应该是要提取目标直径的两倍。参数Offset不要设置0,否则将会提取到很多小的噪点区域,一般介于5-40最佳,其值越大,提取的区域越小。
示例代码和其子函数:

在这里插入图片描述
在这里插入图片描述
其中子函数的参数设置为:

在这里插入图片描述

在均值滤波后的四种不同的结果如下:

在这里插入图片描述

2.BLOB+差分+特征

例子:PCB电路板的缺陷检测
检测的步骤为:
1)进行灰度开运算,减少亮区;
2)进行灰度闭运算,增大亮区;
3)提取亮区和暗区,得到检测的缺陷。
代码为:

read_image (Image, 'pcb')
dev_close_window ()
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_display (Image)
gray_opening_shape (Image, ImageOpening, 7, 7, 'octagon')
gray_closing_shape (Image, ImageClosing, 7, 7, 'octagon')
dyn_threshold (ImageOpening, ImageClosing, RegionDynThresh, 75, 'not_equal')
dev_display (Image)
dev_set_color ('red')
dev_set_draw ('margin')
dev_display (RegionDynThresh)

界面:

在这里插入图片描述

运行的结果:

在这里插入图片描述

3.光度立体

光度立体法可以看作是2.5维,适用于检测金属物料上面的凹凸特征。利用该方法可以重建法向量,将灰度图变成曲率图。
Halcon中的算子为:

1)photometric_stereo (Images : HeightField, Gradient, Albedo : Slants, Tilts, ResultType, ReconstructionMethod, GenParamName, GenParamValue : )
其中:

  • Images:输入图像(4张)
  • HeightField:返回重建高度场
  • Gradient:返回表面的梯度场
  • Albedo: 表面的反射率
  • Slants:光源光线与摄像机光轴的夹角(下面有示意图)
  • Tilts: 光源光线投影与被测物主轴的夹角
  • ResultType: 请求结果类型(高度场/梯度场/反射率)
  • ReconstructionMethod: 重建方法类型
  • GenParamName: 一般参数名称
  • GenParamValue: 一般参数设置

2)derivate_vector_field(VectorField : Result : Sigma, Component : )
其中:

  • VectorField: 梯度场图像
  • Result: 返回平均曲率场图像
  • Sigma: 高斯系数
  • Component: 组件计算
    示例:药片外包装破损的检测
    光度立体法的代码:
read_image (Images, './blister_back_0' + [1:4])
for I := 1 to 4 by 1
    select_obj (Images, ObjectSelected, I)
    *wait_seconds (0.1)
endfor
Tilts := [6.1,95.0,-176.1,-86.8]
Slants := [41.4,42.6,41.7,40.9]
* 光度立体
photometric_stereo (Images, HeightField, Gradient, Albedo, Slants, Tilts, 'all', 'poisson', [], [])
* 梯度场转平均曲率场
derivate_vector_field (Gradient, Result, 1, 'mean_curvature')
*scale_image_max (Result, ImageScaleMax)
* 种子生长
regiongrowing (Result, Regions, 1, 1, 0.01, 250)
select_shape (Regions, SelectedRegions, 'area', 'and', 16332.6, 28629.5)
shape_trans (SelectedRegions, RegionTrans, 'convex')
union1 (RegionTrans, RegionUnion)
erosion_circle (RegionUnion, RegionErosion, 3.5)
reduce_domain (Result, RegionErosion, ImageReduced)
* 求图像的绝对值
abs_image (ImageReduced, ImageAbs)
threshold (ImageAbs, Regions1, 0.3, 0.5)
* 显示
count_obj (Regions1, Number)
if(Number>0)
   area_center (Regions1, Area, Row, Column)
   gen_circle_contour_xld (ContCircle, Row, Column, 20, 0, 6.28318, 'positive', 1)
   dev_set_color ('blue')
   dev_set_line_width (2)
   dev_display (Result)
   dev_display (ContCircle)    
endif

主要是利用光度立体法和梯度场转换为平均曲率场来检测缺陷,结果为:

在这里插入图片描述

4.特征训练

特征训练的方法要求训练样本必须完美无瑕疵,整体步骤为:

1)创建模型:create_texture_inspection_model或者读取模型:read_texture_inspection_model;
2)添加训练样本:add_texture_inspection_model_image;
3)查看样本get_texture_inspection_model_image
4)训练模型train_texture_inspection_model

案例:apply_texture_inspection_model.hdev

该示例程序展示了如何微调纹理检查模型。首先,使用一组无误差纹理图像创建并训练纹理检查模型;然后,对其中一个有缺陷的测试图像进行参数微调;最后,测试有缺陷和无缺陷图像的集合
首先,创建模型,添加训练样本(完好无损的图像):

TrainingImageIndices := [1,2]
TextureModelFilename := 'texture_model_carpet'
dev_open_window_fit_size (0, 0, Width, Height, -1, -1, WindowHandle1)
dev_display (Image)
create_texture_inspection_model ('basic', TextureInspectionModel)
for Index := 0 to |TrainingImageIndices| - 1 by 1
read_image (Image, 'carpet/carpet_' + TrainingImageIndices[Index]$'02')
dev_display (Image)
Message := '添加图片 ' + (Index + 1) + ' of ' + |TrainingImageIndices| + '训练准备'
dev_disp_text (Message, 'window', 12, 12, 'black', [], [])
add_texture_inspection_model_image (Image, TextureInspectionModel, Indices)
endfor

在这里插入图片描述
在这里插入图片描述

然后,初步设置参数后,开始训练:

*参数设定'patch_normalization''weber'对亮度鲁棒,‘none’需要亮度作为评判(默认)
set_texture_inspection_model_param(TextureInspectionModel, 'patch_normalization', 'weber')
Levels := [2,3,4]
set_texture_inspection_model_param (TextureInspectionModel, 'levels', Levels)
train_texture_inspection_model (TextureInspectionModel)
*查看样本参数'novelty_threshold',阈值,自动计算得到,若结果不理想,可以手动微调。
get_texture_inspection_model_param (TextureInspectionModel, 'novelty_threshold', NoveltyThreshold)
*之后get_texture_inspection_result_object读取'novelty_score_image''novelty_region'set_texture_inspection_model_param (TextureInspectionModel, 'gen_result_handle', 'true')

在这里插入图片描述

其次,对缺陷图像初测试,显示测试结果:

WindowWidth := 320
WindowHeight := 280
dev_open_window (0, 0, WindowWidth, WindowHeight, 'black', WindowHandle1)
set_display_font (WindowHandle1, 16, 'mono', 'true', 'false')
dev_open_window(0, WindowWidth + 8, WindowWidth, WindowHeight, 'black', WindowHandle2)
set_display_font (WindowHandle2, 16, 'mono', 'true', 'false')
dev_open_window(0, 2 * WindowWidth + 16, WindowWidth, WindowHeight, 'black', WindowHandle3)
set_display_font (WindowHandle3, 16, 'mono', 'true', 'false')
dev_open_window(WindowHeight + 50, WindowWidth / 2 + 8, 2 * WindowWidth, 2 * WindowHeight, 'black', WindowHandle4)
set_display_font (WindowHandle4, 16, 'mono', 'true', 'false')
WindowHandles := [WindowHandle1,WindowHandle2,WindowHandle3]
  for Index := 1 to 3 by 1
    ImageIndex := 5
        read_image (TestImage, 'carpet/carpet_' + ImageIndex$'02')
        *测试当前图像
    apply_texture_inspection_model (TestImage, NoveltyRegion, TextureInspectionModel, TextureInspectionResultID)
    get_texture_inspection_result_object (NovScoreImage, TextureInspectionResultID, 'novelty_score_image')
    get_texture_inspection_result_object (NovRegion, TextureInspectionResultID, 'novelty_region')
        count_obj (NovScoreImage, Number)
         for Level := 1 to Number by 1
                     CurrentWindow := WindowHandles[Level - 1]
                             dev_set_window (CurrentWindow)
                             dev_clear_window ()
        select_obj (NovScoreImage, NovScoreImageL, Level)
        select_obj (NovRegion, NovRegionL, Level)
        get_image_size (NovScoreImageL, Width, Height)
        dev_set_part (0, 0, Height - 1, Width - 1)
        dev_display (NovScoreImageL)
        Legend := 'Novelty region (level ' + Levels[Level - 1] + ')'
        dev_set_color ('red')
        dev_set_line_width (2)
        dev_display (NovRegionL)
        dev_disp_text (['Novelty score image (level ' + Levels[Level - 1] + ')','Novelty threshold: ' + NoveltyThreshold[Level - 1]$'.1f'], 'window', 12, 12, 'black', [], [])
        dev_disp_text (Legend, 'window', WindowHeight - 30, 12, 'white', ['box_color','shadow'], ['black','false'])
         endfor
    dev_set_window (WindowHandle4)
    dev_display (TestImage)
    dev_set_line_width (2)
    dev_set_color ('red')
    dev_display (NoveltyRegion)
    area_center (NoveltyRegion, Area, Row, Column)
    if (Index < 3)
        dev_disp_text ('Result', 'window', 12, 12, 'black', [], [])
    else
        dev_disp_text ('Final result', 'window', 12, 12, 'black', [], [])
    endif

在这里插入图片描述

最后,根据测试结果进行微调参数:

     if (Index == 1)
        Message[0] := '图像中有很多小错误.'
        Message[1] := '可以通过改变 novelty thresholds的值来调整灵敏度(sensitivity—)'
        Message[2] := '例如减少灵敏度参数的值'
        dev_disp_text (Message, 'window', 12, 12, 'black', [], [])
        set_texture_inspection_model_param (TextureInspectionModel, 'sensitivity', -10)
        get_texture_inspection_model_param (TextureInspectionModel, 'novelty_threshold', NoveltyThreshold)
     endif
 if (Index == 2)
        Message := '也可以通过直接操纵新颖性边界来单独调整单个级别的敏感度'
        dev_disp_text (Message, 'window', 12, 12, 'black', [], [])
        set_texture_inspection_model_param (TextureInspectionModel, 'sensitivity', 0)
        Offset := [25,10,30]
        get_texture_inspection_model_param (TextureInspectionModel, 'novelty_threshold', NoveltyThreshold)
        set_texture_inspection_model_param (TextureInspectionModel, 'novelty_threshold', Offset + NoveltyThreshold)
        get_texture_inspection_model_param (TextureInspectionModel, 'novelty_threshold', NoveltyThreshold)
    endif
  endfor 
for Level := 1 to |WindowHandles| by 1
    dev_set_window (WindowHandles[Level - 1])
    dev_clear_window ()
endfor
dev_set_window (WindowHandle4)
dev_clear_window ()

在这里插入图片描述
在这里插入图片描述

补充:
Patch:相邻像素的集合。
Novelty Score:在测试过程中,将测试图像的纹理特征与纹理检查模型进行比较,并计算它们的’novelty score’。 该值越大,单个纹理特征越不适合纹理检查模型的可能性越大。
Novelty Threshold:Novelty Score高于该阈值,则纹理有缺陷。
“ novelty_region”是通过组合不同金字塔等级的新颖性区域而生成的,即不同层级金字塔组成的交集区域。如果只有单层金字塔,那么该层的新颖性区域直接就是novelty_region。

5. 测量拟合

测量用到的算子:

gen_measure_rectangle2(Row, Column, Angle, Length1, Length2, Width, Height, ‘bilinear’, MeasureHandle)
该算子的参数:
Length1:半宽
Length2:半高
Width:测量图像的宽
Height:测量图像的高
measure_pairs(Fuse, MeasureHandle, 1, 1, ‘negative’, ‘all’, RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance)
Sigma:平滑参数
Threshold:最小边缘振幅
Transition:找的正边缘还是负边缘(第一个边缘)
Select :选第一条边,还是最后一条,还是所有的边
RowEdgeFirst:边缘对中的第一个边缘的行坐标
ColumnEdgeFirst:边缘对中第一个边缘的列坐标
AmplitudeFirst:边缘对中第一个边缘的幅度值(就是一阶导数)
RowEdgeSecond:边缘对中的第二个边缘的行坐标
ColumnEdgeSecond:边缘对中第二个边缘的列坐标
AmplitudeSecond:边缘对中第二个边缘的幅度值(就是一阶导数)
IntraDistance :边缘对中左右边缘之间的距离
InterDistance:相邻两个边缘对中心的的距离
measure_pairs(Image : : MeasureHandle, Sigma, Threshold, Transition, Select : RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance)
measure_pos (Fuse, MeasureHandle, 1, 30, ‘all’, ‘all’, RowEdge, ColumnEdge, Amplitude, Distance)
measure_pos(Image : : MeasureHandle, Sigma, Threshold, Transition, Select : RowEdge, ColumnEdge, Amplitude, Distance)

一维测量:

1.gen_measure_rectangle2 (Row, Column, Angle, Length1, Length2, Width, Height, ‘bilinear’, MeasureHandle)
2.measure_pairs (Fuse, MeasureHandle, 1, 1, ‘negative’, ‘all’, RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance)
3.close_measure (MeasureHandle)

结果:

在这里插入图片描述

测量助手:

在这里插入图片描述

拟合的示例:

首先提取边缘轮廓,然后进行阈值分割并提取骨架,最后生成轮廓。
read_image (Image, ‘fabrik’)
edges_image (Image, ImaAmp, ImaDir, ‘lanser2’, 0.5, ‘nms’, 12, 22)
threshold (ImaAmp, Edges, 1, 255)
skeleton (Edges, Skeleton)
gen_contours_skeleton_xld (Skeleton, Contours, 1, ‘filter’)
dev_display (Image)
dev_set_colored (6)
dev_display (Contours)

参数:

  • Image:原图
  • ImaAmp:边缘幅度图像
  • ImaDir:边缘方向图像
  • ‘lanser2’:边缘梯度算子
  • 0.5:平滑系数
  • ‘nms’:非极大值抑制
  • 12:比它小,就不是边缘
  • 22:比它大,就是边缘

结果:

在这里插入图片描述

6. 频域+空间域结合法

域结合空间,就是换一个角度看问题,傅里叶变换可以将一个信号函数,分解一个一个三角函数的线性组合。进行频域分析往往符合:
1)具有一定纹理特征的图像,纹理可以理解为条纹,如布匹、木板、纸张等材质容易出现;
2)需要提取对比度低或者信噪比低的特征;
3)图像尺寸较大或者需要与大尺寸滤波器进行计算,此时转换至频域计算,具有速度优势。因为空间域滤波为卷积过程(加权求和),频域计算直接相乘。

相关案例有:

  • 脏污检测(低通滤波,差分,线提取)

在塑料薄膜上有一些线条型的脏污,如下图所示,在空间域中向提取脏污的区域比较困难因为,方格会影响空间域的二值化,所以可以在频域中去处理它。
在这里插入图片描述
代码:

calculate_lines_gauss_parameters (43.5, [25,5], Sigma, Low, High)
read_image (Image, 'D:/1.png')
       decompose3 (Image, R, G, B)
       get_image_size(B, Width, Height)
       fft_generic (B, ImageFFT, 'to_freq', -1, 'none', 'dc_center', 'complex')
       gen_gauss_filter (ImageGauss, 100, 100, 0, 'n', 'dc_center', Width, Height)
       convol_fft (ImageFFT, ImageGauss, ImageConvol)
       fft_generic (ImageConvol, ImageFFT1, 'from_freq', 1, 'none', 'dc_center', 'byte')
       sub_image (B, ImageFFT1, ImageSub, 2, 100)
       lines_gauss (ImageSub, Lines, Sigma, Low, High, 'dark', 'true', 'gaussian', 'true')
       dev_display (B)
       dev_display (Lines)

结果:
在这里插入图片描述
在这里插入图片描述

其中,calculate_lines_gauss_parameters(根据线的最大宽度以及对比度计算出lines_gauss算子输入的Sigma、Low、High值)
calculate_lines_gauss_parameters( : : MaxLineWidth, Contrast : Sigma, Low, High)
MaxLineWidth (input_control) // lines_gauss要提取线条的最大宽度
Contrast (input_control) //lines_gauss要提取线的对比度。
Sigma (output_control) //获取用于lines_gauss输入的Sigma值
Low (output_control) //获取用于lines_gauss输入的Low 值
High (output_control) //获取用于lines_gauss输入的High 值

对于Contrast 参数:
Contrast 值不仅可以一个,也可以为两个:
当只选择一个值时,最小对比度将会默认为最大对比度的1/3,最小对比度越小,线条将会延伸到对比度较低的区域,即线条越长。反之,值越高,线条越短,但越突出。
当值为两个时,数组中的第二个值是要提取线的最小对比度,并且其值不能大于第一个值。比如:[20,10]。
lines_gauss(提取图像上的线条,提取的结果属于亚像素精度的XLD轮廓)
lines_gauss(Image , Lines ,Sigma, Low, High, LightDark, ExtractWidth, LineModel, CompleteJunctions )
Image (input_object) //输入图像
Lines (output_object) //检测线条(XLD)
Sigma (input_control) //高斯滤波值
Low (input_control) //滞后阈值分割的低阈值
High (input_control) //滞后阈值分割的高阈值
LightDark (input_control) //提取线条的类型,暗色还是亮色,(’dark’, ‘light’)
ExtractWidth (input_control) //是否提取线宽(‘false’,‘true’)
LineModel (input_control) //用来调整线条位置和宽度的线模型(‘bar-shaped’, ‘gaussian’, ‘none’, ‘parabolic’)
CompleteJunctions (input_control) //在断连的部分是否添加节点使线条连续(‘false’, ‘true’)

  • 检测表面微小凸起(高斯差分,灰度差,二值化)

如下图,使用频域处理细微的缺陷。

在这里插入图片描述

思路:首先,使用两个低通滤波器,进行相减后构造了一个带阻滤波器来提取缺陷分量;然后,读入图像,灰度化,转频域,进行滤波,转回空间域;最后在空间域上blob分析,并进行显示。结果:

在这里插入图片描述

相关参数:
gray_range_rect( Image , ImageResult , MaskHeight, MaskWidth: )
该函数用一个矩形掩膜计算图像中最大最小灰度的差,并体现到每个图像点,其中Image(in)用于被计算灰度值的图像;ImageResult(out)用于包含灰度值的图像;MaskHeight(in)用于滤波器掩模的高度;MaskWidth(in)用于滤波器掩模的宽度。在滤波后对图像进行 gray_range_rect (ImageFiltered, ImageResult, 10, 10)处理后(增强对比度,即亮部分)。

在这里插入图片描述
在这里插入图片描述

案例中通过两个高斯滤波器相减,构建一个带通滤波器,其函数GenGaussFilter为:GenGaussFilter(ImageFilter, Sigma1, Sigma2, Width, Height),常用于纹理缺陷检测。GenGaussFilter (ImageFilter, 2, 10, Width, Height)则是一个带通滤波器(或者“带阻滤波器”)——先通过高反差保留让中高频通过,然后通过高斯模糊抑制高频,最终让中频通过。

  • 测磨砂表面的缺陷(高斯滤波差分,分水岭,灰度共生矩阵)

由于磨砂表面粗糙、噪点多,影响二值化,如下图所示。因此首先使用频域高斯滤波进行差分;然后在空间域的blob分析使用分水岭域分割滤波后的图像;最后计算每个区域灰度共生矩阵,通过能量筛选缺陷。

在这里插入图片描述
在这里插入图片描述

cooc_feature_image(Regions, Image ,LdGray, Direction ,Energy, Correlation, Homogeneity, Contrast)函数用来计算图像的灰度共生矩阵,其中Regions(in)为要检查的区域,Image (in)为灰度图像,LdGray(in)为要区分的灰度值的数量(默认6),Direction (in)为矩阵的计算方向(‘0’,‘45’,‘90’,‘130’,‘mean’),Energy(out) 代表的是能量,Correlation(out)表示相关性,Homogeneity(out) 表示局部均匀性(熵),Contrast(out)为对比度(反差)。

能量(Energy):是对图像纹理的灰度变化稳定程度的度量,反应了图像灰度分布均匀程度和纹理粗细度。能量越大,表示灰度变化比较稳定,反映了纹理变化的均匀程度。对于灰度图来说,能量低说明灰度值低,对于彩色图来说,能量低说明光强低。
相关性(Correlation):表示纹理在行或者列方向的相似程度。相关性越大,相似性越高。
(熵)局部均匀性(Homogeneity):反映图像局部纹理的变化量(即复杂程度),熵值越大图像越复杂。
(反差)对比度(Contrast):表示矩阵的值的差异程度,也间接表现了图像的局部灰度变化幅度。反差值越大,图像中的纹理深浅越明显,表示图像越清晰;反之,则表示图像越模糊。

watersheds_threshold(Image ,Basins ,Threshold )算子:第一步:计算出分水岭(不使用该参数Threshold ),分割的盆地和调用算子watersheds得到的盆地是相同的;第二步:如果被一个分水岭分割的相邻盆地与对应分水岭的高度差小于Threshold ,盆地依次合并。假设B1和B2分别是两个相邻盆地的最小灰度值,W是盆地对应分水岭的最小灰度值。当满足以下条件时,两个盆地合并:max{W-B1,W-B2}<Threshold 。由此得到的盆地存储在Basins 变量中。

7.深度学习法

首先准备缺陷检测所需图片,然后编写代码,设置输入输出路径,设置参数,预处理数据集:
在这里插入图片描述
在这里插入图片描述
正样本:

在这里插入图片描述
负样本:
在这里插入图片描述
缺陷类型:

在这里插入图片描述
在这里选用Mnist类似的训练网络,将要测试的图像进行切块处理(和训练样本大小一致64 x 64)。由于是检测缺陷有无,所以切块样本集只要涵盖整张测试图像即可,这样可以节约检测时间。当然如果对节拍要求不严格,完全可以用分类网络将缺陷边界分割出来,只不过切块方式是逐像素的。最后,输入一张相机采集图,输出NGOK,如果NG则输出缺陷区域。

检测结果:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

传统算法检测缺陷:调试难度大,容易在检测不稳定情况下反复调参,且复杂缺陷误测多,兼容性差。
机器学习检测缺陷:一般使用类似MLP的一些单层神经网络,对缺陷特征进行训练分类,该方法需要事先提取出缺陷部分,一般用来与传统分割法搭配使用,达到缺陷检测分类的效果。
深度学习检测缺陷(打标签):一般需要客户提供大量的缺陷样本,而且缺陷种类越多、特征越不明显,需要的缺陷样本就越大。其次,打标签过程很难做到自动,需要手动辅助框出缺陷位置,工作量非常大。总结就是训练周期久,训练样本大,如果客户可以提供大量样本,那该方法是首选(半导体行业一般不会出现大量缺陷样品)。
深度学习检测缺陷(迁移学习法):该方法会成为后面工业领域检测瑕疵的一个大趋势,但是需要一些公司去收集各种行业的缺陷类型图片和训练的网络模型,并共享出来,然后可以使用迁移学习的方法学习别人训练好的模型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/864215.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MVVM下的Jetpack核心组件

前言 Jetpack 架构组件及 “标准化开发模式” 确立&#xff0c;意味着Android 开发已步入成熟阶段&#xff0c;只有对 MVVM 确有深入理解&#xff0c;才能自然而然写出标准化、规范化代码。 本次笔者会浅入浅出的介绍以下内容&#xff0c;由于它是一个我的学习总结记录&#…

动力节点|老杜Vue完整版教程,轻松掌握前端火爆框架

Vue拥有非常好的可用性和可组合性、试图像用户提供最少的API和尽可能的自然行为。 Vue之所以如此受欢迎和火爆&#xff0c;主要是由于以下几个原因&#xff1a; 1. 更简单的使用方式&#xff1a;Vue的API设计易于学习和使用&#xff0c;他的响应式系统可以自动追踪依赖关系&am…

[Idea热部署]两秒钟学会热部署

两者同时适配好,保证没有问题 哈&#xff0c;谢谢各位同志的阅读&#xff0c;然后呢如果觉得本文对您有所帮助的话&#xff0c;还给个免费的赞捏 Thanks♪(&#xff65;ω&#xff65;)&#xff89;

信息安全:防火墙技术原理与应用.

信息安全&#xff1a;防火墙技术原理与应用. 防火墙是网络安全区域边界保护的重要技术。为了应对网络威胁&#xff0c;联网的机构或公司将自己的网络与公共的不可信任的网络进行隔离&#xff0c;其方法是根据网络的安全信任程度和需要保护的对象&#xff0c;人为地划分若干安全…

安装Qt选择组件

最近在做Qt相关的开发&#xff0c;首先搭建开发环境&#xff0c;刚开始对组件这块不是很熟悉&#xff0c;需要了解这方面的知识&#xff0c;写下来主要是方便记住关于选择组件的说明&#xff0c;Qt版本是最新的长期维护版本&#xff0c;版本号&#xff1a;6.5.2 一、选择要安装…

辽宁线上3D三维虚拟工厂生产仿真系统应用场景及优势

工厂虚拟仿真是一种基于计算机技术和虚拟现实技术的数字化解决方案&#xff0c;它可以通过模拟工厂中的设备、流程和操作&#xff0c;来为工程师和操作人员提供了一个沉浸式的虚拟环境&#xff0c;帮助他们更好地了解和优化工厂生产过程。 工厂VR三维可视化技术为工业生产提供了…

warning: remember to run ‘libtool --finish /usr/local/1/php-7.4.29/libs

ubuntu上php7.4.33编译安装完成后警告报错&#xff0c;如下所示 # /usr/local/apache2/apr/build-1/libtool --finish /usr/local/soft/php-7.4.33/libs # vim /etc/ld.so.conf.d/local.conf /usr/local/lib /usr/lib64 # ldconfig 或者安装依赖服务&#xff0c;重新编译 #…

typecho 全站开启Https证书访问

原文地址:https://zhuoyue360.com/jyjl/107.html typecho 全站开启Https证书访问 https://zhuoyue360.com/ 网站已经很久没更新了, 最近决定重新把博客捡起来. 今天把ssl证书倒腾了一下,做个小记录! 1. 前提步骤 拥有SSL证书已将域名解析到服务器上&#xff0c;并配置了 Ngi…

电子企业MES管理系统的选型要素有哪些

随着全球电子行业的快速发展&#xff0c;电子企业面临着日益激烈的竞争和不断变化的市场需求。为了应对这种挑战&#xff0c;许多电子企业开始考虑引入MES管理系统解决方案来提高生产效率和管理水平。然而&#xff0c;在选择适合的MES生产管理系统之前&#xff0c;电子企业需要…

CTF之流量分析之密码文件

题目地址&#xff1a;BUUCTF在线评测 题目&#xff1a; 深夜里&#xff0c;Hack偷偷的潜入了某公司的内网&#xff0c;趁着深夜偷走了公司的秘密文件&#xff0c;公司的网络管理员通过通过监控工具成功的截取Hack入侵时数据流量&#xff0c;但是却无法分析出Hack到底偷走了什…

java面试总结(一)SnailClimb/JavaGuide

晚上标题党太多&#xff0c;拿着各种免费资料来收费&#xff0c;各种加微信购买解密密码的充斥百度搜索。 博主无套路分享&#xff1a; 阿里10w字Java面试手册 JAVA核心面试知识整理 1000道专题Java面试题手册 Java 基础 知识点/面试题总结 : (必看 Java 基础常见知识点…

c语言每日一练(5)

前言&#xff1a;每日一练系列&#xff0c;每一期都包含5道选择题&#xff0c;2道编程题&#xff0c;博主会尽可能详细地进行讲解&#xff0c;令初学者也能听的清晰。每日一练系列会持续更新&#xff0c;暑假时三天之内必有一更&#xff0c;到了开学之后&#xff0c;将看学业情…

创建和使用角色(RHCE)

题目&#xff1a; 创建和使用角色 根据下列要求&#xff0c;在 /home/curtis/ansible/roles 中创建名为 apache 的角色&#xff1a; httpd 软件包已安装&#xff0c;设为在系统启动时启用并启动 防火墙已启用并正在运行&#xff0c;并使用允许访问 Web 服务器的规则 模板文件 i…

【办公自动化】使用Python一键提取PDF中的表格到Excel

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

【调整奇数偶数顺序】

调整奇数偶数顺序 1.题目 输入一个整数数组&#xff0c;实现一个函数&#xff0c; 来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分&#xff0c; 所有偶数位于数组的后半部分。 2.题目分析 这道题首先用到的方法是冒泡排序的思想&#xff0c;首先通过冒泡排序…

Redis安装配置远程连接

1. yum 安装 redis&#xff1a; 直接使用命令&#xff0c;将 redis 安装到 linux 服务器中&#xff1a; yum -y install redis 2. 启动 redis&#xff1a; 在 xshell 里&#xff0c;可以使用下面命令&#xff0c;以后台方式启动 redis&#xff1a; [rootVM-8-17-centos /]…

Linux网络编程套接字(上)

目录 预备知识 理解源IP地址和目的IP地址 &#xff1a; 认识端口号&#xff1a; 理解"端口号"和"进程ID" 认识TCP/UDP协议 TCP: UDP : 网络字节序 Socket编程接口 Socket常见API&#xff1a; Sockaddr结构: 简单的UDP网络程序 实现一个简单…

全面讲解|DCMM数据管理能力成熟度及各地政策汇总

信息技术与经济社会的交汇融合引发了数据爆发式增长。数据蕴含着重要的价值&#xff0c;已成为国家基础性战略资源&#xff0c;正日益对全球生产、流通、分配、消费活动以及经济运行机制、社会生活方式和国家治理能力产生重要影响。数据价值发挥的前提是管理好数据&#xff0c;…

断点重传、错误自动重传,优秀的文件传输工具应该具备这些特性

在当今的信息时代&#xff0c;文件传输是我们日常工作和生活中不可或缺的一项功能。无论是发送照片、视频、文档等个人文件&#xff0c;还是交换设计图、合同、报告等商业文件&#xff0c;我们都需要依靠各种文件传输工具来实现。但是&#xff0c;文件传输并不总是一帆风顺的&a…

innovus 报告多边形floorplan的boundary坐标

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球 历史文章: 常用dbGet命令 dbGet快速入门 使用"Cut Rectilinear"功能可以​调整floorplan形状&#xff0c;使其变成非矩形多边形&#xff08;polygon&#xff09;。​ …