【k210应用实例】检测口罩是否佩戴并控制舵机的运行

【k210应用实例】检测口罩是否佩戴并控制舵机的运行



一、需求分析

需求:使用K210开发板,检测口罩是否佩戴并控制舵机的运行。
任务分解:

  1. 口罩检测
  2. 控制舵机

二、开发板选型

这里选用Maix Bit(K210),引脚资源如下图所示:
在这里插入图片描述

图片源自sipeed官网,开发板详情请见:https://wiki.sipeed.com/soft/maixpy/zh/develop_kit_board/maix_bit.html

三、口罩检测

进入maixhub官网

视觉模型中找到Mask_detect,点击下载

接下来,需要输入32位的机器码,关于如何查看开发板的机器码,这篇文章已经讲得很清楚了:获取MaixPy系列开发板机器码——MaixHub 机器码获取,我就不重复造轮子了。

最后获取的机器码大概是这样的:

将上面得到的32位机器码输入即可下载模型文件。
接下来,便是模型在K210开发板上的部署了,参见口罩模型对应的部署教程:https://www.maixhub.com/modelInfo?modelId=12
对于部署的细节如下:
在这里插入图片描述
这两个kmodelv4 支持固件,其中第一个是支持IDE的,第二个是不支持IDE的。如果想要不借助PC端显示的话,建议烧录第二个固件。

这里有个坑,如果按照教程来,下载上图两个固件,部署完模型后,上电k210不能自动运行boot.py脚本,神奇的是,点击maixpy IDE中的连接后,boot.py又开始运行了,且IDE无法连上开发板。捣鼓良久,把固件换成下面这个,方可实现上电自动运行。
在这里插入图片描述
magic!归结下来是固件版本的问题

简单运行了下载模型时附带py脚本,效果还不错。但是如果环境光线较暗,效果可能不太理想。

四、控制舵机

关于舵机的控制可以参见我之前的博文:【K210+micropython】PWM信号控制舵机


五、实验程序及效果

总程序如下:

import sensor, image, lcd, time
from machine import Timer,PWM
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)

def Servo(servo,angle):
    S1.duty((angle+90)/180*10+2.5)


#PWM通过定时器配置,接到IO17引脚
tim = Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_PWM)
S1 = PWM(tim, freq=50, duty=0, pin=17)
#舵机初始化-0度
Servo(S1,0)
time.sleep(1)

lcd.init(freq=15000000)
lcd.rotation(2)
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
# sensor.set_hmirror(0)


task = kpu.load(0x300000)
# task = kpu.load("/sd/mask.smodel")


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:# mask
                    drawConfidenceText(img, (0, 0), 1, confidence)
                    #70度
                    Servo(S1,70)

            else:
                _ = img.draw_rectangle(itemROL, color=color_R, tickness=5)
                if totalRes == 1:# no_mask
                    drawConfidenceText(img, (0, 0), 0, confidence)
                    #0度
                    Servo(S1,0)

    _ = lcd.display(img)

    print(clock.fps())

_ = kpu.deinit(task)

程序运行现象:程序开始,舵机初始化到零度。当摄像头拍到戴口罩的人时,旋转70度;当拍到未带口罩的人时,返回零度。
在这里插入图片描述

  • 10
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
K210可以实现舵机控制。在使用K210实现舵机控制的过程中,可以使用K210的计算卷积人工神经网络加速器KPU来运行深度学习模型,例如基于yolov2模型的数字识别。首先,需要制作数据集并进行模型训练\[1\]。然后,由于K210的内置Flash存储空间较小,不推荐直接使用内置Flash存储kmodel文件,可以选择使用SD卡进行脱机运行\[2\]。接下来,可以通过进入maixhub官网,在视觉模型中找到相应的模型并下载\[3\]。获取模型文件后,可以参考口罩模型对应的部署教程进行模型在K210开发板上的部署。部署过程中,可以选择烧录支持IDE的固件或不支持IDE的固件,具体根据需求来决定\[3\]。通过这些步骤,就可以实现K210舵机的控制。 #### 引用[.reference_title] - *1* *2* [K210识别应用:基于yolov2模型的数字识别控制舵机](https://blog.csdn.net/m0_59166017/article/details/126255781)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [【k210应用实例检测口罩是否佩戴控制舵机运行](https://blog.csdn.net/qq_39784672/article/details/124511524)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值