Commit 2b4fed0ff33cc2ad48ed2a8765ea52118340ebf0

Authored by dhuy
1 parent b2311aa0
Exists in master and in 1 other branch devel

Criação do endpoint de Reconhecimento de Voz

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(&quot;/&quot;, 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 });
... ...
uploads/.gitempty 0 → 100644