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 | install: | 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 | run: | 10 | run: |
6 | @forever start server.js | 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 | case "texto": | 7 | case "texto": |
4 | return 4; | 8 | return 4; |
5 | break; | 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 | case "opaco": | 63 | case "opaco": |
12 | return 0; | 64 | return 0; |
13 | break; | 65 | break; |
@@ -18,7 +70,63 @@ function transparency(parameter) { | @@ -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 | var t_types = ["opaco", "transparente"]; | 130 | var t_types = ["opaco", "transparente"]; |
23 | 131 | ||
24 | for (var i = 0; i < t_types.length; i++){ | 132 | for (var i = 0; i < t_types.length; i++){ |
@@ -32,6 +140,54 @@ function verifyTransparency(transparency) { | @@ -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 | \ No newline at end of file | 194 | \ No newline at end of file |
server.js
1 | var parameters = require('./helpers/parameters'); | 1 | var parameters = require('./helpers/parameters'); |
2 | var exec = require('child_process').exec, child; | 2 | var exec = require('child_process').exec, child; |
3 | +var path = require('path'); | ||
4 | +var fs = require('fs'); | ||
3 | var express = require("express"); | 5 | var express = require("express"); |
4 | 6 | ||
5 | var host = '0.0.0.0'; | 7 | var host = '0.0.0.0'; |
@@ -7,10 +9,11 @@ var port = 5000; | @@ -7,10 +9,11 @@ var port = 5000; | ||
7 | 9 | ||
8 | var app = express(); | 10 | var app = express(); |
9 | 11 | ||
10 | -var ID_FROM_BD = 0; | 12 | +var ID_FROM_BD = 1; |
11 | var SERVER_IP = "150.165.204.30"; | 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 | app.get("/", function(req, res){ | 18 | app.get("/", function(req, res){ |
16 | res.send(200, "<center><h2>Server " + host + ":" + port + " is running</h2></center>"); | 19 | res.send(200, "<center><h2>Server " + host + ":" + port + " is running</h2></center>"); |
@@ -18,42 +21,96 @@ app.get("/", function(req, res){ | @@ -18,42 +21,96 @@ app.get("/", function(req, res){ | ||
18 | 21 | ||
19 | app.post("/api", function(req, res){ | 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 | if (req.query.servico !== "") { | 25 | if (req.query.servico !== "") { |
26 | + /* Verifica qual é o Tipo de Serviço fornecido */ | ||
24 | switch(req.query.servico) { | 27 | switch(req.query.servico) { |
28 | + /* Case para o Tipo de Serviço: Texto */ | ||
25 | case "texto": | 29 | case "texto": |
30 | + /* Verifica se os paramêtros [transparencia, texto] possuem algum valor */ | ||
26 | if ((req.query.transparencia !== "") && (req.query.texto !== "")) { | 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 | child.on("close", function(code, signal){ | 46 | child.on("close", function(code, signal){ |
37 | res.send(200, { "response" : "http://" + SERVER_IP + ":" + port + "/" + ID_FROM_BD + ".webm" }); | 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 | } else { | 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 | } else { | 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 | break; | 101 | break; |
47 | 102 | ||
103 | + /* Case para um Tipo de Serviço inválido */ | ||
48 | default: | 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 | break; | 106 | break; |
51 | } | 107 | } |
52 | } else { | 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 | app.listen(port, host, function(){ | 114 | app.listen(port, host, function(){ |
58 | - console.log("Server running on " + host + ":" + port); | 115 | + console.log('Server running on ' + host + ':' + port); |
59 | }); | 116 | }); |