AI嵌入式K210项目(24)-口罩检测

文章目录

  • 前言
  • 一、实验准备
  • 二、实验过程
  • 三、实验结果
  • 总结


前言

本节课主要学习口罩检测功能,将摄像头采集的画面分析,比对模型,分析是否佩戴口罩,打印出佩戴口罩的状态

一、实验准备

请先将模型文件导入内存卡上,再将内存卡插入到K210开发板的内存卡插槽上,具体操作步骤请参考:

AI嵌入式K210项目(21)-AI模型文件导入至TF卡

本实验使用/sd/KPU/face_mask_detect/detect_5.kmodel模型;

人脸检测需要用的内存卡加载模型文件,所以需要提前将模型文件导入内存卡,再将内存卡插入K210开发板的内存卡卡槽里,如果无法读取到内存卡里的模型文件,则会报错。

二、实验过程

导入相关库,并初始化摄像头和LCD显示屏;

import sensor, image, time, lcd

from maix import KPU
import gc

lcd.init()
# sensor.reset(freq=48000000, dual_buff=True) # improve fps
sensor.reset()                      # Reset and initialize the sensor. It will
                                    # run automatically, call sensor.run(0) to stop
sensor.set_pixformat(sensor.RGB565) # Set pixel format to RGB565 (or GRAYSCALE)
sensor.set_framesize(sensor.QVGA)   # Set frame size to QVGA (320x240)
sensor.skip_frames(time = 1000)     # Wait for settings take effect.
clock = time.clock()                # Create a clock object to track the FPS.

初始化KPU相关的参数,kpu需要加载kmodel文件,本次实验需要的模型文件路径为:/sd/KPU/face_mask_detect/detect_5.kmodel,并使用yolo2来计算是否符合模型要求。od_img为神经网络的图像,尺寸为320*256,用于后续储存摄像头图像并传入KPU计算。

od_img = image.Image(size=(320,256), copy_to_fb=False)

anchor = (0.156250, 0.222548, 0.361328, 0.489583, 0.781250, 0.983133, 1.621094, 1.964286, 3.574219, 3.94000)
kpu = KPU()
print("ready load model")
kpu.load_kmodel("/sd/KPU/face_mask_detect/detect_5.kmodel")
kpu.init_yolo2(anchor, anchor_num=5, img_w=320, img_h=240, net_w=320 , net_h=256 ,layer_w=10 ,layer_h=8, threshold=0.7, nms_value=0.4, classes=2)

新建while循环,将图像传入KPU进行计算,使用yolo2神经网络算法进行解算,如果是佩戴了扣上口罩的人脸,用绿色框出并显示"with mask",如果是未佩戴口罩的人脸,则用红色框出并显示"without mask"。

while True:
    #print("mem free:",gc.mem_free())
    clock.tick()                    # Update the FPS clock.
    img = sensor.snapshot()
    a = od_img.draw_image(img, 0,0)
    od_img.pix_to_ai()
    kpu.run_with_output(od_img)
    dect = kpu.regionlayer_yolo2()
    fps = clock.fps()
    if len(dect) > 0:
        print("dect:",dect)
        for l in dect :
            if l[4] :
                a = img.draw_rectangle(l[0],l[1],l[2],l[3], color=(0, 255, 0))
                a = img.draw_string(l[0],l[1]-24, "with mask", color=(0, 255, 0), scale=2)
            else:
                a = img.draw_rectangle(l[0],l[1],l[2],l[3], color=(255, 0, 0))
                a = img.draw_string(l[0],l[1]-24, "without mask", color=(255, 0, 0), scale=2)

    a = img.draw_string(0, 0, "%2.1ffps" %(fps), color=(0, 60, 128), scale=2.0)
    lcd.display(img)
    gc.collect()

kpu.deinit()

三、实验结果

将K210开发板通过TYPE-C数据线连接到电脑上,CanMV IDE点击连接按钮,连接完成后点击运行按钮,运行例程代码。也可以将代码作为main.py下载到K210开发板上运行。

等待系统初始化完成后,LCD显示摄像头画面,用摄像头拍摄人脸,当有佩戴口罩时,显示绿色框和"with mask",当未佩戴口罩时,显示红色框和"without mask"。同时在IDE底部的串行终端会打印人脸相关信息。
AI嵌入式K210项目(24)-口罩检测_第1张图片
AI嵌入式K210项目(24)-口罩检测_第2张图片
串口日志如下:
AI嵌入式K210项目(24)-口罩检测_第3张图片


总结

本实验使用K210的KPU和yolov2模型实现人脸检测功能,使用IDE示例中代码,对实现的功能模块加以分析;可以通过调节阈值调整识别的准确率;

你可能感兴趣的:(K210开发板,人工智能,嵌入式AI,嵌入式,KPU,K210,口罩检测)