目前可视化话还是要进步的如果可视化可以悬浮在任何的操作界面之上方可更好的体验,所以目前模拟鼠标这样精准的操作是不可靠的,所以在快捷键快捷方式上应该是一个很好用途,接下来会做一些可靠的隔空操作

import cv2
import mediapipe as mp
import pyautogui
import numpy as npscreenWidth, screenHeight = pyautogui.size()mp_drawing = mp.solutions.drawing_utils
mp_hands = mp.solutions.hands
hands = mp_hands.Hands(static_image_mode=False,max_num_hands=2,min_detection_confidence=0.75,min_tracking_confidence=0.75)def shibie_wuzhi_zhuangtai(hand_dict):finger_list = []for finger_poindts in [[2, 3, 4], [6, 7, 8], [10, 11, 12], [14, 15, 16], [18, 19, 20]]:x, y, z = finger_poindts#finger_one = hand_dict[x].y > hand_dict[y].y and hand_dict[y].y > hand_dict[z].yfinger_list.append(finger_one)return finger_listcap = cv2.VideoCapture(0)
currentMouseX_h = 0
currentMouseY_h = 0
state_list=[]
while True:ret, frame = cap.read()frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)# 因为摄像头是镜像的,所以将摄像头水平翻转# 不是镜像的可以不翻转frame = cv2.flip(frame, 1)results = hands.process(frame)frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)# if results.multi_handedness:#     for hand_label in results.multi_handedness:#         print(hand_label)if results.multi_hand_landmarks:for hand_landmarks in results.multi_hand_landmarks:# 识别状态hand_dict = {i: v for i, v in enumerate(hand_landmarks.landmark)}# finger_table = shibie_wuzhi_zhuangtai(hand_dict)# history_list.append(hand_dict)if hand_dict:a = (hand_dict[17].x - hand_dict[0].x) ** 2 + (hand_dict[17].y - hand_dict[0].y) ** 2b = (hand_dict[5].x - hand_dict[0].x) ** 2 + (hand_dict[5].y - hand_dict[0].y) ** 2c = (hand_dict[5].x - hand_dict[17].x) ** 2 + (hand_dict[17].y - hand_dict[0].y) ** 2cosc = (a + b - c) / 2 / np.sqrt(a * b)currnet_state = 0#if  len(state_list)>8:state_list=state_list[:-8]if np.arccos(cosc) > 1.0:shou_zhang_s = np.sqrt(b * (1 - cosc ** 2) * a) / 2currentMouseX = int(hand_dict[0].x * screenWidth)currentMouseY = int(hand_dict[0].y * screenHeight)if shou_zhang_s < 0.016:# 移动动作模拟print("移动层")currnet_state=1print(screenHeight,screenWidth)state_list.append(currnet_state)pyautogui.moveTo(currentMouseX,currentMouseY, duration=0, tween=pyautogui.linear)elif shou_zhang_s > 0.016 and shou_zhang_s < 0.030:# 拖拽动作模拟print("移动拖拽")pyautogui.dragTo(currentMouseX, currentMouseY, duration=0, tween=pyautogui.linear)currnet_state = 2state_list.append(currnet_state)elif shou_zhang_s > 0.030:# 单击动作模拟print("单击层")currnet_state = 3pyautogui.click()state_list.append(currnet_state)else:currnet_state = 0state_list.append(currnet_state)# 可视化的时候可以将背景设置为不同的颜色来表达,所处的操作模式不同,font = cv2.FONT_HERSHEY_SIMPLEXframe = np.zeros(frame.shape).astype("uint8")if currnet_state==1:frame[:,:,0]=255frame = cv2.putText(frame, '001_move', (0, 100), font, 1.2, (255, 255, 255), 2)elif currnet_state==2:frame[:, :, 1] = 255frame = cv2.putText(frame, '002_drag', (0, 100), font, 1.2, (255, 255, 255), 2)elif currnet_state==3:frame[:, :, 2] = 255frame = cv2.putText(frame, '003_click', (0, 100), font, 1.2, (255, 255, 255), 2)mp_drawing.draw_landmarks(frame, hand_landmarks, mp_hands.HAND_CONNECTIONS)else:state_list.append(0)frame = np.zeros(frame.shape).astype("uint8")else:state_list.append(0)frame = np.zeros(frame.shape).astype("uint8")cv2.imshow('MediaPipe Hands', frame)if cv2.waitKey(1) & 0xFF == 27:break
cap.release()if __name__ == '__main__':pass

