54 lines
1.5 KiB
Python
54 lines
1.5 KiB
Python
import cv2
|
|
|
|
from predictions.k_nearest import KNearestNeighbours
|
|
from predictions.predictor import Predictor
|
|
from predictions.svm_model import SVM
|
|
|
|
if __name__ == '__main__':
|
|
buffer = []
|
|
# open webcam stream
|
|
cap = cv2.VideoCapture(0)
|
|
|
|
type_predictor = "svm"
|
|
if type_predictor == "knn":
|
|
k = 10
|
|
predictor_type = KNearestNeighbours(k)
|
|
elif type_predictor == "svm":
|
|
predictor_type = SVM()
|
|
else:
|
|
predictor_type = KNearestNeighbours(1)
|
|
|
|
|
|
|
|
# embeddings_path = 'embeddings/basic-signs/embeddings.csv'
|
|
embeddings_path = 'embeddings/fingerspelling/embeddings.csv'
|
|
|
|
predictor = Predictor(embeddings_path, predictor_type)
|
|
|
|
index = 0
|
|
|
|
while cap.isOpened():
|
|
# Wait for key press to exit
|
|
if cv2.waitKey(5) & 0xFF == 27:
|
|
break
|
|
|
|
ret, frame = cap.read()
|
|
pose = predictor.extract_keypoints(frame)
|
|
|
|
if pose is None:
|
|
cv2.imshow('MediaPipe Hands', frame)
|
|
continue
|
|
|
|
buffer.append(pose)
|
|
if len(buffer) > 15:
|
|
buffer.pop(0)
|
|
|
|
if len(buffer) == 15:
|
|
label, score = predictor.make_prediction(buffer)
|
|
|
|
# draw label
|
|
cv2.putText(frame, str(label), (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2, cv2.LINE_AA)
|
|
cv2.putText(frame, str(score), (10, 60), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2, cv2.LINE_AA)
|
|
|
|
# Show the frame
|
|
cv2.imshow('MediaPipe Hands', frame) |