自动检测安瓿填充水平

这段代码是使用Halcon软件编写的,用于检测安瓿(ampoules,一种小型玻璃容器,通常用于存放液体药品)的填充水平。代码的主要目的是确保安瓿中的液体填充量在规定的容差范围内

dev_close_window ()
dev_update_off ()
read_image (Image, ‘ampoules/ampoules_01’)
get_image_size (Image, Width, Height)
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
dev_set_line_width (2)
dev_set_draw (‘margin’)
set_display_font (WindowHandle, 16, ‘mono’, ‘true’, ‘false’)
*

  • Create a model for the ampoule head to align the measure handle
    gen_rectangle1 (Rectangle, 230, 280, 317, 330)
    reduce_domain (Image, Rectangle, ImageModel)
    create_shape_model (ImageModel, ‘auto’, 0, 0, ‘auto’, ‘auto’, ‘use_polarity’, ‘auto’, ‘auto’, ModelID)
  • Initialize the measure handle
    gen_measure_rectangle2 (0, 0, rad(90), 75, 20, Width, Height, ‘bilinear’, MeasureHandle)
    Tolerance := 15
  • Determine the fill level
    NumImages := 8
    for Index := 1 to NumImages by 1
    read_image (Image, ‘ampoules/ampoules_’ + Index$‘.2d’)
    ColumnEdges := []
    FillLevelHeight := []
    *
    find_shape_model (Image, ModelID, 0, 0, 0.7, 0, 0.1, ‘least_squares’, 0, 0.9, Row, Column, Angle, Score)
    MeanRow := mean(Row)
    RefLevel := MeanRow - 160
    • Display tolerance area
      dev_display (Image)
      dev_set_line_width (1)
      dev_set_color (‘white’)
      gen_rectangle2 (AcceptLevel, RefLevel, mean(Column), 0, 30 + (max(Column) - min(Column)) / 2, Tolerance)
      dev_display (AcceptLevel)
      dev_set_line_width (2)
    • Determine fill level of each ampoule
      Errors := 0
      for Idx := 0 to |Score| - 1 by 1
      translate_measure (MeasureHandle, MeanRow - 135, Column[Idx])
      • Search for the topmost edge
        measure_pos (Image, MeasureHandle, 2, 7, ‘all’, ‘first’, RowEdge, ColumnEdge, Amplitude, Distance)
        FillLevelHeight := [FillLevelHeight,RowEdge]
        ColumnEdges := [ColumnEdges,ColumnEdge]
        gen_cross_contour_xld (Cross, RowEdge, ColumnEdge, 15, 0)
        gen_rectangle2 (FillLevel, RowEdge, ColumnEdge, 0, 28, 20)
        if (abs(FillLevelHeight[Idx] - RefLevel) >= Tolerance)
        gen_rectangle2 (ChamberSingle, MeanRow - 133, Column[Idx], 0, 35, 90)
        gen_cross_contour_xld (Cross, FillLevelHeight[Idx], ColumnEdges[Idx], 15, 0)
        gen_rectangle2 (FillLevel, FillLevelHeight[Idx], ColumnEdges[Idx], 0, 28, 20)
        Errors := Errors + 1
        dev_set_color (‘red’)
        dev_display (ChamberSingle)
        disp_message (WindowHandle, ‘NG’, ‘image’, FillLevelHeight[Idx] - 50, ColumnEdges[Idx] - 10, ‘red’, ‘false’)
        else
        disp_message (WindowHandle, ‘OK’, ‘image’, FillLevelHeight[Idx] - 50, ColumnEdges[Idx] - 10, ‘green’, ‘false’)
        dev_set_color (‘green’)
        endif
        dev_display (FillLevel)
        dev_display (Cross)
        endfor
    • Check, whether the fill level is within the allowed range - does not deviate too much
    • from average fill level
    • Display statistics
      if (Errors > 0)
      disp_message (WindowHandle, Errors + ’ BAD’, ‘window’, 10, 12, ‘red’, ‘true’)
      else
      disp_message (WindowHandle, ‘All OK’, ‘window’, 10, 12, ‘forest green’, ‘true’)
      endif
      if (Index < NumImages)
      disp_continue_message (WindowHandle, ‘black’, ‘true’)
      stop ()
      endif
      endfor

close_measure (MeasureHandle)
clear_shape_model (ModelID)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述程序运行结果如下:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以下是代码的详细解释:

初始化:关闭当前窗口,关闭图像更新,读取第一张安瓿图像,并获取图像尺寸。

打开窗口:根据图像尺寸打开一个新窗口,并设置窗口的字体和线条宽度。

创建形状模型:在第一张图像中定义一个矩形区域(Rectangle),用于创建形状模型(ModelID),这个模型用于后续的图像匹配。

初始化测量工具:生成一个测量矩形(MeasureHandle),设置容差(Tolerance)。

循环处理多张图像:代码将循环读取多张安瓿图像(共8张),并对每张图像进行以下操作:

使用形状模型在当前图像中搜索与模型匹配的区域。
计算匹配区域的中心位置,并确定参考水平线(RefLevel)。
显示容差区域(AcceptLevel),用于比较填充水平是否在允许的范围内。
确定填充水平:对于每张图像中的每个匹配区域,代码将:

使用测量工具(MeasureHandle)搜索液体的上边缘。
如果填充水平超出了容差范围,将显示错误标记(红色),并计数错误数量。
显示统计信息:在窗口中显示错误数量或全部通过的消息。

暂停和继续:如果当前图像不是最后一张,代码将暂停并等待用户继续。

清理:在处理完所有图像后,关闭测量工具和清除形状模型。

这段代码解决了在生产线上自动检测安瓿填充水平的问题,确保填充量符合质量标准。通过自动化这一过程,可以提高生产效率,减少人为错误,并确保产品质量。

相关推荐

  1. mybatis-Plus 的自动填充

    2024-07-16 09:08:02       46 阅读
  2. Mybatis-plus 自动填充字段

    2024-07-16 09:08:02       28 阅读
  3. Mybtisplus对时间字段进行自动填充

    2024-07-16 09:08:02       60 阅读
  4. 【SpringBoot】SpringAOP实现公共字段自动填充

    2024-07-16 09:08:02       19 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 09:08:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 09:08:02       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 09:08:02       58 阅读
  4. Python语言-面向对象

    2024-07-16 09:08:02       69 阅读

热门阅读

  1. Ubuntu下安装各种软件以及问题

    2024-07-16 09:08:02       27 阅读
  2. 第三节SHELL脚本中的变量与运算(1.6-1.7.3)

    2024-07-16 09:08:02       24 阅读
  3. ArcGIS Pro SDK (九)几何 4 折线

    2024-07-16 09:08:02       20 阅读
  4. 如何保护你的网络安全?

    2024-07-16 09:08:02       23 阅读
  5. 北京交通大学学报-社会科学版

    2024-07-16 09:08:02       22 阅读
  6. 【AI应用探讨】—生成对抗网络(GAN)应用场景

    2024-07-16 09:08:02       26 阅读
  7. QT教程-十四, QSpacerItem(可伸缩的空间项)

    2024-07-16 09:08:02       21 阅读
  8. 初学者指南:如何搭建和配置 Nginx 服务器

    2024-07-16 09:08:02       23 阅读
  9. Canvas

    2024-07-16 09:08:02       23 阅读