Halcon联合MFC的粤康码实时识别

记录大三疫情下作品,先展示一下最终成品
视频展示 点我 点我!

演示视频

一、设计目的

随着新冠疫情的全球爆发,疫情防控成为各国政府的重中之重。而为了进一步加强疫情防控,中国政府于2020年推出了“粤康码”(即粤健康码)系统,该系统通过绿、黄、红三种不同颜色的码来表示个人的健康状态,从而实现对疫情的有效管控。

然而,粤康码的大量使用也给相关工作带来了一定的压力。比如,当人流量比较大时,人工查验粤康码需要耗费大量的时间和人力,效率较低。为了解决这一问题,我们可以利用计算机视觉技术对粤康码进行自动识别。

在计算机视觉领域中,Halcon是一个强大的工具包,它具有高精度、高效率、易于使用等优点,适用于多种应用场景。因此,我们可以利用Halcon对粤康码进行识别。

二、设计思路及Halcon代码展示

具体实现过程如下:

首先,我们需要加载图像,获取摄像头采集到的视频流图像,并对每一帧图像进行处理。

dev_update_window ('off')
* Image Acquisition 01: Code generated by Image Acquisition 01
open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', '[0] USB2.0 HD UVC WebCam', 0, -1, AcqHandle)
grab_image_start (AcqHandle, -1)
while (true)
    grab_image_async (Image, AcqHandle, -1)
*读图
get_system_time (MSecond, Second, Minute, Hour, Day, YDay, Month, Year)
dev_close_window ()
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
dev_display (Image)
rgb1_to_gray (Image, GrayImage)

使用Halcon的函数定位粤康码在图像中的区域,例如find_data_code_2d等提取出其中的粤康码区域。

*1.识别二维码区域
create_data_code_2d_model ('QR Code', 'default_parameters', 'maximum_recognition', DataCodeHandle) 
set_data_code_2d_param (DataCodeHandle, 'polarity', 'light_on_dark')
find_data_code_2d (GrayImage,SymbolXLDs,DataCodeHandle, 'train', 'all', ResultHandles, DecodedDataStrings) 
dev_display (Image)
tuple_regexp_match (DecodedDataStrings, '"c":"G"', Matches1)
tuple_regexp_match (DecodedDataStrings, '"c":"Y"', Matches2)
tuple_regexp_match (DecodedDataStrings, '"c":"R"', Matches3)
Matches:=[Matches1,Matches2,Matches3]
if (Matches==[])
    
else
    if (Matches[0]='"c":"G"')
    dev_display (Image)
    dev_disp_text ('绿码', 'window', 'top', 'left', 'black', [], [])

判断粤康码的时间是否是实时,防止他人用截图蒙混过关。

*2.识别时间是否过期
   *找出时间区域
   *将xld转成region
    gen_region_contour_xld (SymbolXLDs, Region, 'filled')
    area_center (Region, Area, Row, Column)
    smallest_circle (Region, Row1, Column1, Radius)
    gen_rectangle2 (Rectangle, Row-Radius*0.97, Column, 0, Radius*0.95, Radius*0.15)
    reduce_domain (Image, Rectangle, ImageReduced2)
    *二值化选出数字
    rgb1_to_gray (ImageReduced2, GrayImage1)
    threshold (GrayImage1, Regions2,0, 170)
    shape_trans (Regions2, RegionTrans, 'convex')
    orientation_region (RegionTrans, Phi)
    vector_angle_to_rigid (Row, Column, Phi, Row, Column, Phi, HomMat2D)
    gen_rectangle2 (Rectangle3, Row-Radius*0.97, Column, Phi, Radius*0.95, Radius*0.15)
    reduce_domain (Image, Rectangle3, ImageReduced3)
    rgb1_to_gray (ImageReduced3, GrayImage2)
    threshold (GrayImage2, Regions2,0, 175)
    connection (Regions2, ConnectedRegions2)
    area_center (Regions2, Area1, Row1, Column1)
    select_shape (ConnectedRegions2, SelectedRegions2, 'area', 'and', Area1/22, Area1/7)
    sort_region (SelectedRegions2, SortedRegions, 'first_point', 'true', 'column')
    *OCR识别数字
    read_ocr_class_mlp ('Industrial_0-9A-Z_Rej.omc', OCRHandle)
    do_ocr_multi_class_mlp (SortedRegions, ImageReduced2, OCRHandle, Class, Confidence)
    *与系统时间比较是否过期
