Это очень простой код, чтобы все заработало. Пометка в нейронных сетях для выражений лица может быть намного лучше, но опять-таки скорость является фактором.

м коде я использую Python 2.7.13, OpenCV 2.4.13 и PyAutoGUI 0.9.36. Цель состоит в том, чтобы переместить курсор в соответствии с движением лица, но движение курсора является инвертированным. Например, если мое лицо поворачивается вправо, курсор перемещается влево, а если мое лицо перемещается влево, курсор перемещается вправо. Кроме того, я хочу, чтобы курсор двигался вправо, влево, вверх и вниз на весь экран моего ПК, размер которого 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()

Ответы на вопрос(0)

Ваш ответ на вопрос