File size: 1,279 Bytes
4db3489
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
from tensorflow import keras
import numpy as np
import cv2
import tensorflow as tf


class Classifier:
    def __init__(self, modelPath):
        self.model=tf.keras.models.load_model(modelPath)
        self.imageSize=64

    def get_prediction(self, imgCrop, hand):
        # img input
        imgResize=cv2.resize(imgCrop, (self.imageSize, self.imageSize))
        img_normalized=imgResize/255.0
        img_reshaped=np.reshape(img_normalized, (1, self.imageSize, self.imageSize, 3))

        # coor input
        landmarks=[]
        for lm in hand["lmList"]:
            coords=[lm[0]/64, lm[1]/64]  # img size = 64*64, coor normalization
            landmarks.extend(coords)
        landmarks=np.array(landmarks).reshape(1, -1)  # reshape as (1, 42)

        # prediction by trained model
        prediction=self.model.predict([img_reshaped, landmarks])
        index=np.argmax(prediction)
        probability=prediction[0][index]

        labels={0: 'A', 1: 'B', 2: 'C', 3: 'D', 4: 'E', 5: 'F', 6: 'G', 7: 'H', 8: 'I', 9: 'J',
                10: 'K', 11: 'L', 12: 'M', 13: 'N', 14: 'O', 15: 'P', 16: 'Q', 17: 'R', 18: 'S',
                19: 'T', 20: 'U', 21: 'V', 22: 'W', 23: 'X', 24: 'Y', 25: 'Z', 26: 'del', 27: 'space'}

        return labels[index], probability