tuple_length (Class, Length)
if (Length==10)
    tuple_number (Class[0]+Class[1], Number1)
    tuple_number (Class[2]+Class[3], Number2)
    tuple_number (Class[4]+Class[5], Number3)
    tuple_number (Class[6]+Class[7], Number4)
    tuple_number (Class[8]+Class[9], Number5)
    if (Number1==Month and Number2==Day and Number3==Hour and Number4==Minute)
    dev_disp_text ('二维码时间通过', 'window', 'top', 'center', 'black', [], [])

对粤康码进行解码,得到其中的信息。由于粤康码是一种二维码,我们可以使用Halcon中的读码算法对其进行解码。解码后,我们可以获取其中包含的个人信息、健康状态等。

在这里插入图片描述
最后,我们可以将识别结果显示出来,方便相关工作人员进行查看和统计。

*3.识别核酸时间
      name:=['24','48','72']
    *识别

        inner_circle (Region, Row2, Column2, Radius1)
        gen_rectangle2 (Rectangle1, Row2+3*Radius1, Column2-Radius1*0.94, Phi, Radius1*0.5, Radius1*0.3)
        area_center (Rectangle1, Area1, Row3, Column3)
        reduce_domain (Image, Rectangle1, ImageReduced)
        binary_threshold (ImageReduced, Region2, 'max_separability', 'dark', UsedThreshold)
        area_center (Region2, Area2, Row4, Column4)
        reduce_domain (ImageReduced, Region2, ImageReduced1)   
        read_class_mlp ('he suan', MLPHandle1)
        decompose3 (ImageReduced1, r,g,b)
        trans_from_rgb (r,g,b,h,s,v, 'hsv')
        intensity (ImageReduced1, r, Mean1, Deviation1)
        intensity (ImageReduced1, g, Mean2, Deviation2)
        intensity (ImageReduced1, b, Mean3, Deviation3)
        intensity (ImageReduced1, h, Mean4, Deviation4)
        intensity (ImageReduced1, s, Mean5, Deviation5)
        intensity (ImageReduced1, v, Mean6, Deviation6)
        classify_class_mlp (MLPHandle1, [Mean1,Mean2,Mean3,Mean4,Mean5,Mean6], 1, Class, Confidence)
        clear_class_mlp (MLPHandle1)  
     *显示识别结果
      tuple_real (Area1, Area1)
      tuple_real (Area2, Area2)
      cu:=Area2/Area1
      
        if (Confidence>0.7 and cu>0.4)
            

            if (Class=0)
            disp_message (WindowHandle, '有24小时核酸记录', 'window', 'top', 'right', 'black', 'true')
            wait_seconds (1)
            elseif(Class=1)
                disp_message (WindowHandle, '有48小时核酸记录', 'window', 'top', 'right', 'black', 'true')
                wait_seconds (1)
            else
                disp_message (WindowHandle, '有72小时核酸记录', 'window', 'top', 'right', 'black', 'true')
                wait_seconds (1)
            endif
            
        else
            disp_message (WindowHandle, '未检测出核酸记录 或 核酸记录模糊请重试', 'window',  'top', 'right', 'black', 'true')
            wait_seconds (1)
  
        endif
    else
        dev_disp_text ('二维码过期', 'window', 'top', 'center', 'black', [], [])
        wait_seconds (1)
    endif
        else
        dev_disp_text ('二维码模糊', 'window', 'top', 'center', 'black', [], [])
        wait_seconds (1)
    endif
