(四)Qt 动态手势识别“手掌随动”+“握拳选择”

2024-01-15 16:30

本文主要是介绍(四)Qt 动态手势识别“手掌随动”+“握拳选择”,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

系列文章目录

通过Qt实现手势识别控制软件操作相关系列技术方案

(一)Qt 将某控件、图案绘制在最前面的方法,通过QGraphicsScene模块实现
(二)Qt QGraphicsScene模块实现圆点绘制在所有窗体的最前方,实现圆点的“彩色拖尾”效果以及“选中方框”效果
(三)Qt 动态手势识别“握拳”
(四)Qt 动态手势识别“手掌随动”+“握拳选择”
(五)Qt 动态手势识别“左右滑动”以及实现翻页效果

文章目录

  • 系列文章目录
  • 1、前言
    • 1.1 目标
  • 2、效果
  • 2、代码实现
    • 2.1 核心代码
  • 总结


1、前言

  本系列博客第(一)、(二)、(三)篇分别介绍了如何建立一个Qt软件界面用于作为演示动态手势识别的载体,本文为该系列第(四)篇博客,将融合前三篇博客所述,完成一个阶段性的演示demo。

1.1 目标

  本篇博客主要记录了在Qt平台实现动态手势“手掌随动”+“握拳选择”的过程。
  所谓“手掌随动”即在摄像头前移动操作人的手掌,在软件界面中将有个类似鼠标的“小圆”跟随手掌的移动而移动。
  “握拳选择”则是令手部进行一次“握拳”动作,则产生一种“选中”的效果出来。


2、效果

  为了便于观察手势识别结果以及原始手势图像,我分别打开两个Widget窗口,左边的窗口用于显示识别结果,右边为摄像头实时画面。
  左边的窗口中有8个黄色小窗口,有一个类似鼠标功能的“小圆点”用于随动,当“小圆点”移动至某个黄色小窗口上时,该小窗口将变色,于此同时产生类似鼠标移入时的音效。
  当在黄色小窗口内做“握拳选择”的动作时,被选中的小窗口将立即变色,当“小圆点”移出该小窗口时,其颜色恢复为黄色。

  先看演示效果视频:

动态手势识别_随动+选择(视角1)

动态手势识别_随动+选择(视角2)

效果演示动态图

在这里插入图片描述

图1 “手掌随动”效果gif图

在这里插入图片描述

图2 “握拳选择”动态手势识别效果gif图

2、代码实现

2.1 核心代码

  这里面需要搞清楚每个类的作用,以及类与类之间的关系,信号槽的连接等一系列逻辑问题。

    QObject::connect(&udpServer, SIGNAL(receivedPoints(QList<QPointF>*)),w.ui->widget, SLOT(point_update(QList<QPointF>*)));QObject::connect(&udpServer, SIGNAL(receivedPoints(QList<QPointF>*)),&handposturedetect, SLOT(point_update(QList<QPointF>*)));QObject::connect(w.ui->widget, SIGNAL(paly_sound(int)),&sound, SLOT(play(int)));QObject::connect(&handposturedetect, SIGNAL(send_selected()),w.ui->widget, SLOT(select_widget()));

  下面是识别“握拳选择”的算法。

QString HandPostureDetect::dynamic_gesture_recognize(const QQueue<QString>& gestureQueue)
{int state = 0; int countFive1 = 0; int countFist = 0; int countFive2 = 0; for (const QString& gesture : gestureQueue){if (state == 0){if (gesture == "five"){countFive1++;if (countFive1 >= 5){state = 1;countFive1 = 0;}}else{countFive1 = 0;}}else if (state == 1){if (gesture == "fist"){countFist++;if (countFist >= 5){state = 2;countFist = 0;}}else{countFist = 0;}}else if (state == 2){if (gesture == "five"){countFive2++;if (countFive2 >= 5){if(pre_condition == 0){qDebug()<<"select_"<<count;count++;pre_condition = 1;emit send_result(pre_condition);return "select";}if(pre_condition == 1){return "";}}}else{countFive2 = 0;}}}if(pre_condition == 1){pre_condition = 0;}emit send_result(pre_condition);return "";
}

  本项目所有代码的获取,请私信与本人联系。


总结

  本系列文章,通过动、静态手势识别技术方式操控Qt界面软件实现相关操作功能:
(一)Qt 将某控件、图案绘制在最前面的方法,通过QGraphicsScene模块实现
(二)Qt QGraphicsScene模块实现圆点绘制在所有窗体的最前方,实现圆点的“彩色拖尾”效果以及“选中方框”效果
(三)Qt 动态手势识别“握拳”
(四)Qt 动态手势识别“手掌随动”+“握拳选择”
(五)Qt 动态手势识别“左右滑动”以及实现翻页效果
  本项目所有代码的获取,请私信与本人联系。

这篇关于(四)Qt 动态手势识别“手掌随动”+“握拳选择”的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/609508

相关文章

前端 CSS 动态设置样式::class、:style 等技巧(推荐)

《前端CSS动态设置样式::class、:style等技巧(推荐)》:本文主要介绍了Vue.js中动态绑定类名和内联样式的两种方法:对象语法和数组语法,通过对象语法,可以根据条件动态切换类名或样式;通过数组语法,可以同时绑定多个类名或样式,此外,还可以结合计算属性来生成复杂的类名或样式对象,详细内容请阅读本文,希望能对你有所帮助...

Nginx实现动态封禁IP的步骤指南

《Nginx实现动态封禁IP的步骤指南》在日常的生产环境中,网站可能会遭遇恶意请求、DDoS攻击或其他有害的访问行为,为了应对这些情况,动态封禁IP是一项十分重要的安全策略,本篇博客将介绍如何通过NG... 目录1、简述2、实现方式3、使用 fail2ban 动态封禁3.1 安装 fail2ban3.2 配

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

Vue3中的动态组件详解

《Vue3中的动态组件详解》本文介绍了Vue3中的动态组件,通过`component:is=动态组件名或组件对象/component`来实现根据条件动态渲染不同的组件,此外,还提到了使用`markRa... 目录vue3动态组件动态组件的基本使用第一种写法第二种写法性能优化解决方法总结Vue3动态组件动态

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

Java使用POI-TL和JFreeChart动态生成Word报告

《Java使用POI-TL和JFreeChart动态生成Word报告》本文介绍了使用POI-TL和JFreeChart生成包含动态数据和图表的Word报告的方法,并分享了实际开发中的踩坑经验,通过代码... 目录前言一、需求背景二、方案分析三、 POI-TL + JFreeChart 实现3.1 Maven

Java导出Excel动态表头的示例详解

《Java导出Excel动态表头的示例详解》这篇文章主要为大家详细介绍了Java导出Excel动态表头的相关知识,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录前言一、效果展示二、代码实现1.固定头实体类2.动态头实现3.导出动态头前言本文只记录大致思路以及做法,代码不进

vue基于ElementUI动态设置表格高度的3种方法

《vue基于ElementUI动态设置表格高度的3种方法》ElementUI+vue动态设置表格高度的几种方法,抛砖引玉,还有其它方法动态设置表格高度,大家可以开动脑筋... 方法一、css + js的形式这个方法需要在表格外层设置一个div,原理是将表格的高度设置成外层div的高度,所以外层的div需要