diff --git a/gestures/gesture_recognition.py b/gestures/gesture_recognition.py new file mode 100644 index 0000000..fd2f6a4 --- /dev/null +++ b/gestures/gesture_recognition.py @@ -0,0 +1,38 @@ +import cv2 +import mediapipe as mp +import simple_gestures_lib as sgest + +mp_drawing = mp.solutions.drawing_utils +mp_hands = mp.solutions.hands +from math import sqrt + + + +hands = mp_hands.Hands( + min_detection_confidence=0.5, min_tracking_confidence=0.5) +cap = cv2.VideoCapture(0) +while cap.isOpened(): + success, image = cap.read() + image = cv2.cvtColor(cv2.flip(image, 1), cv2.COLOR_BGR2RGB) + image.flags.writeable = False + results = hands.process(image) + + image.flags.writeable = True + image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR) + if results.multi_hand_landmarks: + for hand_landmarks in results.multi_hand_landmarks: + mp_drawing.draw_landmarks( + image, hand_landmarks, mp_hands.HAND_CONNECTIONS) + if cv2.waitKey(33) == ord('s'): + if results.multi_hand_landmarks: + for hand_landmarks in results.multi_hand_landmarks: + print(sgest.check_index_finger(hand_landmarks)) + print(sgest.check_middle_finger(hand_landmarks)) + print(sgest.check_ring_finger(hand_landmarks)) + print(sgest.check_pinky_finger(hand_landmarks)) + + cv2.imshow('MediaPipe Hands', image) + if cv2.waitKey(5) & 0xFF == 27: + break +hands.close() +cap.release() diff --git a/gestures/simple_gestures_lib.py b/gestures/simple_gestures_lib.py new file mode 100644 index 0000000..ec7013e --- /dev/null +++ b/gestures/simple_gestures_lib.py @@ -0,0 +1,78 @@ +from math import sqrt + +def calculate_distance(ax, ay, bx, by): + distance = sqrt(((bx - ax) ** 2 + (by - ay) ** 2)) + return distance + +def check_index_finger(hand_landmarks): + ax = hand_landmarks.landmark[8].x + ay = hand_landmarks.landmark[8].y + bx = hand_landmarks.landmark[5].x + by = hand_landmarks.landmark[5].y + distance_8_5 = calculate_distance(ax, ay, bx, by) + ax = hand_landmarks.landmark[5].x + ay = hand_landmarks.landmark[5].y + bx = hand_landmarks.landmark[0].x + by = hand_landmarks.landmark[0].y + distance_5_0 = calculate_distance(ax, ay, bx, by) + + if (distance_5_0 < distance_8_5 + 0.1): + result = "wskazujacy_wyprostowany" + else: + result = "wskazujacy_niewyprostowany" + return (result, hand_landmarks.landmark[8].x, hand_landmarks.landmark[8].y) + +def check_middle_finger(hand_landmarks): + ax = hand_landmarks.landmark[12].x + ay = hand_landmarks.landmark[12].y + bx = hand_landmarks.landmark[9].x + by = hand_landmarks.landmark[9].y + distance_12_9 = calculate_distance(ax, ay, bx, by) + ax = hand_landmarks.landmark[9].x + ay = hand_landmarks.landmark[9].y + bx = hand_landmarks.landmark[0].x + by = hand_landmarks.landmark[0].y + distance_9_0 = calculate_distance(ax, ay, bx, by) + + if (distance_9_0 < distance_12_9 + 0.1): + result = "srodkowy_wyprostowany" + else: + result = "srodkowy_niewyprostowany" + return (result, hand_landmarks.landmark[12].x, hand_landmarks.landmark[12].y) + +def check_ring_finger(hand_landmarks): + ax = hand_landmarks.landmark[16].x + ay = hand_landmarks.landmark[16].y + bx = hand_landmarks.landmark[13].x + by = hand_landmarks.landmark[13].y + distance_16_13 = calculate_distance(ax, ay, bx, by) + ax = hand_landmarks.landmark[13].x + ay = hand_landmarks.landmark[13].y + bx = hand_landmarks.landmark[0].x + by = hand_landmarks.landmark[0].y + distance_13_0 = calculate_distance(ax, ay, bx, by) + + if (distance_13_0 < distance_16_13 + 0.1): + result = "serdeczny_wyprostowany" + else: + result = "serdeczny_niewyprostowany" + return (result, hand_landmarks.landmark[16].x, hand_landmarks.landmark[16].y) + +def check_pinky_finger(hand_landmarks): + ax = hand_landmarks.landmark[20].x + ay = hand_landmarks.landmark[20].y + bx = hand_landmarks.landmark[17].x + by = hand_landmarks.landmark[17].y + distance_20_17 = calculate_distance(ax, ay, bx, by) + ax = hand_landmarks.landmark[17].x + ay = hand_landmarks.landmark[17].y + bx = hand_landmarks.landmark[0].x + by = hand_landmarks.landmark[0].y + distance_17_0 = calculate_distance(ax, ay, bx, by) + + if (distance_17_0 < distance_20_17 + 0.1): + result = "maly_wyprostowany" + else: + result = "maly_niewyprostowany" + return (result, hand_landmarks.landmark[20].x, hand_landmarks.landmark[20].y) + diff --git a/rest-app/smartpicasso/__pycache__/__init__.cpython-38.pyc b/rest-app/smartpicasso/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 5271ef2..0000000 Binary files a/rest-app/smartpicasso/__pycache__/__init__.cpython-38.pyc and /dev/null differ diff --git a/rest-app/smartpicasso/__pycache__/settings.cpython-38.pyc b/rest-app/smartpicasso/__pycache__/settings.cpython-38.pyc deleted file mode 100644 index 4179416..0000000 Binary files a/rest-app/smartpicasso/__pycache__/settings.cpython-38.pyc and /dev/null differ diff --git a/rest-app/smartpicasso/__pycache__/urls.cpython-38.pyc b/rest-app/smartpicasso/__pycache__/urls.cpython-38.pyc deleted file mode 100644 index 1999ea5..0000000 Binary files a/rest-app/smartpicasso/__pycache__/urls.cpython-38.pyc and /dev/null differ diff --git a/rest-app/smartpicasso/__pycache__/wsgi.cpython-38.pyc b/rest-app/smartpicasso/__pycache__/wsgi.cpython-38.pyc deleted file mode 100644 index 532843f..0000000 Binary files a/rest-app/smartpicasso/__pycache__/wsgi.cpython-38.pyc and /dev/null differ diff --git a/rest-app/smartpicasso/app/user/__pycache__/__init__.cpython-38.pyc b/rest-app/smartpicasso/app/user/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 72eb12b..0000000 Binary files a/rest-app/smartpicasso/app/user/__pycache__/__init__.cpython-38.pyc and /dev/null differ diff --git a/rest-app/smartpicasso/app/user/__pycache__/admin.cpython-38.pyc b/rest-app/smartpicasso/app/user/__pycache__/admin.cpython-38.pyc deleted file mode 100644 index dc5c258..0000000 Binary files a/rest-app/smartpicasso/app/user/__pycache__/admin.cpython-38.pyc and /dev/null differ diff --git a/rest-app/smartpicasso/app/user/__pycache__/models.cpython-38.pyc b/rest-app/smartpicasso/app/user/__pycache__/models.cpython-38.pyc deleted file mode 100644 index 66e537e..0000000 Binary files a/rest-app/smartpicasso/app/user/__pycache__/models.cpython-38.pyc and /dev/null differ diff --git a/rest-app/smartpicasso/app/user/migrations/__pycache__/0001_initial.cpython-38.pyc b/rest-app/smartpicasso/app/user/migrations/__pycache__/0001_initial.cpython-38.pyc deleted file mode 100644 index f707b2c..0000000 Binary files a/rest-app/smartpicasso/app/user/migrations/__pycache__/0001_initial.cpython-38.pyc and /dev/null differ diff --git a/rest-app/smartpicasso/app/user/migrations/__pycache__/0002_auto_20201130_2119.cpython-38.pyc b/rest-app/smartpicasso/app/user/migrations/__pycache__/0002_auto_20201130_2119.cpython-38.pyc deleted file mode 100644 index 00ad2b8..0000000 Binary files a/rest-app/smartpicasso/app/user/migrations/__pycache__/0002_auto_20201130_2119.cpython-38.pyc and /dev/null differ diff --git a/rest-app/smartpicasso/app/user/migrations/__pycache__/__init__.cpython-38.pyc b/rest-app/smartpicasso/app/user/migrations/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 310f28a..0000000 Binary files a/rest-app/smartpicasso/app/user/migrations/__pycache__/__init__.cpython-38.pyc and /dev/null differ diff --git a/rest-app/smartpicasso/app/user_profile/__pycache__/__init__.cpython-38.pyc b/rest-app/smartpicasso/app/user_profile/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index f69046b..0000000 Binary files a/rest-app/smartpicasso/app/user_profile/__pycache__/__init__.cpython-38.pyc and /dev/null differ diff --git a/rest-app/smartpicasso/app/user_profile/__pycache__/admin.cpython-38.pyc b/rest-app/smartpicasso/app/user_profile/__pycache__/admin.cpython-38.pyc deleted file mode 100644 index 9753296..0000000 Binary files a/rest-app/smartpicasso/app/user_profile/__pycache__/admin.cpython-38.pyc and /dev/null differ diff --git a/rest-app/smartpicasso/app/user_profile/__pycache__/models.cpython-38.pyc b/rest-app/smartpicasso/app/user_profile/__pycache__/models.cpython-38.pyc deleted file mode 100644 index 5782243..0000000 Binary files a/rest-app/smartpicasso/app/user_profile/__pycache__/models.cpython-38.pyc and /dev/null differ diff --git a/rest-app/smartpicasso/app/user_profile/migrations/__pycache__/0001_initial.cpython-38.pyc b/rest-app/smartpicasso/app/user_profile/migrations/__pycache__/0001_initial.cpython-38.pyc deleted file mode 100644 index a792bc3..0000000 Binary files a/rest-app/smartpicasso/app/user_profile/migrations/__pycache__/0001_initial.cpython-38.pyc and /dev/null differ diff --git a/rest-app/smartpicasso/app/user_profile/migrations/__pycache__/__init__.cpython-38.pyc b/rest-app/smartpicasso/app/user_profile/migrations/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 0b6cc2b..0000000 Binary files a/rest-app/smartpicasso/app/user_profile/migrations/__pycache__/__init__.cpython-38.pyc and /dev/null differ