通过Qt实现手势识别控制软件操作相关系列技术方案
(一)Qt 将某控件、图案绘制在最前面的方法,通过QGraphicsScene模块实现
(二)Qt QGraphicsScene模块实现圆点绘制在所有窗体的最前方,实现圆点的“彩色拖尾”效果以及“选中方框”效果
(三)Qt 动态手势识别“握拳”
(四)Qt 动态手势识别“手掌随动”+“握拳选择”
(五)Qt 动态手势识别“左右滑动”以及实现翻页效果
本系列博客第(一)、(二)、(三)篇分别介绍了如何建立一个Qt软件界面用于作为演示动态手势识别的载体,本文为该系列第(四)篇博客,将融合前三篇博客所述,完成一个阶段性的演示demo。
本篇博客主要记录了在Qt平台实现动态手势“手掌随动”+“握拳选择”的过程。
所谓“手掌随动”即在摄像头前移动操作人的手掌,在软件界面中将有个类似鼠标的“小圆”跟随手掌的移动而移动。
“握拳选择”则是令手部进行一次“握拳”动作,则产生一种“选中”的效果出来。
为了便于观察手势识别结果以及原始手势图像,我分别打开两个Widget窗口,左边的窗口用于显示识别结果,右边为摄像头实时画面。
左边的窗口中有8个黄色小窗口,有一个类似鼠标功能的“小圆点”用于随动,当“小圆点”移动至某个黄色小窗口上时,该小窗口将变色,于此同时产生类似鼠标移入时的音效。
当在黄色小窗口内做“握拳选择”的动作时,被选中的小窗口将立即变色,当“小圆点”移出该小窗口时,其颜色恢复为黄色。
先看演示效果视频:
动态手势识别_随动+选择(视角1)
动态手势识别_随动+选择(视角2)
效果演示动态图
这里面需要搞清楚每个类的作用,以及类与类之间的关系,信号槽的连接等一系列逻辑问题。
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 动态手势识别“左右滑动”以及实现翻页效果
本项目所有代码的获取,请私信与本人联系。
本文发布于:2024-01-29 01:31:39,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170646310211749.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |