【问题标题】:How can I move mouse by detected face and Eye using OpenCV and Python如何使用 OpenCV 和 Python 通过检测到的面部和眼睛移动鼠标
【发布时间】:2016-11-01 04:17:11
【问题描述】:

我已经设法通过在它们周围绘制循环来检测面部和眼睛,它在 Python 教程 Python tutorialLearn Opencv 的帮助下运行良好。现在我想让鼠标(光标)在面部移动和眼睛关闭/打开时移动以进行鼠标点击。 (Python 和 OPENCV)。请帮助给我更多关于如何使它工作的想法。 谢谢。

检查以下代码:

import cv2
import sys
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
video_capture = cv2.VideoCapture(0)
while True:
    ret, img = video_capture.read()
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    Face = face_cascade.detectMultiScale(gray, 1.3, 5)
    for (x,y,w,h) in Face:
         cv2.rectangle(img,(x,y),(x+w,y+h),(0,0,255),2)
         roi_gray = gray[y:y+h, x:x+w]
         roi_color = img[y:y+h, x:x+w]
         eyes = eye_cascade.detectMultiScale(roi_gray)
         for (ex,ey,ew,eh) in eyes:
             cv2.rectangle(roi_color,(ex,ey), (ex+ew,ey+eh), (0,255,0), 2)
   # Display the resulting frame
   cv2.imshow('Face and Eye Detected', img)
   if cv2.waitKey(1) & 0xFF == ord('q'):
        break
#cv2.waitKey(0)
video_capture.release()
cv2.destroyAllWindows()    

【问题讨论】:

    标签: opencv computer-vision opencv3.0


    【解决方案1】:

    如果您在 Windows 环境中工作,您正在寻找的是 python win32api 中的 SetCursorPos 方法。使用:

    import win32api
    import cv2
    import sys
    ...
    for (ex,ey,ew,eh) in eyes:
        win32api.SetCursorPos((ex,ey))
        cv2.rectangle(roi_color,(ex,ey), (ex+ew,ey+eh), (0,255,0), 2)
    

    这会将光标设置到矩形的左上角。如果要将光标移动到矩形的中心,请使用:

    win32api.SetCursorPos((ex+ew/2,ey+eh/2))
    

    【讨论】:

    • 你好@SaranshKejriwal 谢谢你,它工作得很好,但它只将光标移动到一个角度,如何让它在面部移动不同位置时动态移动不同角度。
    • 我不明白。 “将光标移动一个角度”是什么意思?由于我们根据最新的 ex 和 ey 设置光标位置,因此它应该移动到您的视线所到之处
    • 我的意思是当我运行程序时,光标只停留在矩形的左上角,并且不会随着眼睛的移动而移动。
    • 那是因为您执行的是“眼睛检测”,而不是“眼球检测”。因此,当您将整张脸从一个地方移动到另一个地方时,指针会移动。如果您希望鼠标跟随眼球,请提取眼睛 ROI 并执行颜色阈值以将瞳孔与眼睛的其余部分分开
    • 哦..!!!我从来不知道,让我尝试搜索眼球检测。如果您对如何检测眼球有解决方案/想法,请在我尝试搜索如何实现它时向我解释。提前谢谢你@SaranshKejriwal
    【解决方案2】:

    使用 pyautogui 模块来访问鼠标和键盘控件。 pyautogui 学习起来非常简单,文档是最好的来源,无需查看任何类型的视频。接下来,您需要使用 open cv 中可用的 contoursArea 方法检测眼睛的白色区域(可能是 corenia)。当你向左看时,眼睛右侧的白色区域增加,当白色区域增加时,鼠标必须通过 pyautogui 中可用的函数向左移动,即 pyautogui.moveRel(None,10)

    【讨论】:

      猜你喜欢
      • 2017-01-15
      • 2017-01-11
      • 2020-09-14
      • 2015-09-19
      • 2015-05-02
      • 1970-01-01
      • 2019-12-29
      • 2012-08-27
      • 2013-03-22
      相关资源
      最近更新 更多