[TOC]
<div STYLE="page-break-after: always;"></div>
安装包已经发布在release中
## 功能简介
### 鼠标操作
- 指尖移动来操控鼠标移动:通过手指的相对移动与移动的速度来操纵鼠标的移动
- 手势操控实现鼠标点击功能:通过指尖的特定动作实现鼠标的点击
- 手势操控实现滚动页面:通过特定的手势实现页面的滚动
### 键盘操作
- 指尖操控虚拟键盘:用户可以通过手指点选虚拟键盘来进行输入
### 快捷手势操作
- 手势识别实现特定按键的触发:通过特定的手势触发某些按键的功能。
- 用户自定义手势对应功能:用户可以自定义某些手势所对应到功能选项。
### 界面显示
- 用户及系统设置主界面:用户可以修改手势对应的功能,以及如鼠标灵敏度、页面滚动速率等系统配置
- 以悬浮窗实时显示当前手部检测状态:利用PySide2实现桌面悬浮窗来实现手部的骨架图
- 以悬浮窗实时显示当前操控模式:利用PySide2实现桌面悬浮窗来显示当前手势操控模式
### 手部识别
- 通过神经网络实现手势检测与识别:利用opencv自动追踪手掌位置,截取手部图像,利用神经网络对手势进行分类
## 系统总体设计
<center> <img style="border-radius: 0.3125em; box-shadow: 0 2px 4px 0 rgba(34,36,38,.12),0 2px 10px 0 rgba(34,36,38,.08);" src="./image/系统总体设计.png" width=75%> <br> <div style="color:orange; border-bottom: 1px solid #d9d9d9; display: inline-block; color: #999; padding: 2px;">系统总体设计</div> </center>
本项目主要分为两个部分,分别是前端的页面展示和后端的算法。
在页面展示中,主页面可以对快捷手势操作设定以及鼠标移动速率,滚轮的灵敏度等多个数值进行自定的调节,并将调节后的数值保存在项目的配置文件当中。在主页面中点击运行手势操控鼠标或者快捷指令按钮,并可以使主程序开始运行,同时打开手势识别结果悬浮窗以及操作模式的悬浮窗,给予用户当前操作模式与手势识别的信息展示。
而在后端算法中,camera对象是整个算法的核心。在camera对象的函数中,我们首先通过摄像头获取当前的原始图片。然后通过对图像进行处理与识别,获取手部的关键图像与关键点。然后将截取的关键图像进行预处理后送入神经网络对手势进行识别。然后根据神经网络识别的结果。进行模式的切换以及相应的操作。而在鼠标操控的模块,可以根据手势进行鼠标的移动,屏幕的滚动以及鼠标的点击等操作。如果是在快捷操作模式,则可以根据手势来实现特定事件的触发或者是实现特定网页的打开等操作。
## 系统模块实现
### 主界面的架构设计
主界面的设计主要包含了三个部分: 窗体部分, 工具类部分, 样式部分
#### 窗体部分
主界面的窗体主要由以下几个部分构成:
1. `MainWindow.py` ,`MainWindow`是本程序的主窗体以及整个程序的入口, 继承自`PySide`的`QWidget`类, 其主要用于处理各子窗口的布局以及处理对悬浮窗、相机等的调用。
2. `UserConfigWindow.py` ,`UserConfigWindow`是用来处理用户快捷手势自定义的界面, 其中显示手势的展示框用了`QWidget`类, 展示框右侧的则使用下拉框和文本框的形式用于用户设置和操作。整个快捷手势部分放在了滚动条区域内, 如果后续需要增减某些手势功能可以很方便地实现增减。
3. `SystemconfigWindow.py` `SystemconfigWindow`是用来设置全局鼠标控制的一些基本属性, 目前主要有三个: 鼠标灵敏度、页面滚动速率、手势识别速度。采用滑块加上数字框的方式进行显示, 方便用户进行调节, 可以直接拖动滑块或者输入指定值进行调整设置。
4. `HelpWindow.py` ,`HelpWindow`用来显示一些基本帮助及说明, 主要是用几个不同样式的`QLabel`进行实现。
#### 工具类部分
对于某些经常要使用到的功能和组件, 单独封装成py文件方便调用, 也可以使代码逻辑更加分明。主要用到以下几个工具类。
1. `KeyBoardMap.py` 用于实现键盘按键的`Qt.Key_XXX`的值到其对应名称字符串的映射。
2. `MyLoading.py` 用于显示加载中的图标, 主要原理是通过`QLabel`播放加载中的gif, 然后用外层的`QLabel`实现遮罩层。
3. `MyMessageBox.py` 用于实现自定义的消息弹窗, 效果是在界面正上方显示一个渐变出现并自动消失的信息窗口, 比`PySid`e自带的消息弹窗有更好的效果。该类继承自`QWidget`, 通过在`timerEvent`对位置和透明度进行调整已达到该效果。
4. `PropertiesHandler.py` 用于配置文件的读取、创建、保存等。主要包含一些基本的文件读写操作。
5. `ThreadUtils.py` 由于threading类生成的子线程在终止时比较麻烦, `ThreadUtils`主要提供线程终止的操作, 实现方式是通过在线程中抛出异常来终止线程。
6. `MyTabWidget.py` 是一个通过标签切换窗口的自定义组件, 继承自`PySide`的`QTabWidget`类, 附加的功能是窗体切换时的动画, 由于qt中的子窗口无法直接进行透明度调节, 故本动画实现主要是通过对窗体的`QGraphicsOpacityEffect`视图效果类进行透明度调节, 动画用`QPropertyAnimation`类实现。
#### 样式部分
本程序采用界面布局和样式设计分离的思路实现, 窗体部分用于布局, 样式则使用qss进行调整, 以上的各个窗体都有其对应的qss文件, 所有qss文件均放在resources的qss文件夹下。qss文件中则主要调整各窗体以及组件的背景色、字体、鼠标悬浮效果等属性。
样式部分还包括一些动画效果的设计。例如`MyMessagesBox`和`MyTabWidget`的动画。
#### 与悬浮窗和camera对象的配合过程
该过程主要在`MainWindow`类中实现。在`MainWindow`类中存储一个`Camera`对象、`Camera`线程对象、`Keyboard`对象和各个悬浮窗对象。通过"启动鼠标控制"和"启动快捷手势控制"两个按钮来控制悬浮窗的产生、两种相机对象的创建以及相机线程的创建, 再通过"停止"按钮来控制悬浮窗的隐藏、相机对象的销毁以及相机线程的销毁。
### 用户配置的配置文件的设计
1.配置采用properties格式的文件进行保存, 即`settings.properties`, 基本格式是每一行`key=value`。
2.配置文件的读写都通过`PropertiesHandler`来实现, 将读取到的所有key和value返回。其中还包含一些对配置文件完整性的检查, 若配置文件缺失, 则会自动生成一个配置文件, 若配置文件某些key值缺失或者冗余, 或者某些key对应的value格式不正确, `PropertiesHandler`都会做出一定的处理, 例如删除冗余key值, 对缺失或错误的配置项替换为默认值并重新写入文件。
### 悬浮窗的架构设计与实现
本项目通过`PySide2`设计了一个悬浮窗的基类`FLoatingWindow`,在该类的基础上,派生出了两个悬浮窗`GestureFloatingWindow`和`ModelFloatingWindow`,分别用来显示当前手势对应的骨架图以及当前模式及事件和鼠标的当前位置等。
<center> <img style="border-radius: 0.3125em; box-shadow: 0 2px 4px 0 rgba(34,36,38,.12),0 2px 10px 0 rgba(34,36,38,.08);" src="./image/悬浮窗流程图.png"> <br> <div style="color:orange; border-bottom: 1px solid #d9d9d9; display: inline-block; color: #999; padding: 2px;">悬浮窗流程图</div> </center>
对于`FloatingWindow`基类,在`init`时通过`self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint | Qt.Tool)` 将窗口设置为无边框并将窗口置顶。通过`self.setWindowOpacity(0.5)`将窗口透明度设置为0.5。通过`self.setC
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于opencv+Mediapipe+CNN实现用手势识别控制对鼠标操控源码+使用说明+exe可执行程序功能简介 鼠标操作 指尖移动来操控鼠标移动:通过手指的相对移动与移动的速度来操纵鼠标的移动 手势操控实现鼠标点击功能:通过指尖的特定动作实现鼠标的点击 手势操控实现滚动页面:通过特定的手势实现页面的滚动 键盘操作 指尖操控虚拟键盘:用户可以通过手指点选虚拟键盘来进行输入 快捷手势操作 手势识别实现特定按键的触发:通过特定的手势触发某些按键的功能。 用户自定义手势对应功能:用户可以自定义某些手势所对应到功能选项。 界面显示 用户及系统设置主界面:用户可以修改手势对应的功能,以及如鼠标灵敏度、页面滚动速率等系统配置 以悬浮窗实时显示当前手部检测状态:利用PySide2实现桌面悬浮窗来实现手部的骨架图 以悬浮窗实时显示当前操控模式:利用PySide2实现桌面悬浮窗来显示当前手势操控模式 手部识别 通过神经网络实现手势检测与识别:利用opencv自动追踪手掌位置,截取手部图像,利用神经网络对手势进行分类。 系统总体设计 本项目主要分为两个部分,分别是前端的页面展示和后端的算法。
资源推荐
资源详情
资源评论
收起资源包目录
基于opencv+Mediapipe+CNN实现用手势识别控制对鼠标操控源码+使用说明+exe可执行程序 (109个子文件)
package.bat 27B
loading.gif 4KB
.gitignore 2KB
.gitignore 182B
.gitignore 182B
.gitignore 182B
favicon.ico 66KB
favicon.ico 66KB
opencv.iml 510B
control_mouse.iml 352B
gesture_control_app.iml 352B
CNN.ipynb 18KB
5.jpg 1.92MB
0.jpg 1.78MB
r.jpg 1.25MB
l.jpg 1.09MB
3.JPG 3KB
2.JPG 3KB
82.JPG 3KB
README.md 38KB
打包须知.md 978B
setup.nsi 4KB
0ulr.pb 78.61MB
frozen_graph.pb 78.61MB
125.pb 78.61MB
156.pb 78.61MB
安装包.png 1.29MB
手势125.png 603KB
虚拟键盘的展示.png 572KB
系统总体设计.png 384KB
源码运行.png 354KB
image-20220823213038267.png 349KB
手势0ulr.png 303KB
鼠标操控模块流程图.png 89KB
bgimage.png 43KB
虚拟键盘流程图.png 42KB
模式悬浮窗.png 32KB
图像识别全流程.png 22KB
骨架悬浮窗.png 19KB
悬浮窗流程图.png 17KB
icon.png 4KB
settings.properties 740B
monitor_Qthread.py 17KB
monitor_Threading.py 16KB
camera.py 12KB
monitor_ui.py 12KB
mainWindow.py 10KB
camera.py 9KB
EyeGaze.py 9KB
main.py 8KB
UserConfigWindow.py 7KB
PropertiesHandler.py 7KB
FloatingWindow.py 6KB
SystemConfigWindow.py 6KB
GestureFloatingWindow.py 5KB
VirtualKeyboard.py 5KB
HelpWindow.py 4KB
virtual_keyboard.py 4KB
monitor.py 4KB
drawFinger.py 4KB
KeyboardMap.py 4KB
MyTabWidget.py 4KB
MouseMoving.py 3KB
FaceDetection.py 3KB
finger.py 3KB
ModelFloatingWindow.py 3KB
MyMessageBox.py 3KB
processing.py 2KB
MyLoading.py 2KB
WarningFloatingWindow.py 2KB
MyKeyboard.py 2KB
check.py 1KB
ScrollScreen.py 1KB
StringAction.py 1KB
ThreadUtils.py 749B
t.py 530B
main.py 470B
ScreenUtil.py 346B
BaseAction.py 297B
__init__.py 0B
WarningMessage.qss 950B
UserConfigWindow.qss 912B
MainWindow.qss 736B
SystemConfigWindow.qss 535B
HelpWindow.qss 496B
MainWindow.spec 2KB
requirements.txt 119B
用户许可协议.txt 104B
monitor.ui 5KB
dbnavigator.xml 22KB
dbnavigator.xml 22KB
dbnavigator.xml 22KB
workspace.xml 5KB
Project_Default.xml 410B
webResources.xml 373B
misc.xml 305B
modules.xml 290B
modules.xml 278B
modules.xml 264B
misc.xml 207B
共 109 条
- 1
- 2
资源评论
程序员张小妍
- 粉丝: 1w+
- 资源: 3102
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功