隔空操作之简单的模拟三种行为相关推荐

  1. 苹果手机连接电脑服务器传文件,还在羡慕苹果电脑隔空操作?windows的这个骚操作,3秒即可传文件...

    佳乐说资源,专注好资源!大家好我是佳乐,今天我给大家分享的是:如果对文件进行隔空操作! 通过一些非常简单的设置,我们可以把自己的windows或者苹果电脑作为一个共享设备,我们可以使用手机或者电脑,来 ...

  2. word中列表序列隔空不同的简单解决方案

    word中列表序列隔空不同的简单解决方案 在word中对文本内容进行列表编号排序,但是发现编号序列和后面的内容中间有空格空隙,为内容整体美观,因此需要将空格空隙进行调整. 解决方案如下: 一.点击选择 ...

  3. 荣耀v30鸿蒙5g荣耀有隔空操作吗,荣耀v30Pro支持隔空操作吗 了解手机主要特点

    在此前发布的mate30Pro上,用户可以使用隔空操作,支持隔空截屏等功能,那么荣耀v30Pro支持隔空操作吗?下面来看详细介绍. 荣耀v30Pro不支持隔空操作,手机左上角仅有两枚摄像头,没有配备姿 ...

  4. 分布式锁简单入门以及三种实现方式介绍(滴滴)

    很多小伙伴在学习Java的时候,总是感觉Java多线程在实际的业务中很少使用,以至于不会花太多的时间去学习,技术债不断累积!等到了一定程度的时候对于与Java多线程相关的东西就很难理解,今天需要探讨的 ...

  5. 分布式锁简单入门以及三种实现方式介绍

    分布式锁简单入门以及三种实现方式介绍 2018年01月11日 21:16:28 徐刘根 阅读数:37912 标签: 分布式 分布式锁 高并发 更多 个人分类: 集群分布式 版权声明:本文为博主原创文章 ...

  6. JSP中的注释操作及JSP中的三种Scriptlet

    ***JSP中的注释操作及JSP中的三种Scriptlet******** 1,JSP中的注释操作 <h3><1>显示注释</h3>语法:<!--注释内容-- ...

  7. 荣耀v30鸿蒙5g荣耀有隔空操作吗,荣耀V30 Pro用了十天,这些功能让人眼前一亮

    随着5G正式的商用,三大运营商相继推出5G套餐且2020年一月起工信部将不允许单模NSA手机入网等一系列政策的出台,让本来就毫无声息却硝烟四起手机厂商又开始着手下一轮的竞争.也因SA才将是5G最终发展 ...

  8. 如何实现良好的隔空操作体验

    首先要在虚拟空间内对手势进行操作范围限制,这个可以通过,手势在整个空间内占比范围进行约束,超出范围的手势无效,且操作时候进行显示有效和无效,显示尽可能的显示出,如何操作才能有效在无效的情况下. 我们可 ...

  9. 荣耀v30鸿蒙5g荣耀有隔空操作吗,荣耀V30没秘密了,隔空操作+麒麟990+后置四摄,要干翻小米?...

    放眼今年的国产手机市场,几乎一些主流厂商都已经发布了自家的5G手机,转眼间就剩下荣耀了.所以在这样的情况下,消费者们都十分期待荣耀发布的5G手机,因为近两年荣耀的表现十分亮眼,上半年发布的荣耀20就是 ...

最新文章

  1. msf rhosts设置文件_聊一聊基于 msf 的免杀项目测试过程
  2. internal heap limit reached问题的解决
  3. CentOS 7设置ulimit不生效的问题解决
  4. 【mybatis基础】mybatis开发dao两种方法
  5. HarmonyOS之搭建和配置开发环境的流程
  6. mha如何管理多套mysql集群_Mysql 集群高可用方案 MHA
  7. 了解和扩展Java ClassLoader
  8. mysql 替换全部标内容_Mysql SQL 替换标签内容
  9. [转载] OpenCV-Python图像位与运算bitwise_and函数详解
  10. hbase集群 数据写入_大数据入门必学 - Hbase集群搭建
  11. 黑白群晖为Plex添加证书,开启HTTPS访问
  12. android转场动画的两种方式
  13. NNS域名系统之域名竞拍
  14. Excel中ROUND、ROUNDUP、ROUNDDOWN函数详解
  15. 运鸿蒙之息 行祈者之意,祈禳之禳关度煞科
  16. 最新版HBuilderx + 夜神模拟器 模拟器调试设置
  17. Spring Web项目
  18. 刷题日记 acwing 2058笨拙的手指 位运算的运用,迭代器的使用,秦九稍(别的进制转化为10进制)
  19. 最新版Kubernetes(k8s)-v1.22.3版本高可用集群
  20. python实现“幻影坦克”效果(点开图片是隐藏的另一张图)【详解】

热门文章

  1. 基于AD5272多组变阻器电路设计
  2. 东南大学 | 12年,热爱始终如一
  3. 从课堂走向实践还有多远?
  4. android 默认打开服务器地址,Android开发实现任意切换服务器地址
  5. Typora 收费,WTF? 还是需要支持下
  6. linux命令安装openssl函数库,ubuntu安装openssl库
  7. oracle 提取当天日志,powershell提取日志内容
  8. 法拉利虚拟学院2010 服务器,法拉利虚拟学院2010
  9. Vivado 随笔(3) 其他综合属性 dont_touch、fsm_encoding?
  10. 函数声明(函数原型)的一些关键技巧