Face-Recognition / src /faceRecognize /Handdetection.py
Ankit93's picture
Add application file
29572ad
Raw
History Blame Contribute Delete
5.99 kB
# #!/usr/bin/env python
# # -*- coding: utf-8 -*-
# #from pygame import mixer
# import json
# import pyaudio
# import wave
# import sys
# import csv
# import copy
# import argparse
# import itertools
# import time
# import winsound
# from collections import Counter
# from collections import deque
# import cv2 as cv
# import numpy as np
# import mediapipe as mp
# from utils import CvFpsCalc
# from model import KeyPointClassifier
# print("imported all the libraries")
# from model import PointHistoryClassifier
# import cv2 as cv
# import numpy as np
# import mediapipe as mp
# from model import KeyPointClassifier
# from utils import CvFpsCalc
# # Load your KeyPointClassifier and other necessary modules here
# mp_hands = mp.solutions.hands
# hands = mp_hands.Hands(
# static_image_mode=False,
# max_num_hands=2,
# min_detection_confidence=0.5,
# min_tracking_confidence=0.5,
# )
# keypoint_classifier = KeyPointClassifier()
# cvFpsCalc = CvFpsCalc(buffer_len=10)
# point_history = []
# keypoint_classifier_labels = {
# 0: "Fist",
# 1: "One",
# 2: "Two",
# 3: "Three",
# 4: "Four",
# 5: "Five",
# 6: "Rock",
# 7: "Spock",
# 8: "Live long and prosper"
# }
# def calc_bounding_rect(frame, landmarks):
# # Calculate bounding box
# brect = cv.boundingRect(np.array([landmark for landmark in landmarks]))
# cv.rectangle(frame, (brect[0], brect[1]), (brect[0] + brect[2], brect[1] + brect[3]), (0, 255, 0), 2)
# return brect
# def calc_landmark_list(frame, landmarks):
# # Calculate landmark list
# landmark_list = []
# for i, landmark in enumerate(landmarks.landmark):
# x = int(landmark.x * frame.shape[1])
# y = int(landmark.y * frame.shape[0])
# landmark_list.append([x, y])
# cv.circle(frame, (x, y), 3, (0, 0, 255), thickness=5)
# return landmark_list
# def pre_process_landmark(landmark_list):
# # Convert to relative coordinates / normalized coordinates
# pre_processed_landmark_list = []
# base_x, base_y = landmark_list[0]
# for landmark in landmark_list[1:]:
# pre_processed_landmark_list.append([(landmark[0] - base_x), (landmark[1] - base_y)])
# return pre_processed_landmark_list
# def draw_bounding_rect(use_brect, frame, brect):
# # Draw bounding box
# if use_brect:
# cv.rectangle(frame, (brect[0], brect[1]), (brect[0] + brect[2], brect[1] + brect[3]), (255, 0, 0), 2)
# return frame
# def draw_landmarks(frame, landmark_list):
# # Draw landmarks
# for landmark in landmark_list:
# cv.circle(frame, (landmark[0], landmark[1]), 5, (0, 255, 0), thickness=-1)
# return frame
# def draw_info_text(frame, brect, handedness, hand_sign):
# # Draw information text
# info_text = f"Handedness: {handedness.classification[0].label}"
# cv.putText(frame, info_text, (brect[0], brect[1] - 10), cv.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 1, cv.LINE_AA)
# cv.putText(frame, hand_sign, (brect[0], brect[1] - 30), cv.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 1, cv.LINE_AA)
# return frame
# def draw_point(frame, point):
# # Draw point
# cv.circle(frame, (point[0], point[1]), 5, (0, 255, 0), thickness=-1)
# return frame
# def draw_line(frame, point1, point2):
# # Draw line
# cv.line(frame, (point1[0], point1[1]), (point2[0], point2[1]), (0, 0, 255), thickness=3)
# return frame
# def draw_info(frame, fps, mode_text, keypoint_classifier_labels):
# # Draw additional information
# inf = [
# ("Mode", mode_text),
# ("FPS", f"{fps:.2f}"),
# ]
# for i, (key, value) in enumerate(inf):
# y = 20 + i * 20
# x = 20
# cv.putText(frame, f"{key}: {value}", (x, y), cv.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 1, cv.LINE_AA)
# y = 50
# for i, (key, value) in enumerate(keypoint_classifier_labels.items()):
# y = 80 + i * 20
# x = 20
# cv.putText(frame, f"{key}: {value}", (x, y), cv.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 1, cv.LINE_AA)
# return frame
# def HAND(frame):
# global point_history
# global keypoint_classifier
# debug_image = frame
# frame = cv.cvtColor(frame, cv.COLOR_BGR2RGB)
# frame.flags.writeable = False
# results = hands.process(frame)
# frame.flags.writeable = True
# if results.multi_hand_landmarks is not None:
# for hand_landmarks, handedness in zip(results.multi_hand_landmarks, results.multi_handedness):
# # Bounding box calculation
# brect = calc_bounding_rect(debug_image, hand_landmarks)
# # Landmark calculation
# landmark_list = calc_landmark_list(debug_image, hand_landmarks)
# # Conversion to relative coordinates / normalized coordinates
# pre_processed_landmark_list = pre_process_landmark(landmark_list)
# # Hand sign classification
# hand_sign_id = keypoint_classifier(pre_processed_landmark_list)
# if hand_sign_id == "Not applicable":
# point_history.append(landmark_list[8])
# else:
# point_history.append([0, 0])
# debug_image = draw_bounding_rect(use_brect, debug_image, brect)
# debug_image = draw_landmarks(debug_image, landmark_list)
# debug_image = draw_info_text(debug_image, brect, handedness, keypoint_classifier_labels[hand_sign_id])
# else:
# point_history.append([0, 0])
# for i, point in enumerate(point_history):
# if point[0] == 0 and point[1] == 0:
# continue
# debug_image = draw_point(debug_image, point)
# if i != 0 and point_history[i - 1][0] != 0 and point_history[i - 1][1] != 0:
# debug_image = draw_line(debug_image, point_history[i - 1], point)
# mode_text = "Mode: Normal"
# debug_image = draw_info(debug_image, 0.0, mode_text, keypoint_classifier_labels)
# return debug_image