【发布时间】:2018-01-27 17:41:44
【问题描述】:
在这段代码中,我使用的是 Python 2.7.13、OpenCV 2.4.13 和 PyAutoGUI 0.9.36。目的是根据面部移动移动光标,但光标移动是反转的。例如,如果我的脸向右移动,则光标向左移动;如果我的脸向左移动,则光标向右移动。另外,我希望光标在我的 PC 的整个屏幕上向右、向左、向上和向下移动,其大小为 x=1920,y=1080。
该计划的目的是表明有可能获得一种新的方式来获得更多的独立性和访问权,以便四肢瘫痪的人能够进行简单的活动,这些活动是数百万人日常生活的一部分,例如打开和关闭灯以及打开和关闭电视。
import cv2
import pyautogui
faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
video_capture = cv2.VideoCapture(0)
while True:
# Capture frame-by-frame
ret, frame = video_capture.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = faceCascade.detectMultiScale(
gray,
scaleFactor=1.3,
minNeighbors=5,
minSize=(80, 80),
flags=cv2.cv.CV_HAAR_SCALE_IMAGE
)
#print 'faces: ', faces
# Draw a rectangle around the faces
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 0, 255), 3)
#width, height = pyautogui.size()
#cursorx, cursory = pyautogui.position()
#posx = width - cursorx
#posy = cursory
pyautogui.moveTo(x+w, y+h)
# Display the resulting frame
#cv2.imshow('Video', frame)
rimg = cv2.flip(frame,1) #invert the object frame
cv2.imshow("vertical flip", rimg)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# When everything is done, release the capture
video_capture.release()
cv2.destroyAllWindows()
【问题讨论】:
-
如果您在获得框架后立即反转框架会发生什么。而不是做 rimg 只是为了展示它。此外,如果您将框架调整为您的屏幕尺寸,它不会解决其他问题吗?
-
您还可以做另一件事。尽管我认为您仍然必须在检测到人脸之前翻转图像。但是您不需要调整它的大小(我认为即使调整大小也无法到达屏幕的边缘。)您可以检测脸部是否位于框架的中心区域以及它是否没有相应地移动光标(每 x 毫秒)。如果面部离中心区域较远,则使鼠标朝该方向移动得更快,如果更近,则将其移动得更慢。 if center(ish) 停止鼠标移动。
-
首先,你能校准头部的运动或面部表情(眉毛、眼睛等)的运动吗?我建议将头部的运动排除在程序之外,以避免通过突然的规避、附加、扭曲和俯冲运动过度刺激内耳(身体的陀螺仪)。你能生成你的鼠标跟踪数据吗?只需在上、下、左、右移动鼠标时打印出 X、Y 坐标,然后使用该数据编辑帖子。
标签: python windows opencv pyautogui