使用OpenCV和MediaPipe打造虚拟鼠标:视频输入模块实现
使用OpenCV和MediaPipe打造虚拟鼠标:视频输入模块实现
本文将介绍如何使用OpenCV和MediaPipe实现一个基于视频输入的虚拟鼠标控制系统。通过手部检测和跟踪,将手部坐标映射到屏幕上,实现实时鼠标移动控制。
实现步骤:
- 使用OpenCV读取视频输入。
- 使用MediaPipe进行手部检测和跟踪,获取手部的坐标。
- 将手部坐标映射到屏幕上,作为虚拟鼠标的坐标。
- 使用PyAutoGUI将虚拟鼠标移动到指定位置。
- 在每个视频帧上重复上述步骤,实现实时的虚拟鼠标控制。
代码实现:
- 导入所需库和模块。
import cv2
import mediapipe as mp
import pyautogui
- 初始化MediaPipe的手部检测模型。
mp_hands = mp.solutions.hands
hands = mp_hands.Hands(max_num_hands=1)
- 打开视频输入。
cap = cv2.VideoCapture(0)
- 循环处理每个视频帧。
while True:
# 读取视频帧
ret, frame = cap.read()
# 将视频帧转换为RGB格式
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
# 使用MediaPipe检测手部,并获取手部的坐标
results = hands.process(frame)
if results.multi_hand_landmarks:
for hand_landmarks in results.multi_hand_landmarks:
for id, lm in enumerate(hand_landmarks.landmark):
# 将手部坐标映射到屏幕上
h, w, c = frame.shape
x, y = int(lm.x * w), int(lm.y * h)
pyautogui.moveTo(x, y)
# 将视频帧从RGB格式转换为BGR格式
frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
# 显示视频帧
cv2.imshow('Virtual Mouse', frame)
# 按下'q'键退出循环
if cv2.waitKey(1) == ord('q'):
break
- 释放视频输入和MediaPipe模型。
cap.release()
hands.close()
完整代码:
import cv2
import mediapipe as mp
import pyautogui
mp_hands = mp.solutions.hands
hands = mp_hands.Hands(max_num_hands=1)
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
results = hands.process(frame)
if results.multi_hand_landmarks:
for hand_landmarks in results.multi_hand_landmarks:
for id, lm in enumerate(hand_landmarks.landmark):
h, w, c = frame.shape
x, y = int(lm.x * w), int(lm.y * h)
pyautogui.moveTo(x, y)
frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
cv2.imshow('Virtual Mouse', frame)
if cv2.waitKey(1) == ord('q'):
break
cap.release()
hands.close()
通过以上代码,您就可以实现一个简单的基于视频输入的虚拟鼠标控制系统。您可以根据需要添加更多的功能,例如点击、滚动等。
原文地址: https://www.cveoy.top/t/topic/ndey 著作权归作者所有。请勿转载和采集!