智能虚拟鼠标

news/2024/11/20 2:21:49/
MediaPipe Holistic分别利用MediaPipe PoseMediaPipe Face MeshMediaPipe Hands中的姿势,面部和手界标模型来生成总共543个界标(每手33个姿势界标,468个脸部界标和21个手界标)。本文将用MediaPipe Hands来完成AI虚拟鼠标。

引入库

import cv2
import numpy as np
import HandTrackingModule as htm
import autopy

其中 HandTrackingModule是大神编写的库,用于获取手指的坐标和检查手指是否伸出,调用autopy库实现鼠标点击功能。

HandTrackingModule

Youtube: http://www.youtube.com/c/MurtazasWorkshopRoboticsandAI

Website: https://www.computervision.zone

1. 检测手部得到手指关键点的坐标
success, img = cap.read()
img = detector.findHands(img)
lmList, bbox = detector.findPosition(img)
2,得到食指和中指的部分坐标
if len(lmList)!= 0:x1, y1 = lmList[8][1:]x2, y2 = lmList[12][1:]#print(x1, y1, x2, y2)
3. 检查哪个手指伸出
fingers = detector.fingersUp()
 4. 只有食指伸出时移动鼠标
if fingers[1]==1 and fingers[2] == 0:5. 转换坐标
x3 = np.interp(x1, (frameR, wCam-frameR),(0,wScr))
y3 = np.interp(y1, (frameR, hCam-frameR), (0, hScr))7. 移动鼠标
autopy.mouse.move(wScr-x3, y3)
cv2.circle(img, (x1, y1), 15, (255, 0,255),cv2.FILLED)
plocX, plocY = clocX, clocY
8. 当食指和中指同时伸出时,鼠标不动
if fingers[1] == 1 and fingers[2] == 1:
9. 中指和食指之间的距离
length, img, lineInfo = detector.findDistance(8, 12, img)10. 当两指间的距离小于限定值时点击
if length < 40:  # 当距离小于40个像素点时为左键cv2.circle(img, (lineInfo[4], lineInfo[5]), 15, (0, 255, 0), cv2.FILLED)autopy.mouse.click()
代码展示
import cv2
import numpy as np
import HandTrackingModule as htm
import time
import autopywCam, hCam = 640,480
frameR = 100
smoothening = 5
pTime = 0
plocX, plocY = 0, 0
clocX, clocY = 0, 0
cap = cv2.VideoCapture(0)
cap.set(3, wCam)
cap.set(4, hCam)detector = htm.handDetector(maxHands=1)
wScr, hScr = autopy.screen.size()while True:success, img = cap.read()img = detector.findHands(img)lmList, bbox = detector.findPosition(img)if len(lmList)!= 0:x1, y1 = lmList[8][1:]x2, y2 = lmList[12][1:]      finger= detector.fingersUp()print(fingers)cv2.rectangle(img, (frameR, frameR), (wCam - frameR, hCam - frameR), (255, 0, 255), 2)if fingers[1]==1 and fingers[2] == 0:x3 = np.interp(x1, (frameR, wCam-frameR),(0,wScr))y3 = np.interp(y1, (frameR, hCam-frameR), (0, hScr))clocX = plocX +(x3 - plocX) / smootheningclocY = plocY + (y3 - plocY) / smootheningautopy.mouse.move(wScr-x3, y3)cv2.circle(img, (x1, y1), 15, (255, 0,255),cv2.FILLED)plocX, plocY = clocX, clocYif fingers[1] == 1 and fingers[2] == 1:          length, img, lineInfo = detector.findDistance(8, 12, img)         if length < 40:  cv2.circle(img, (lineInfo[4], lineInfo[5]), 15, (0, 255, 0), cv2.FILLED)autopy.mouse.click()cTime = time.time()fps = 1 / (cTime - pTime)pTime = cTimecv2.putText(img, str(int(fps)), (20, 50), cv2.FONT_HERSHEY_PLAIN, 3, (255, 0, 255), 3)cv2.imshow("Img", img)if cv2.waitKey(1) == ord('q'):  break
 

