YOLOv5 & Qt 手势车载中控音乐播放器

18 篇文章 0 订阅
2 篇文章 0 订阅

资源:

配置工程:Python&Qt——yolov5手势识别隔空操纵车载音乐播放器(点击查看)
工程资源:YOLOv5 & Qt 手势车载中控音乐播放器v2(点此下载)
老工程资源:YOLO+datasets_labelImg手势识别(点此下载)
老工程资源:YOLOv5+datasets_labelImg_Hands_identify(点此下载)

效果

V2:

YOLOv5 & Qt 手势车载中控音乐播放器V2

V1:

V1版本

作品内容简介:

这当前车载中控大部分采用实体或虚拟按键实现操控,此类基于二维平面的人机交互方式存在许多不便,且语音识别的识别率堪忧。为解决中控台操纵困难的痛点,本作品基于YOLOv5神经网络训练和Qt开发框架,实现通过手势操控车载中控的音乐播放器,使用户摆脱功能按键束缚,无需发声进行语音控制,就能进行歌曲播放和切换控制,音量控制,歌词展示以及雨刷器的控制。
通过机器学习,上位机手势识别部分共可识别7种手势,并可进行离线识别。下位机音乐播放器部分除可手势控制的功能外,还具有其他拓展功能,程序整体内存占用小,兼容Windows系统和树莓派3B+中的Linux系统。

作品安装说明

  • Intel® Core™ i7-8750H CPU @ 2.20GHz 2.21GHz,采用主机集显而非独显进行手势识别

设计思路

1. 上位机实现手势识别

YOLO是You Only Look
Once的缩写。这也是为了特别突出YOLO区别于两阶段算法的特点。基于回归方法整张图片信息进行预测,且不用复杂的框架。相较滑窗式的检测框架,基于局部图片信息进行推理更加完善。YOLO学到的图片特征也更为通用。而YOLOv5在模型的快速部署上更具有极强优势。
本次上位机模块就基于YOLOv5神经网络并训练出模型进行识别,按照配置训练模型yaml,定义特征标签,卷积神经网络训练,离线训练集实时识别的顺序进行,最终完成手势识别功能模块设计与实现。

  • 1.1配置训练模型yaml

通过用.yaml文件来配置训练模型。写入训练数据集相对地址、测试数据集相对地址、输出模型相对地址,预设训练类别数nc和类别名names。在yaml文件里面分别定义各个参数:depth_multiple作为网络深度控制channel的缩放系数,而width_multiple作为网络宽度控制BottleneckCSP模块的层缩放系数,将所有的BottleneckCSP模块的number系数乘此参数获得最终的层数。通过此参数就可以实现不同大小不同复杂度的模型设计,4个版本的YOLOv5也做了不同的设计。预设Anchors锚定框后,拟出640×640图像大小下的多种锚定框的尺寸。
模型的主干网络backbone和通用检测层head用于最终检测部分。旨在特征图上应用锚定框并生成带有类概率、对象得分和边界框的最终输出向量结果。

  • 1.2定义特征标签

在安装Python和Pycharm后,通过labelImg.py对收集的数据集进行人工标注,标注过程中需基于训练模型yaml中预设定义好的对应训练类别名称,同时写入标注后数据存放的相对路径即可获得已标注数据集,存入对应的相对路径中并将需要训练的动作顺序和动作名称同步.

  • 1.3卷积神经网络训练

在装配CUDA和Anaconda等相关环境后,通过train.py对模型进行训练,训练前定义epochs迭代次数600次、batch-size参数、yaml文件相对地址、已标注相对地址即可获得生成对应的权重文件last.pt.

  • 1.4离线训练集实时识别

成功测试权重文件稳定后,基于权重文件通过detect3.py对实时视频进行识别并通过TCP通信将识别数据传输到下位机。在识别前初始化一些配置,定义权重文件相对地址,视频流取消默认关闭并打开,限制帧数减少处理压力,在性能足够的条件下开启半精度Float16推理,缩短推理时间。最后将识别输出的类别信息进行处理发送至下位机。

