首页 > 编程知识 正文

键盘鼠标同步控制器,远程桌面虚拟机鼠标飘

时间:2023-05-04 00:17:49 阅读:166850 作者:1190

首先检测手的标记,然后根据这些标记点进行跟踪和点击,为了平滑而加入平滑技术。

效果:运行AiVitrualMouse.py文件。

食指是鼠标移动模式,食指和中指翘起靠近时是鼠标单击模式。

源代码: aivitrualmouse.pyimportcv2importnumpyasnpimporthandtrackingmoduleashtmimportautopyimporttime # # # # 480帧# # # # # # # # # ptime=0plocx,clocY=0,clocY=0 0cap=cv2.videocapture(0) cap.set ) 3,wCam ) cap.set hCam ) detector=htm.handdetector ) maxhands=1) # hScr=autopy.screen.size (# print ) hScr,hscr ) while true 3: img=cap.read ) ) img=找到检测tion box=detector.find position (img ) )2.食指和中指指尖iflen ) lmlist )获得!=0: x1,y1=lmList[8][1:] x2,y2=lmlist[12][1:]#print(x1,y1,x2,y2 )3. fingers=detect frameR ),) wcam ) 255 ),2 ) # 4.仅食指:移动模式if fingers [1]==1and fingers [2]==03360 #5.变换坐标x3=NP wcam-) ) ) ) ) ),wScr ) ) ) y3=NP.interp(y1,(frameR,hCam - frameR ),) 0, HSCR(#6.平滑值clocx=plocx(x3-plocx )/smootheningclocy=plocy ) y3-plocy )/smoothening # 7.鼠标autopy.mouse . cv2.FILLED ) plocX,plocY=clocX,clocY # 8.食指和中指均向上的:单击模式if fingers [1]==1and fingers [2]==1: # 13360 line info=找到detector.finng的img(#print ) length ) ) 10 .如果距离短,请单击鼠标iflength403360cv2.circle ) img,(lineInfo[4] 20 ) CV2.filled(autopy.mouse.click ) 11 .当前帧速率cTime=time.time ) (fps=1/) ctime-ptime (ptime ) 0,0 ),3 )显示#12.CV2.imshow('image ',img ) cv2.waitKey(1) )1) Handtrow )

w.youtube.com/c/MurtazasWorkshopRoboticsandAIWebsite: https://www.computervision.zone"""import cv2import mediapipe as mpimport timeimport mathimport numpy as npclass handDetector(): def __init__(self, mode=False, maxHands=2, detectionCon=0.5, trackCon=0.5): self.mode = mode self.maxHands = maxHands self.detectionCon = detectionCon self.trackCon = trackCon self.mpHands = mp.solutions.hands self.hands = self.mpHands.Hands(self.mode, self.maxHands, self.detectionCon, self.trackCon) self.mpDraw = mp.solutions.drawing_utils self.tipIds = [4, 8, 12, 16, 20] def findHands(self, img, draw=True): imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) self.results = self.hands.process(imgRGB) # print(results.multi_hand_landmarks) if self.results.multi_hand_landmarks: for handLms in self.results.multi_hand_landmarks: if draw: self.mpDraw.draw_landmarks(img, handLms,self.mpHands.HAND_CONNECTIONS) return img def findPosition(self, img, handNo=0, draw=True): xList = [] yList = [] bbox = [] self.lmList = [] if self.results.multi_hand_landmarks: myHand = self.results.multi_hand_landmarks[handNo] for id, lm in enumerate(myHand.landmark): # print(id, lm) h, w, c = img.shape cx, cy = int(lm.x * w), int(lm.y * h) xList.append(cx) yList.append(cy) # print(id, cx, cy) self.lmList.append([id, cx, cy]) if draw: cv2.circle(img, (cx, cy), 5, (255, 0, 255), cv2.FILLED) xmin, xmax = min(xList), max(xList) ymin, ymax = min(yList), max(yList) bbox = xmin, ymin, xmax, ymax if draw: cv2.rectangle(img, (xmin - 20, ymin - 20), (xmax + 20, ymax + 20),(0, 255, 0), 2) return self.lmList, bbox def fingersUp(self): fingers = [] # Thumb if self.lmList[self.tipIds[0]][1] > self.lmList[self.tipIds[0] - 1][1]: fingers.append(1) else: fingers.append(0) # Fingers for id in range(1, 5): if self.lmList[self.tipIds[id]][2] < self.lmList[self.tipIds[id] - 2][2]: fingers.append(1) else: fingers.append(0) # totalFingers = fingers.count(1) return fingers def findDistance(self, p1, p2, img, draw=True,r=15, t=3): x1, y1 = self.lmList[p1][1:] x2, y2 = self.lmList[p2][1:] cx, cy = (x1 + x2) // 2, (y1 + y2) // 2 if draw: cv2.line(img, (x1, y1), (x2, y2), (255, 0, 255), t) cv2.circle(img, (x1, y1), r, (255, 0, 255), cv2.FILLED) cv2.circle(img, (x2, y2), r, (255, 0, 255), cv2.FILLED) cv2.circle(img, (cx, cy), r, (0, 0, 255), cv2.FILLED) length = math.hypot(x2-x1,y2-y1) return length, img, [x1, y1, x2, y2, cx, cy]def main(): pTime = 0 cTime = 0 cap = cv2.VideoCapture(1) detector = handDetector() while True: success, img = cap.read() img = detector.findHands(img) lmList, bbox = detector.findPosition(img) if len(lmList) != 0: print(lmList[4]) cTime = time.time() fps = 1 / (cTime - pTime) pTime = cTime cv2.putText(img, str(int(fps)), (10, 70), cv2.FONT_HERSHEY_PLAIN, 3,(255, 0, 255), 3) cv2.imshow("Image", img) cv2.waitKey(1)if __name__ == "__main__": main()

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。