当前位置: 首页 > article >正文

Python-基于mediapipe,pyautogui,cv2和numpy的电脑手势截屏工具(进阶版)

前言:在我们的日常生活中,手机已经成为我们每天工作,学习,生活的一个不可或缺的部分。众所周知:为了我们的使用方便,手机里面的很多功能非常人性化,既便捷又高效,其中就有手机的截屏方式,它们花样繁多,如三指截屏,手势截屏等。那么怎么在电脑里面也实现这个功能呢?(虽然我们知到电脑也有快捷的截屏方式-Ctrl+Shift+S。但是很明显,这依然不够快捷,因为这至少需要用户的两次手动操作)。那么废话不多说,我们直接开始今天的Python学习之路-利用PyCharm手搓一个基于mediapipe,pyautogui,cv2numpy的电脑手势截屏工具。

 编程思路:本次编程我们需要pyautogui来获取屏幕的尺寸,这对于确定按钮的位置和大小非常有用;接着利用mediapipe初始化一个手部模型,用来检测视频流中的手部关键点;numpy提供了计算机在采集了用户手部姿态所得到的数据的处理,并与mediapipe所建立的数学模型进行比较等。cv2是本次编程的重头戏,它为调用计算机摄像头进行信息采集,以及用户手部模型的实时可视化展现等提供了可能。这次我们额外添加了win32com库,用于语音提醒用户程序初始化进程。此外,我们将截屏所得图片的存放位置改为系统的图片文件夹中,更接近普通的截屏操作(这个需要调用os库操作系统,pathlib库获取文件位置,time库获取时间戳等)。

第一步:导入库

本次编程所需调用的库:

1,标准库:cv2,numpy,time,os,pathlib。

2,第三方库:mediapipe,pyautogui,win32com。

# 导入必要库
import cv2
import mediapipe as mp
import pyautogui
import numpy as np
import os
from pathlib import Path
import time
import win32com.client

第二步:程序初始化

我们需要初始化判断模型并给出屏幕尺存等相关变量参数。此外,我们同时也需要初始化语音播放器音量,语速及图片的保存路径等。

# 初始化语音播报器
speaker = win32com.client.Dispatch("SAPI.SpVoice")
speaker.Rate = 1  # 设置语速
speaker.Volume = 100  # 设置音量
speaker.Speak("欢迎使用手势截图工具")
# 初始化保存路径
save_folder = get_pictures_path() / "Gesture_Screenshots"
save_folder.mkdir(parents=True, exist_ok=True)

# 初始化MediaPipe手部模型
mp_hands = mp.solutions.hands
hands = mp_hands.Hands(max_num_hands=2, min_detection_confidence=0.7)
mp_draw = mp.solutions.drawing_utils

# 屏幕尺寸和状态变量
screen_w, screen_h = pyautogui.size()
waiting_for_click = False
blink_counter = 0
screenshot_taken = False
btn_rect = (500, 400, 200, 60)

# 自定义紫色调色板
PURPLE_POINT = (255, 0, 255)  # BGR格式-亮紫色
PURPLE_LINE = (200, 0, 200)  # BGR格式-深紫色

 第三步:构建内部逻辑

接下来我们需要编写程序内部判断模型等的内在逻辑,并将鼠标,按键事件与计算机采集信息所得的对比结果联系起来。此外,我们还会构建图片的路径函数以将图片存放至指定位置。

# 获取图片保存路径函数
def get_pictures_path():
    if os.name == 'nt':
        return Path.home() / "Pictures"
    else:
        xdg_pics = 

http://www.kler.cn/a/527966.html

相关文章:

  • Android车机DIY开发之学习篇(六)编译讯为3568开发板安卓
  • OpenCV:闭运算
  • AI DeepSeek-R1 Windos 10 环境搭建
  • pytorch基于FastText实现词嵌入
  • 天融信 NGFW2.3 mibs
  • AI 的安全性与合规性:实践中的最佳安全策略
  • 【Rust】18.2. 可辩驳性:模式是否会无法匹配
  • Python 梯度下降法(五):Adam Optimize
  • Java动态代理:原理与实现
  • 家庭财务管理系统的设计与实现
  • Spring的设计理念之IOC
  • 软件渲染器tinyrenderer
  • OpenCV:SIFT关键点检测与描述子计算
  • caddy2配置http_basic用于验证用户名密码才允许访问页面
  • 代码随想录|动态规划1143.最长公共子序列 1035.不相交的线 53. 最大子序和 392.判断子序列
  • 零代码搭建个人博客—Zblog结合内网穿透发布公网
  • 2025 年,链上固定收益领域迈向新时代
  • I.MX6ULL 中断介绍上
  • 推荐一款好看的Typora主题页面
  • MATLAB R2023b下载与安装教程
  • MongoDb user自定义 role 添加 action(collStats, EstimateDocumentCount)
  • 【MATLAB例程】TOA和AOA混合的高精度定位程序,适用于三维、N锚点的情况
  • 【vue项目权限控制方案】
  • Linux stat 命令使用详解
  • 内部知识库提升组织效率与知识共享助力业务快速发展
  • 开源的瓷砖式图像板系统Pinry