2. 下位机实现音乐播放器核心功能
  • 基于Qt编写C++代码,实现核心功能包括程序初始化,TCP通信,SQLite初始化,核心播放功能,手势识别功能简介,更换背景等功能。歌词载入,清空等展示功能。对歌曲信息的载入和修改。歌曲数据的加载,歌曲列表的清空等操作功能。创建新歌单列表。目标列表歌曲导入当前播放。手势识别状态的动作识别提示。预留嵌入式雨刷器功能展示,代码逻辑架构如下。

LightMusicPlayer.pro 用来存储项目设置和基本配置文件。
main.cpp 实现main( )函数和按键逻辑功能实现,同时TCP通信从上位机发送过来的信号接收处理。
widget.ui 通过Qt设计交互界面并实现,通过槽函数等实现按键功能。

3. 上位机与下位机采用TCP通信

由于手势仅用于对播放器进行信号控制,数据量小,所以采用TCP通信实现数据同步,同时基于TCP Socket通信使连接更稳定。Qt
中Socket此版本可以使用外部TCP套接字,方便通讯。

4. 数据库采用SQLite

在设计播放器时,歌曲列表等结构需要使用数据库,秉承简单高效无需配置环境的理念,最终选用SQLite实现对数据的管理。

设计重点和难点

1. 上位机手势识别功能中提升识别识别精确度和识别效率

在迭代600次后,7种手势准确率均达到99.5%。
如果是在训练集上表现很差,可能是欠拟合导致的,因为泛化能力太强,误识别率较高,需要通过增加数据集的正样本数,
增加主要特征的样本数量,同时增加训练次数,并尽量减小正则化参数。
如果是在训练集上表现很好,在测试集上表现很差,则极有可能是因为模型太复杂,训练需要通过增加其他的特征的样本数,
重新训练网络,如果是训练数据占总数据的比例过小,则需要增加数据的训练量。模型是用相对较小的数据训练的。
综上所述,基于足够的数据和较长的训练时间,则很有可能在此训练过程中产生良好的结果。

2. 下位机音乐播放器功能中响应手势较慢

需要分类讨论并提出解决办法。通过查看TCP通信是否异常,信号接收后业务逻辑是否异常,调用函数可用性等操作逐步解决,并在测试阶段多版本备份,以提高软测质量和回滚修复速度。

其它说明

该项目由于采用Qt架构,具有跨平台性,由C++编写,拥有良好的内存控制机制,整体可在Windows平台运行。

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
课程的背景 Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程式,也可用于开发非GUI程式,比如控制台 工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,易于扩展,允许 组件编程。2008年,奇趣科技被诺基亚公司收购,QT也因此成为诺基亚旗下的编程语言工具。2012年,Qt被Digia收购。 1.2、课程内容简介 该课程主要分为三个部分: 第一部分:从QT的基础理论知识入门 第二部分:通过QT媒体播放器项目实战训练巩固 第三部分:讲解QT系统移植 1.3、课程大纲 第一讲:QT简介、课程介绍、windows下QT开发环境搭建 第二讲:Linux下QT开发环境搭建1:VMWare安装及使用、Linux安装及使用 第三讲:Linux下QT开发环境搭建2:QT X11编译、安装、使用 第四讲:Linux下QT开发环境搭建3:QTEmbedded交叉编译 第五讲:Linux下C++快速串讲1:类与对象 第六讲:Linux下C++快速串讲2:继承与多态 第七讲:QT基本图形组件 第八讲:QT信号和槽 第九讲:纯代码打造QT界面 第十讲:QT消息框和对话框 第十一讲:QT菜单 第十二讲:QT工具栏和状态栏 第十三讲:PMP媒体播放器项目实战1:需求分析与关键技术 第十四讲:PMP媒体播放器项目实战2:音频播放 第十五讲:PMP媒体播放器项目实战3:音乐切换 第十六讲:PMP媒体播放器项目实战4:添加和删除播放列表 第十七讲:PMP媒体播放器项目实战5:音量控制和播放方式 第十八讲:系统移植1:系统移植概述及UBoot移植 第十九讲:系统移植2:内核和根文件系统移植 第二十讲:系统移植3:Madplay移植和QT移植 第二十一讲:PMP项目移植与远程视频监控系统 第二十二讲:项目完善:视频播放和系统设置

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GodOuO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值