k210小白入门——以口罩识别为例

实验预达到的效果:实现对是否戴口罩的判断

实验器材准备:一块k210单片机,摄像头,屏幕。

实验原理分析:K210上烧录口罩识别的模型,判断人是否戴口罩,

  1. MaixHub官网模型库里找模型

  1. 获取机器码

  1. kflash_gui上模型的烧录

MaixHub官网(<--点此进入)模型库中下载口罩识别的模型

由于此模型为加密模型,需要输入自己k210的机器码也就是唯一ID获取模型。

获取机器码的方法

(默认已经安装了kflash_gui烧录软件和MaixPy IDE编程环境)

K210官方给出了一个固件key_gen_v1.2.bin专门用于获取机器码,在这里下载此固件:下载站 - Sipeed

将key_gen_v1.2.bin文件烧录到首地址0x00000中

显示下载成功之后,打开MaixPy IDE,选择工具,打开终端,新终端

就可以获得自己k210的机器码了:

注意:由于刚才我们把获取机器码的固件烧录在了首地址,首地址的固件被它顶用掉了,没有了原始固件,是连接不上k210的,既然我们已经获得了唯一机器码,用手机拍个照方便下次使用,烧录回原来的固件:在k210资料包里,02示例程序---03相关固件,将此固件再烧录回0x00000首地址。

获得机器码后,就可获得口罩识别的模型了

下载好之后解压缩提取:

获得了两个文件

一、mask 就是主函数的代码

二、mask.smodel即为白嫖的模型

将代码粘贴复制到MaixPy IDE.

import sensor, image, lcd, time
import KPU as kpu

color_R = (255, 0, 0)
color_G = (0, 255, 0)
color_B = (0, 0, 255)


class_IDs = ['no_mask', 'mask']


def drawConfidenceText(image, rol, classid, value):
    text = ""
    _confidence = int(value * 100)

    if classid == 1:
        text = 'mask: ' + str(_confidence) + '%'
        color_text=color_G
    else:
        text = 'no_mask: ' + str(_confidence) + '%'
        color_text=color_R
    image.draw_string(rol[0], rol[1], text, color=color_text, scale=2.5)



lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)

sensor.set_auto_exposure(1)
sensor.set_auto_gain(1)
sensor.set_vflip(1)
sensor.set_hmirror(1)
sensor.run(1)



task = kpu.load(0x300000)


anchor = (0.1606, 0.3562, 0.4712, 0.9568, 0.9877, 1.9108, 1.8761, 3.5310, 3.4423, 5.6823)
_ = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor)
img_lcd = image.Image()

clock = time.clock()
while (True):
    clock.tick()
    img = sensor.snapshot()
    code = kpu.run_yolo2(task, img)
    if code:
        totalRes = len(code)

        for item in code:
            confidence = float(item.value())
            itemROL = item.rect()
            classID = int(item.classid())

            if confidence < 0.52:
                _ = img.draw_rectangle(itemROL, color=color_B, tickness=5)
                continue

            if classID == 1 and confidence > 0.65:
                _ = img.draw_rectangle(itemROL, color_G, tickness=5)
                if totalRes == 1:
                    drawConfidenceText(img, (0, 0), 1, confidence)
            else:
                _ = img.draw_rectangle(itemROL, color=color_R, tickness=5)
                if totalRes == 1:
                    drawConfidenceText(img, (0, 0), 0, confidence)

    _ = lcd.display(img)

    print(clock.fps())

_ = kpu.deinit(task)

kpu.load()函数,用于跑训练的模型,把模型放在了0x300000,也可以自己设置,主要看模型的大小,我记得最大可放在0x800000地址。

如果报错“memory not enough! ”就是空间不够了,可在下载站中找一个适当的固件,或者使用SD卡存放模型。

对摄像头Sensor的配置做了一些修改,之前的摄像头和显示屏角度老是别扭。

于是我们将第二个模型文件,烧录在0x300000地址:(如果弹出下载失败,拔掉重新插线试一试)

现象:

猜你喜欢

转载自blog.csdn.net/qq_62262788/article/details/129335714
今日推荐