-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathlibras.py
140 lines (99 loc) · 4.68 KB
/
libras.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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
from abc import ABCMeta, abstractclassmethod
import cv2
import numpy as np
import matplotlib.pyplot as plt
import extrator_POSICAO as posicao
import extrator_ALTURA as altura
import extrator_PROXIMIDADE as proximidade
class Libras(metaclass=ABCMeta):
@abstractclassmethod
def processamento(self):
pass
class RedeNeural(Libras):
def __init__(self, imagem,proto,peso) -> None:
self.image = imagem
self.proto = proto
self.pesos = peso
def modelo(self):
print('carregando modulos...')
modelo = cv2.dnn.readNetFromCaffe(self.proto, self.pesos)
return modelo
def processamento(self):
print("Processamento...")
imagem = cv2.imread(self.image)
imagem_copia = np.copy(imagem)
imagem_largura = imagem.shape[1]
imagem_altura = imagem.shape[0]
proporcao = imagem_largura / imagem_altura
entrada_blob = cv2.dnn.blobFromImage(imagem, 1.0 / 255,
(int(((proporcao * 256) * 8) // 8), 256),
(0, 0, 0), swapRB=False, crop=False)
modelo = self.modelo()
modelo.setInput(entrada_blob)
saida = modelo.forward()
pontos = []
for i in range(0,22):
mapa_confianca = saida[0, i, :, :]
mapa_confianca = cv2.resize(mapa_confianca, (imagem_largura, imagem_altura))
_, confianca, _, ponto = cv2.minMaxLoc(mapa_confianca)
if confianca > 0.1:
cv2.circle(imagem_copia, (int(ponto[0]), int(ponto[1])), 5, (0,0,0),
thickness=4, lineType=cv2.FILLED)
cv2.putText(imagem_copia, ' ' + (str(int(ponto[0]))) + ',' +
str(int(ponto[1])), (int(ponto[0]), int(ponto[1])),
cv2.FONT_HERSHEY_SIMPLEX, 0.3, (0,0,0), 0, lineType=cv2.LINE_AA)
cv2.circle(imagem, (int(ponto[0]), int(ponto[1])), 4,
(0,0,0),
thickness=4, lineType=cv2.FILLED)
cv2.putText(imagem, ' ' + str(i), (int(ponto[0]),
int(ponto[1])),
cv2.FONT_HERSHEY_SIMPLEX, 0.4,
(0,0,0),
1, lineType=cv2.LINE_AA)
pontos.append((int(ponto[0]), int(ponto[1])))
else:
pontos.append((0, 0))
for par in [[0, 1], [1, 2], [2, 3], [3, 4], [0, 5], [5, 6], [6, 7], [7, 8],
[0, 9], [9, 10], [10, 11], [11, 12], [0, 13], [13, 14], [14, 15],
[15, 16], [0, 17], [17, 18], [18, 19], [19, 20]]:
if pontos[par[0]] != (0, 0) and pontos[par[1]] != (0, 0):
cv2.line(imagem_copia, pontos[par[0]], pontos[par[1]],
2, lineType=cv2.LINE_AA)
cv2.line(imagem, pontos[par[0]], pontos[par[1]],(0, 0, 255), 2,
lineType=cv2.LINE_AA)
posicao.posicoes = []
# Dedo polegar
posicao.verificar_posicao_DEDOS(pontos[1:5], 'polegar', altura.verificar_altura_MAO(pontos))
# Dedo indicador
posicao.verificar_posicao_DEDOS(pontos[5:9], 'indicador', altura.verificar_altura_MAO(pontos))
# Dedo médio
posicao.verificar_posicao_DEDOS(pontos[9:13], 'medio', altura.verificar_altura_MAO(pontos))
# Dedo anelar
posicao.verificar_posicao_DEDOS(pontos[13:17], 'anelar', altura.verificar_altura_MAO(pontos))
# Dedo mínimo
posicao.verificar_posicao_DEDOS(pontos[17:21], 'minimo', altura.verificar_altura_MAO(pontos))
letras = [chr(i) for i in range(65,91)]
for i, a in enumerate(alfabeto.letras):
if proximidade.verificar_proximidade_DEDOS(pontos) == alfabeto.letras[i]:
print(f'Letra : {letras[i]}')
cv2.putText(imagem, ' ' + letras[i], (50,50), cv2.FONT_HERSHEY_SIMPLEX, 1, (69,69,69),
2, lineType=cv2.LINE_AA)
# plt.figure(figsize= [14,10])
# plt.axis("off")
# plt.imshow(cv2.cvtColor(imagem, cv2.COLOR_BGR2RGB))
# plt.show()
class Montagem():
def gabinete(self,conteudo):
return conteudo
if __name__ == '__main__':
arquivo_proto = "pose_deploy.prototxt"
arquivo_pesos = "pose_iter_102000.caffemodel"
imagem = ""
imagem2 = ""
fabricar = Montagem()
libras = RedeNeural(imagem, arquivo_proto,arquivo_pesos)
obj = fabricar.gabinete(libras)
obj.processamento()
libras2 = RedeNeural(imagem2, arquivo_proto,arquivo_pesos)
obj2 = fabricar.gabinete(libras2)
obj2.processamento()