资源:

配置工程: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平台运行。

YOLOv5 Qt 手势车载中控音乐播放器相关推荐

  1. QT纯代码打造音乐播放器

    QT纯代码打造音乐播放器 在.pro文件中添加 QT = prmultimedia 然后就是在.h文件中添加相关库函数 我添加的库函数 有些是不需要的,可以自定义删除修改 我是为方便以后扩展功能就留下 ...

  2. 基于Qt Phonon模块实现音乐播放器

    这次使用Qt实现的是一个本地音乐播放器,可以播放下载在计算机本地的音乐,提供了添加歌曲,歌曲列表,清空列表的功能.默认歌曲列表循环播放.音乐播放的实现主要依赖的是Qt 的多媒体框架phonon.该音乐 ...

  3. 【QT】实现本地音乐播放器

    [说明]最近在写一个音乐播放器,大概花了两天时间完成了基本功能,包括本地音乐的打开.播放.收藏等.后续想完善音乐列表(借助sqlite数据库).网络音乐(借助网易云API接口)功能,先上初步UI效果图 ...

  4. 基于QT c++开发的音乐播放器

    目录 一.简介 1.简介 2.界面部分截图 3.功能描述 二.代码 1.工程目录 2.代码展示 3.工程地址 一.简介 1.简介 这是本人大二学期专业课程设计所设计的一个很简易的音乐播放器(功能有限, ...

  5. Qt网编实现音乐播放器的使用(Linux搭建服务器)

    一.界面效果 功能: 搜索歌曲:客户端用户输入歌曲名,点击显示歌曲信息,服务器根据客户端发送来的名字在歌曲表内查询查询到的话,则将对应的歌曲文件数据发送到客户端新创建的一个文件夹内,然后加入到多媒体播 ...

  6. 嵌入式 QT 基于mplayer的音乐播放器

    1.实现功能 2.音乐播放界面 2.1 界面程序 2.1.1 界面控制初始化 2.1.2 控件风格程序 3. 歌曲列表界面 3.1.1 在 widget.h 定义 QListWidge 对象指针 3. ...

  7. 基于Qt模仿网易云音乐播放器

    基于Qt模仿网易云音乐界面,目前只实现了部分界面,后续继续完善改造. 部分代码: #ifndef MYSQLDATAMGR_H #define MYSQLDATAMGR_H#include <Q ...

  8. C++、QT KTV点歌系统 / 音乐播放器

    一.项目介绍 管理员角色: 1.管理各种歌曲,实现与数据库的交互 2.实现对账号得管理 游客角色: 1.调整音箱效果:原唱/伴奏.暂停.切歌.快进.快退.静音.变调: 2.歌曲点播方式按歌曲首字母查找 ...

  9. Qt制作简易的酷狗音乐播放器

    Qt制作简易的音乐播放器流程: 一.必须先抓取酷狗音乐的api,必须要得到搜索音乐的 hash . album_id 值.dfid.mid.platid等数据. 至于获取的方法,可以参考网上的连接:h ...

最新文章

  1. oracle 条件反转,Oracle反转倒置函数
  2. mysql多条件查询_使用dsum轻松搞定多条件查询,学会它,再也想用sumifs了
  3. Java微信二次开发(八)
  4. Windows 技术篇 - 如何查看cpu支持的指令集、型号、属性等详细信息,使用cpu-z工具查看处理器、内存、显卡、主板、缓存、SPD信息方法
  5. Altium designer中设置PCB网络闭合(不闭合)
  6. Java 堆内存模型
  7. vcf文件(call variants得来的)怎么看变异是纯合还是杂合的
  8. (转载) Linux IO模式及 select、poll、epoll详解
  9. 启动与停止mysql服务的命令
  10. java中解密技术是什么_详解Java 加密解密技术的分类和归纳
  11. 聚焦产业·城市、擎领数字未来:IMPACT2019紫光云峰会在津成功举办
  12. Java 用POST方式 传对象给 Servlet
  13. 使用手册|「3D视觉从入门到精通」知识星球
  14. 【技术邻】FloEFD热仿真分析之结果处理
  15. python统计图的三层结构设计_中大型LABVIEW软件三层设计架构(带图片目录完整版)...
  16. 学习笔记———《最大类间方差法》
  17. mysql 前缀索引_mysql索引做前缀原则
  18. 【Scratch-控制模块】Scratch-克隆
  19. html360全景图原理,html360°全景展示 示例
  20. 前端练习 静态网页(一):导航栏

热门文章

  1. Windows系统查看CDkey(系统激活秘钥)
  2. 品优购静态页面(html+css)——商品详情页
  3. presto + kafka + logstash 实时监控分析nginx日志
  4. windows 11 打开虚拟机的时候报错:你的设备遇到问题,需要重启
  5. 他们的心声,让无数人温暖一生
  6. 申请亚洲交友中心广告联盟教程
  7. CString、TCHAR*、char*转换 cstring与char *的转化(还包含很多种转换)
  8. ai培训师讲师叶梓:计算机视觉领域的自监督学习模型——MAE-5
  9. 如何设置Eclipse的上网代理
  10. android第三方QQ登录授权