前言
今天,向大家介绍基于深度学习的手势识别以及手势交互功能的实现。首先实现对于手势的识别,并通过识别的结果实现人机交互功能。
大家可用于毕业设计,课程设计等。
如有技术问题,欢迎私信询问!
提供毕设、课设等指导!
1、背景介绍
由于手势交互的自然与便利,在众多领域均可进行应用。在智能交通领域,手势识别能够实现驾驶员与车载电脑的快速交互,并且近年来自动驾驶技术迎来了突飞猛进的发展,加入对交警手势的识别将进一步完善现有的自动驾驶技术。在智能家居领域,手势识别将可以与语音控制成为一对互补的交互方式,实现智能家居更加自然的控制。在手语识别领域,通过移动端设备就可以检测并识别出聋哑人手语含义,对于解决聋哑人交流困难等问题具有革命性的意义。
2、项目简介
手势识别在深度学习项目中是比较简单的。本设计是基于YOLOv4模型,使用自制数据集进行训练,得到了一个可靠地手势识别模型。并使用pyqt5开发了GUI程序界面,实现了手势交互功能,如多媒体控制等。
3、环境配置
配置介绍
- 系统:Windows 10
- 显卡:NVIDIA GTX 1080Ti
版本
- cuda 10
- cudnn 10
- tensorflow-gpu 1.13.2
- python 3.6.5
- opencv-python
- pillow
- matplotlib
···
环境配置是所有工作的第一步,这里建议使用anaconda创建一个全新的虚拟环境,并完成相关的环境配置工作,由于篇幅有限且有很多相关文章,在此不再赘述。若有问题,也可私聊解决。
4、模型实现
数据集制作
本设计所需数据集采用VOC2007数据格式,制作包括三个部分,即采集、筛选、打标。
其中采集使用电脑摄像头,自写程序,每5帧保存一次,自己使用时可以修改,即可快速完成采集。代码如下:
import cv2 as cv
import numpy as np
capture = cv.VideoCapture(0)
index = 1
while True:
ret, frame = capture.read()
if ret is True:
cv.imshow("frame", frame)
index += 1
if index % 5 == 0:
cv.imwrite("D:/data/VOC2007/JPEGImages/" + str(index) + ".jpg", frame)
c = cv.waitKey(50)
if c == 27: # ESC
break
else:
break
cv.destroyAllWindows()
接着,需要人工筛选从而去除掉无法使用的图片,并将剩下的图片进行重命名。对于打标,则使用labelImg软件。关于其使用,相关文章也很多,就不过多赘述了。
最终文件排布如图所示:
手势训练
修改相关路径,设置好相关参数,即可开始训练。尤其需要注意需要根据自己的显卡设置合适的batchsize,防止爆显存。待模型收敛后即可停止训练。
模型评估
对于目标检测的性能评判,有众多指标,如准确率(accuracy)、精确率(Precision)、召回率(Recall)、IOU(Intersection over Union,即交并比)、AP(Average precision,即单类标签平均精确率)、mAP(Mean Average Precision,即所有类标签的平均精确率)、检测速度(Frame Per Second,FPS)等等。这些参数在不同方面反映出模型的性能,然而这些参数之间往往存在着制约关系。如精确率与召回率之间的关系是矛盾的,只参考某一个参数是不准确的,这就需要使用一个单一数字评估指标,其参数更加合理,还可以帮助研究者快速找出合适的模型。对于其详细介绍请见我另外一篇文章:
- 关于目标检测中的参数介绍
填坑中,敬请期待···
识别效果
通过计算准确率(accuracy)、精确率(Precision)、召回率(Recall)、IOU、AP、mAP等参数以及实际测试,可以较为准确的判断出模型的识别效果。由于篇幅有限,仅放置一张识别效果图进行展示,可以看出,该模型在光线较暗且背景复杂时,仍能有不错的识别效果。
5、GUI界面以及手势交互的实现
区域介绍
最左侧为实时监测显示区域,在此区域,可以实时显示出当前的手势检测情况,框选出手势位置,并显示出手势类别、置信度以及当前检测帧率等信息。右侧上方为信息显示区。在此区域使用卡通手势以及相关图标快速、简洁的显示出当前的检测信息以及交互平台所处状态。右侧中部为功能选择区域,在此区域可以快速选择出你所需要的功能,包括手势识别、幻灯片放映、多媒体控制三个功能。在右侧下方为系统信息显示区域。在此区域可以通过文字方式显示当前监测结果与系统状态。
展示
初始页面
识别页面
多媒体控制页面
6、结语
手势识别作为目标检测的入门项目,可以作为一个很好的练手项目。YOLOv4为开源模型,故源码就不做展示了。GUI界面的制作若有疑问,也可私聊。希望能对大家有所帮助!
如有技术问题,欢迎私信询问!
提供毕设、课设等指导!