-
Notifications
You must be signed in to change notification settings - Fork 1
/
wel.py
79 lines (63 loc) · 2.39 KB
/
wel.py
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import cv2
import mediapipe as mp
from keras.models import load_model
import numpy as np
import tensorflow as tf
#tensorFlow versão 2.9.1
cap = cv2.VideoCapture(0)
hands = mp.solutions.hands.Hands(max_num_hands=1)
classes = ["A", "B", "C", "D", "E", "F", "G", "I", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "Y"]
model = load_model('sign_language_model_processed_64x64_3.h5')
data = np.ndarray(shape=(1, 64, 64, 3), dtype=np.float32)
def predictor(test_image):
test_image = tf.keras.utils.img_to_array(test_image)
test_image = np.expand_dims(test_image, axis = 0)
result = model.predict(test_image)
return result
def process_image(img):
# Converter para escala de cinza
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Aplicar o filtro de Canny
edges = cv2.Canny(gray, 100, 200)
# Converter as bordas detectadas para uma máscara de 3 canais
mask = cv2.cvtColor(edges, cv2.COLOR_GRAY2BGR)
# Remover o fundo
img_no_bg = cv2.bitwise_and(img, mask)
blurimg = cv2.blur(img, (3, 3) )
return img
while True:
success, img = cap.read()
frameRGB = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
results = hands.process(frameRGB)
handsPoints = results.multi_hand_landmarks
h, w, _ = img.shape
if handsPoints != None:
for hand in handsPoints:
x_max = 0
y_max = 0
x_min = w
y_min = h
for lm in hand.landmark:
x, y = int(lm.x * w), int(lm.y * h)
if x > x_max:
x_max = x
if x < x_min:
x_min = x
if y > y_max:
y_max = y
if y < y_min:
y_min = y
cv2.rectangle(img, (x_min-50, y_min-50), (x_max+50, y_max+50), (0, 255, 0), 2)
try:
imgCrop = img[y_min-60:y_max+60,x_min-60:x_max+60]
imgCrop = cv2.resize(imgCrop, (64, 64))
imgCrop = process_image(imgCrop)
cv2.imshow("crop", imgCrop)
prediction = predictor(imgCrop)
print(prediction)
indexVal = np.argmax(prediction)
cv2.putText(img,classes[indexVal],(x_min-50,y_min-65),cv2.FONT_HERSHEY_COMPLEX,3,(0,0,255),5)
except:
continue
cv2.imshow('Imagem',img)
cv2.waitKey(1)