elseif (Matches[1]='"c":"Y"')
    dev_disp_text ('黄码', 'window', 'top', 'left', 'black', [], [])
    wait_seconds (1)
else
    dev_disp_text ('红码', 'window', 'top', 'left', 'black', [], [])
    wait_seconds (1)
endif

总的来说,基于Halcon的粤康码识别技术,可以大大提高粤康码的查验效率和准确性,帮助政府更好地管理疫情。当然,由于疫情的变化和人工智能技术的不断更新,我们也需要不断优化和改进这一技术,以更好地适应现实需求。

三、Halcon与MFC联合封装

首先在VS中新建一个MFC框架,并将以上的Halcon文件导出C++文件。
在这里插入图片描述

然后,在MFC中创建一个对话框,将图像显示在对话框中,同时添加一个按钮,用于触发粤康码识别操作。当用户点击识别按钮时,使用Halcon对图像进行识别处理,识别出图像中的粤康码。将识别出的粤康码显示在MFC框架中,可以使用一个静态文本框或者消息框来显示识别结果。
在这里插入图片描述

最后,添加一些如保存识别结果、对识别结果进行数据统计和分析的功能。

四、Halcon代码及MFC软件封装开源

原创开源下载
https://download.csdn.net/download/m0_63821417/87620312

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: 基于HALCON联合C的开发方式,可以实现高效、可靠的机器视觉应用。 HALCON是一种功能强大的机器视觉库,提供了丰富的图像处理和分析算法。而C语言是一种通用的编程语言,具有广泛的应用领域。将HALCON与C语言结合使用,可以充分发挥两者的优势,实现更复杂的图像处理任务。 在开发过程中,可以使用C语言编写程序的框架和逻辑,然后调用HALCON提供的函数完成图像处理的实际操作。HALCON提供了丰富的函数接口,方便开发人员进行图像的获取、预处理、分析和识别等操作。 需要注意的是,使用HALCON联合C进行开发,需要先安装HALCON的开发环境,并将HALCON的库文件和头文件正确配置到C语言开发环境中。然后,可以在C语言的开发环境中调用HALCON提供的函数,实现相关的图像处理功能。 通过HALCON联合C的开发方式,可以灵活地应对不同的图像处理需求。同时,C语言的高效性和HALCON丰富的算法支持,可以在开发过程中提供更好的性能和效果。因此,这种联合开发方式在工业视觉、自动化检测等领域具有广泛的应用前景。 ### 回答2: Halcon是一款机器视觉开发软件,与C语言可以进行联合开发。基于Halcon联合C语言的开发,可以实现更加灵活和高效的机器视觉应用。 首先,在使用Halcon进行图像处理和分析时,可以调用C语言中的一些功能来增强其处理能力。例如,使用C语言的数学库可以进行更复杂的数值计算,如矩阵运算、统计分析等。而Halcon本身对于图像的处理速度较慢,可以通过调用C语言的图像处理库来加速图像处理的速度。此外,C语言还可以用于与外部硬件进行通信,如相机、传感器等的接口控制。 另外,Halcon与C语言的联合开发还可以实现更加高级的功能和应用。通过C语言的编程能力,可以实现与其他软件和系统的对接,如与数据库进行数据交互、与控制系统进行联动控制等。这样可以将机器视觉应用与其他系统进行完美融合,实现更加智能和自动化的控制。 总的来说,基于Halcon联合C语言的开发,可以让我们充分发挥两者的优势,实现更加灵活、高效和智能的机器视觉应用。无论是图像处理的速度和精度,还是与外部系统的联动控制,都能得到更好的实现。这种联合开发的方式,可以为机器视觉应用的开发带来更多的可能性和挑战。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Single118

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值