调试结果

20220109_182406_哔哩哔哩_bilibili


http://www.ppmy.cn/news/127760.html

相关文章

KM3模拟键盘鼠标模块使用说明---2.键盘功能

KM3模拟键盘鼠标模块使用说明---1.鼠标功能 KM3模拟键盘鼠标模块使用说明---2.键盘功能&#xff08;本章&#xff09; 目录 1.模块说明 1.1 材料清单 2.键盘功能 2.1 键盘控制协议 2.2 串口操作流程 2.3 HID操作流程 1.模块说明 KM3模块是KM2模块的升级版本&#xff0…

达尔优EM915镜面板游戏鼠标拆机教程

达尔优EM915镜面板游戏鼠标拆机教程 最近买的达尔优鼠标滑轮不灵了&#xff0c;已经使用了三四年了&#xff0c;疑似滚轴不干净&#xff0c;需要拿下来擦一擦&#xff0c;说实话达尔优的鼠标质量确实不错&#xff0c;之前买过几款杂牌鼠标都是用了几个月左键和右键就不灵了&…

DD鼠键模拟

DD驱动级模拟鼠键(亲测) 第一步&#xff1a;官网下载DD http://www.ddxoft.com/ 第二步&#xff1a;解压后 master-master文件夹下有Driver和Example两个文件夹&#xff1a; 分别将Driver下面的General和Simple下面的drv.win10下面的setup、install运行安装。 安装E…

【WLM200Think无线鼠标拆解】鼠标中键有什么用?如何用鼠标中键提高效率? 鼠标中键不灵敏如何修理?

最近的鼠标中键突然灵敏度大大降低, 需要重重的按下去才会有反应; 今天上午联系淘宝客服, 客服说可以以换代修, 不过要自己出运费, 一看到要钱, 立马就还是想着自己修一修算了. 之前的鼠标中键也很容易坏(不过都是9.9包邮级别的, 几乎没拆开修过), 网上对于WLM200鼠标的拆解文…

鼠标键盘

在“开始”菜单上选择“设置”&#xff0c;“控制面板”&#xff0c;在“控制面板”上双击“辅助选项”图标&#xff0c;单击“鼠标器”标签&#xff0c;然后单击“使用”。这样就可以用键盘来控制鼠标的光标&#xff0c;模拟鼠标的鼠标键都指键盘右侧的小键盘&#xff08;数字…

pyautogui模拟鼠键

目录 pip3 install pyautogui即可安装该库&#xff01; 一 三 截图 pip3 install pyautogui 安装库&#xff01; 一 常用操作 我们在pyautogui库中常常使用的方法&#xff0c;如下&#xff1a; pyautogui.PAUSE 1 # 调用在执行动作后暂停的秒数&#xff0c;只能在执行一些…

按键精灵——键盘鼠标

按键 正确写法 KeyPress 65&#xff0c;1//按[A]键1次 KeyPress 66&#xff0c;2//按[B]键2次 KeyPress “D”&#xff0c;100//按[D]键100次 错误写法 不能“ABCD” 不能1000&#xff0c;没有对应按键码 不能“”&#xff0c;不能直接按出来 SayString 可以输出一个或一串数据…

分享一位大佬开发的驱动级的虚拟键盘鼠标,支持DD键鼠接口

【交流QQ&#xff1a;731621697】 【接口说明】 HIVM_BTN(int c) 或者 DD_btn 功能&#xff1a; 模拟鼠标点击 参数&#xff1a; 1 左键按下 &#xff0c;2 左键放开 4 右键按下 &#xff0c;8 右键放开 16 中键按下 &#xff0c;32 中键放开 64 4键按下 &#xff0c;128 4键放…