Commit 2b4fed0ff33cc2ad48ed2a8765ea52118340ebf0
1 parent
b2311aa0
Exists in
master
and in
1 other branch
Criação do endpoint de Reconhecimento de Voz
Showing
4 changed files
with
244 additions
and
26 deletions
Show diff stats
Makefile
1 | 1 | install: |
2 | - @npm install | |
3 | - @sudo npm install -g forever | |
2 | + @read -p "Você deseja instalar o módulo Forever? (y/n) " choice; \ | |
3 | + if [ "$$choice" = "y" ]; then \ | |
4 | + sudo npm install -g forever; \ | |
5 | + npm install; \ | |
6 | + else \ | |
7 | + npm install; \ | |
8 | + fi | |
4 | 9 | |
5 | 10 | run: |
6 | 11 | @forever start server.js | ... | ... |
helpers/parameters.js
1 | -function service_type(parameter) { | |
2 | - switch(parameter) { | |
1 | +function getServiceType(service_type) { | |
2 | + switch(service_type) { | |
3 | + case "video": | |
4 | + return 3; | |
5 | + break; | |
6 | + | |
3 | 7 | case "texto": |
4 | 8 | return 4; |
5 | 9 | break; |
6 | 10 | } |
7 | 11 | }; |
8 | 12 | |
9 | -function transparency(parameter) { | |
10 | - switch(parameter) { | |
13 | +function getLanguage(language) { | |
14 | + switch(language) { | |
15 | + case "portugues": | |
16 | + return 1; | |
17 | + break; | |
18 | + | |
19 | + case "glosa": | |
20 | + return 2; | |
21 | + break; | |
22 | + } | |
23 | +}; | |
24 | + | |
25 | +function getPosition(position) { | |
26 | + switch(position) { | |
27 | + case "superior-esquerdo": | |
28 | + return 1; | |
29 | + break; | |
30 | + | |
31 | + case "superior-direito": | |
32 | + return 2; | |
33 | + break; | |
34 | + | |
35 | + case "inferior-direito": | |
36 | + return 3; | |
37 | + break; | |
38 | + | |
39 | + case "inferior-esquerdo": | |
40 | + return 4; | |
41 | + break; | |
42 | + } | |
43 | +}; | |
44 | + | |
45 | +function getSize(size) { | |
46 | + switch(size) { | |
47 | + case "pequeno": | |
48 | + return 1; | |
49 | + break; | |
50 | + | |
51 | + case "medio": | |
52 | + return 2; | |
53 | + break; | |
54 | + | |
55 | + case "grande": | |
56 | + return 3; | |
57 | + break; | |
58 | + } | |
59 | +}; | |
60 | + | |
61 | +function getTransparency(transparency) { | |
62 | + switch(transparency) { | |
11 | 63 | case "opaco": |
12 | 64 | return 0; |
13 | 65 | break; |
... | ... | @@ -18,7 +70,63 @@ function transparency(parameter) { |
18 | 70 | } |
19 | 71 | }; |
20 | 72 | |
21 | -function verifyTransparency(transparency) { | |
73 | +function checkServiceType(service_type) { | |
74 | + var t_types = ["video", "texto"]; | |
75 | + | |
76 | + for (var i = 0; i < t_types.length; i++){ | |
77 | + if (service_type === t_types[i]) { | |
78 | + return true; | |
79 | + } | |
80 | + | |
81 | + if ((i + 1) === t_types.length) { | |
82 | + return false; | |
83 | + } | |
84 | + } | |
85 | +}; | |
86 | + | |
87 | +function checkLanguage(language) { | |
88 | + var t_types = ["portugues", "glosa"]; | |
89 | + | |
90 | + for (var i = 0; i < t_types.length; i++){ | |
91 | + if (language === t_types[i]) { | |
92 | + return true; | |
93 | + } | |
94 | + | |
95 | + if ((i + 1) === t_types.length) { | |
96 | + return false; | |
97 | + } | |
98 | + } | |
99 | +}; | |
100 | + | |
101 | +function checkPosition(position) { | |
102 | + var t_types = ["superior-esquerdo", "superior-direito", "inferior-esquerdo", "inferior-direito"]; | |
103 | + | |
104 | + for (var i = 0; i < t_types.length; i++){ | |
105 | + if (position === t_types[i]) { | |
106 | + return true; | |
107 | + } | |
108 | + | |
109 | + if ((i + 1) === t_types.length) { | |
110 | + return false; | |
111 | + } | |
112 | + } | |
113 | +}; | |
114 | + | |
115 | +function checkSize(size) { | |
116 | + var t_types = ["pequeno", "medio", "grande"]; | |
117 | + | |
118 | + for (var i = 0; i < t_types.length; i++){ | |
119 | + if (size === t_types[i]) { | |
120 | + return true; | |
121 | + } | |
122 | + | |
123 | + if ((i + 1) === t_types.length) { | |
124 | + return false; | |
125 | + } | |
126 | + } | |
127 | +}; | |
128 | + | |
129 | +function checkTransparency(transparency) { | |
22 | 130 | var t_types = ["opaco", "transparente"]; |
23 | 131 | |
24 | 132 | for (var i = 0; i < t_types.length; i++){ |
... | ... | @@ -32,6 +140,54 @@ function verifyTransparency(transparency) { |
32 | 140 | } |
33 | 141 | }; |
34 | 142 | |
35 | -module.exports.service_type = service_type; | |
36 | -module.exports.transparency = transparency; | |
37 | -module.exports.verifyTransparency = verifyTransparency; | |
143 | +function errorMessage(message) { | |
144 | + return { "error": message } | |
145 | +}; | |
146 | + | |
147 | +function checkVideo(file) { | |
148 | + var accepted_file_types = ["flv", "ts", "avi", "mp4", "mov", "webm", "wmv", "mkv",]; | |
149 | + return check_type(file, accepted_file_types) | |
150 | +}; | |
151 | + | |
152 | +function checkSubtitle(file) { | |
153 | + var accepted_file_types = ["srt"]; | |
154 | + return check_type(file, accepted_file_types) | |
155 | +}; | |
156 | + | |
157 | +function check_type(file, accepted_file_types) { | |
158 | + | |
159 | + console.log(file); | |
160 | + | |
161 | + var ext = file.substring(file.lastIndexOf('.') + 1).toLowerCase(); | |
162 | + var isValidFile = false; | |
163 | + | |
164 | + for (var i = 0; i < accepted_file_types.length; i++) { | |
165 | + if (ext == accepted_file_types[i]) { | |
166 | + isValidFile = true; | |
167 | + break; | |
168 | + } | |
169 | + } | |
170 | + | |
171 | + if (!isValidFile) { | |
172 | + file.value = null; | |
173 | + } | |
174 | + | |
175 | + return isValidFile; | |
176 | +}; | |
177 | + | |
178 | +module.exports.getServiceType = getServiceType; | |
179 | +module.exports.getLanguage = getLanguage; | |
180 | +module.exports.getPosition = getPosition; | |
181 | +module.exports.getSize = getSize; | |
182 | +module.exports.getTransparency = getTransparency; | |
183 | + | |
184 | +module.exports.checkServiceType = checkServiceType; | |
185 | +module.exports.checkLanguage = checkLanguage; | |
186 | +module.exports.checkPosition = checkPosition; | |
187 | +module.exports.checkSize = checkSize; | |
188 | +module.exports.checkTransparency = checkTransparency; | |
189 | + | |
190 | +module.exports.checkVideo = checkVideo; | |
191 | +module.exports.checkSubtitle = checkSubtitle; | |
192 | + | |
193 | +module.exports.errorMessage = errorMessage; | |
38 | 194 | \ No newline at end of file | ... | ... |
server.js
1 | 1 | var parameters = require('./helpers/parameters'); |
2 | 2 | var exec = require('child_process').exec, child; |
3 | +var path = require('path'); | |
4 | +var fs = require('fs'); | |
3 | 5 | var express = require("express"); |
4 | 6 | |
5 | 7 | var host = '0.0.0.0'; |
... | ... | @@ -7,10 +9,11 @@ var port = 5000; |
7 | 9 | |
8 | 10 | var app = express(); |
9 | 11 | |
10 | -var ID_FROM_BD = 0; | |
12 | +var ID_FROM_BD = 1; | |
11 | 13 | var SERVER_IP = "150.165.204.30"; |
12 | 14 | |
13 | -app.use(express.static(__dirname + "/videos")); | |
15 | +app.use(express.static(path.join(__dirname, "/videos"))); | |
16 | +app.use(express.bodyParser({ keepExtensions: true, uploadDir: path.join(__dirname, '/uploads') })); | |
14 | 17 | |
15 | 18 | app.get("/", function(req, res){ |
16 | 19 | res.send(200, "<center><h2>Server " + host + ":" + port + " is running</h2></center>"); |
... | ... | @@ -18,42 +21,96 @@ app.get("/", function(req, res){ |
18 | 21 | |
19 | 22 | app.post("/api", function(req, res){ |
20 | 23 | |
21 | - ID_FROM_BD++; | |
22 | - | |
24 | + /* Verifica se o paramêtro [servico] possui algum valor */ | |
23 | 25 | if (req.query.servico !== "") { |
26 | + /* Verifica qual é o Tipo de Serviço fornecido */ | |
24 | 27 | switch(req.query.servico) { |
28 | + /* Case para o Tipo de Serviço: Texto */ | |
25 | 29 | case "texto": |
30 | + /* Verifica se os paramêtros [transparencia, texto] possuem algum valor */ | |
26 | 31 | if ((req.query.transparencia !== "") && (req.query.texto !== "")) { |
32 | + /* Verifica se o paramêtro [transparencia] possui os únicos valores possíveis [opaco, transparente] */ | |
33 | + if (parameters.getTransparency(req.query.transparencia)) { | |
34 | + /* Cria a linha de comando */ | |
35 | + var command_line = "echo " + req.query.texto + " >> " + __dirname + "/text_files/" + ID_FROM_BD + " && cd ../vlibras-core" + | |
36 | + " && ./gtaaas " + parameters.getServiceType(req.query.servico) + " ../vlibras-api/text_files/" + | |
37 | + ID_FROM_BD + " " + parameters.getTransparency(req.query.transparencia) + " " + ID_FROM_BD + " WEB"; | |
27 | 38 | |
28 | - if (parameters.verifyTransparency(req.query.transparencia)) { | |
29 | - child = exec("echo " + req.query.texto + " >> " + __dirname + "/text_files/" + ID_FROM_BD + | |
30 | - " && cd ../vlibras-core" + | |
31 | - " && ./gtaaas " + parameters.service_type(req.query.servico) + " ../vlibras-api/text_files/" + | |
32 | - ID_FROM_BD + " " + parameters.transparency(req.query.transparencia) + " " + ID_FROM_BD + " WEB", function(err, stdout, stderr) { | |
33 | - // [stdout] = vlibras-core output | |
34 | - }); | |
39 | + /* Executa a linha de comando */ | |
40 | + child = exec(command_line, function(err, stdout, stderr) { | |
41 | + // [stdout] = vlibras-core output | |
42 | + // console.log(stdout); | |
43 | + }); | |
35 | 44 | |
45 | + /* Listener que dispara quando a requisição ao core finaliza */ | |
36 | 46 | child.on("close", function(code, signal){ |
37 | 47 | res.send(200, { "response" : "http://" + SERVER_IP + ":" + port + "/" + ID_FROM_BD + ".webm" }); |
48 | + ID_FROM_BD++; | |
38 | 49 | }); |
50 | + } else { | |
51 | + res.send(500, parameters.errorMessage('Parâmetros insuficientes ou inválidos')); | |
52 | + } | |
53 | + } else { | |
54 | + res.send(500, parameters.errorMessage('O valor de algum parâmetro está vazio')); | |
55 | + } | |
56 | + break; | |
39 | 57 | |
58 | + case 'video': | |
59 | + | |
60 | + /* Verifica se os paramêtros [transparencia, texto] possuem algum valor */ | |
61 | + if ((req.query.posicao !== "") && (req.query.tamanho !== "") && (req.query.transparencia !== "")) { | |
62 | + /* Verifica se os paramêtros [linguagem, posicao, tamanho, transparencia] possuem os seus únicos valores possíveis */ | |
63 | + if ((parameters.checkPosition(req.query.posicao) === true) && (parameters.checkSize(req.query.tamanho) === true) && (parameters.checkTransparency(req.query.transparencia) === true)) { | |
64 | + /* Checa se o arquivo de vídeo submetivo possui uma extensão válida */ | |
65 | + if (parameters.checkVideo(req.files.video.name)) { | |
66 | + /* Cria uma pasta cujo o nome é o ID */ | |
67 | + child = exec('mkdir ' + __dirname + '/uploads/' + ID_FROM_BD); | |
68 | + | |
69 | + /* Listener que dispara quando a pasta é criada */ | |
70 | + child.on('close', function(code, signal){ | |
71 | + /* Move o vídeo submetido para a pasta com o seu ID correspondente */ | |
72 | + fs.rename(req.files.video.path, __dirname + '/uploads/' + ID_FROM_BD + '/' + req.files.video.name, function(error) { | |
73 | + if (error) { console.log(error); } | |
74 | + }); | |
75 | + | |
76 | + /* Cria a linha de comando */ | |
77 | + var command_line = "cd ../vlibras-core && ./gtaaas " + parameters.getServiceType(req.query.servico) + " ../vlibras-api/uploads/" + ID_FROM_BD + "/" + | |
78 | + req.files.video.name + " 1 " + parameters.getPosition(req.query.posicao) + " " + parameters.getSize(req.query.tamanho) + " " + | |
79 | + parameters.getTransparency(req.query.transparencia) + " " + ID_FROM_BD; | |
80 | + | |
81 | + /* Executa a linha de comando */ | |
82 | + child = exec(command_line, function(err, stdout, stderr) { | |
83 | + // [stdout] = vlibras-core output | |
84 | + // console.log(stdout); | |
85 | + }); | |
86 | + | |
87 | + /* Listener que dispara quando a requisição ao core finaliza */ | |
88 | + child.on("close", function(code, signal){ | |
89 | + res.send(200, { "response" : "http://" + SERVER_IP + ":" + port + "/" + ID_FROM_BD + ".flv" }); | |
90 | + }); | |
91 | + }); | |
92 | + } else { | |
93 | + res.send(500, parameters.errorMessage('Vídeo com Extensão Inválida')); | |
94 | + } | |
40 | 95 | } else { |
41 | - res.send(500, "<center><h2>Valor de Transparência Inválido</h2></center>"); | |
96 | + res.send(500, parameters.errorMessage('Parâmetros insuficientes ou inválidos')); | |
42 | 97 | } |
43 | 98 | } else { |
44 | - res.send(500, "<center><h2>Parâmetro Vazio</h2></center>"); | |
99 | + res.send(500, parameters.errorMessage('O valor de algum parâmetro está vazio')); | |
45 | 100 | } |
46 | 101 | break; |
47 | 102 | |
103 | + /* Case para um Tipo de Serviço inválido */ | |
48 | 104 | default: |
49 | - res.send(500, "<center><h2>Tipo de Serviço Inválido</h2></center>"); | |
105 | + res.send(500, parameters.errorMessage('Tipo do serviço inválido')); | |
50 | 106 | break; |
51 | 107 | } |
52 | 108 | } else { |
53 | - res.send(500, "<center><h2>Especifique o Tipo de Serviço</h2></center>"); | |
109 | + res.send(500, parameters.errorMessage('Especifique o tipo do serviço')); | |
54 | 110 | } |
111 | + | |
55 | 112 | }); |
56 | 113 | |
57 | 114 | app.listen(port, host, function(){ |
58 | - console.log("Server running on " + host + ":" + port); | |
115 | + console.log('Server running on ' + host + ':' + port); | |
59 | 116 | }); | ... | ... |