时间:2024-11-28 17:01
人气:
作者:admin
第四十章 YOLO2人手检测实验
1)实验平台:正点原子DNK210开发板
2)章节摘自【正点原子】DNK210使用指南 - CanMV版 V1.0
3)购买链接:https://detail.tmall.com/item.htm?&id=782801398750
4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html
5)正点原子官方B站:https://space.bilibili.com/394620890
6)正点原子K210技术交流企鹅群:605557868


在上一章节中,介绍了利用maix.KPU模块实现YOLO2的人脸检测,本章将继续介绍利用maix.KPU模块实现YOLO2的人手检测。通过本章的学习,读者将学习到YOLO2网络的人手检测应用在CanMV上的实现。
本章分为如下几个小节:
40.1 maix.KPU模块介绍
40.2 硬件设计
40.3 程序设计
40.4 运行验证
40.1 maix.KPU模块介绍
有关maix.KPU模块的介绍,请见第39.1小节《maix.KPU模块介绍》。
40.2 硬件设计
40.2.1 例程功能
40.2.2 硬件资源
本章实验内容,主要讲解maix.KPU模块的使用,无需关注硬件资源。
40.2.3 原理图
本章实验内容,主要讲解maix.KPU模块的使用,无需关注原理图。
40.3 程序设计
40.3.1 maix.KPU模块介绍
有关maix.KPU模块的介绍,请见第40.1小节《maix.KPU模块介绍》。
40.3.2 程序流程图

图40.3.2.1 YOLO2人手检测实验流程图
40.3.3 main.py代码
main.py中的脚本代码如下所示:
import lcd
import sensor
import image
import gc
from maix import KPU
lcd.init()
sensor.reset()
sensor.set_framesize(sensor.QVGA)
sensor.set_pixformat(sensor.RGB565)
sensor.set_hmirror(False)
resize_img = image.Image(size=(320, 256))
anchor = (0.8125, 0.4556, 1.1328, 1.2667, 1.8594, 1.4889, 1.4844, 2.2000, 2.6484, 2.9333)
names = ['hand']
# 构造KPU对象
hand_detecter = KPU()
# 加载模型文件
hand_detecter.load_kmodel('/sd/KPU/hand_detect.kmodel')
# 初始化YOLO2网络
hand_detecter.init_yolo2(anchor, anchor_num=len(anchor) // 2, img_w=320, img_h=240, net_w=320, net_h=256,
layer_w=10, layer_h=8, threshold=0.7, nms_value=0.3, classes=len(names))
while True:
img= sensor.snapshot()
resize_img.draw_image(img, 0, 0).pix_to_ai()
# 进行KPU运算
hand_detecter.run_with_output(resize_img)
# 进行YOLO2运算
hands = hand_detecter.regionlayer_yolo2()
for hand in hands:
img.draw_rectangle(hand[0], hand[1], hand[2], hand[3], color=(0, 255, 0))
img.draw_string(hand[0] + 2, hand[1] + 2, "%.2f" % (hand[5]), color=(0, 255, 0))
img.draw_string(hand[0] + 2, hand[1] + 10, names[hand[4]], color=(0, 255, 0))
lcd.display(img)
gc.collect()
可以看到一开始是先初始化了LCD和摄像头。
接着是构造一个KPU对象,并从文件系统中加载YOLO2人手检测网络需要用到的网络模型,并初始化YOLO2网络。
然后便是在一个循环中不断地获取摄像头输出的图像,由于网络需要的图像尺寸与摄像头直接输出的图像尺寸不一致,因此将其复制到网络需要的图像尺寸的图像上,再并将其送入KPU中进行运算,然后再进行YOLO2网络运算,最后便得到网络识别出人手在输入图像上的一些信息,将这些信息绘制到图像上后,在LCD上显示图像。
40.4 运行验证
将DNK210开发板连接CanMV IDE,点击CanMV IDE上的“开始(运行脚本)”按钮后,将摄像头对准人手,让其采集到人手图像,随后便能在LCD上看到摄像头输出的图像,同时图像中的人手均被绿色的矩形框框出,并在矩形框内的左上角标出了人手的置信度,如下图所示:

图40.4.1 LCD显示YOLO2人手检测结果
上一篇:没有了