W tym kodzie używam Python 2.7.13, OpenCV 2.4.13 i PyAutoGUI 0.9.36. Celem jest przesunięcie kursora zgodnie z ruchem twarzy, ale ruch kursora jest odwrócony. Na przykład, jeśli moja twarz idzie w prawo, kursor przesuwa się w lewo, a jeśli moja twarz idzie w lewo, kursor przesuwa się w prawo. Chcę również, aby kursor przesuwał się w prawo, w lewo, w górę iw dół na całym ekranie mojego komputera, którego rozmiar to x = 1920, y = 1080.Jak mogę odwrócić ruch kursora w pythonie?
Celem tego programu jest pokazanie, że możliwe jest uzyskanie nowego sposobu uzyskania większej niezależności i dostępu, tak aby osoby z tetraplegią mogły wykonywać proste czynności, które są częścią rutyny milionów osób , takie jak włączanie i wyłączanie światła oraz włączanie i wyłączanie telewizora.
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()
co się stanie, jeśli odwrócisz ramkę natychmiast po jej uzyskaniu. zamiast robić rimg, żeby to pokazać. Również, jeśli zmienisz rozmiar ramki do rozmiaru ekranu, czy nie rozwiąże to innego problemu? – ROAR
Jest jeszcze jedna rzecz, którą możesz zrobić. chociaż myślę, że nadal musisz odwrócić obraz, zanim wykryjesz na nim twarz. Ale nie musisz zmieniać jego rozmiaru (nie sądzę, że nawet przy zmianie rozmiaru możesz dostać się do krawędzi ekranu.) Możesz wykryć, czy twarz znajduje się w środkowej części ramki, a jeśli nie jest odpowiednio przesunięty (co x milisekund). Jeśli twarz znajduje się dalej od środka, spraw, aby mysz poruszała się szybciej w tym kierunku, a jeśli jest bliżej, porusza się wolniej. jeśli środek (ish) zatrzyma ruch myszy. – ROAR
Po pierwsze, czy możesz określić ruch głowy lub ruch mimiki (brwi, oczu itp.)? Sugerowałbym, że ruch głowy byłby wykluczony z programu, aby uniknąć nadmiernego pobudzenia ucha wewnętrznego (żyroskopu ciała) przez nagły ruch obchodzenia, adhezji, skręcania i subdukcji. Czy możesz wygenerować dane śledzenia myszy? Po prostu wydrukuj swoje współrzędne X, Y podczas przesuwania myszy w górę, w dół, w lewo, w prawo i edytuj swój wpis z tymi danymi. – Danilo