eva-ia-robot 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/eva_ia_robot.gemspec +1 -1
- data/eva_ia_robot/eva-ia-robot.rb +48 -36
- data/eva_ia_robot/eva-pergunta.rb +29 -2
- data/eva_ia_robot/eva-resposta.rb +8 -0
- data/eva_ia_robot/os.rb +23 -0
- data/eva_ia_robot/versao.rb +0 -1
- metadata +2 -1
data/eva_ia_robot.gemspec
CHANGED
@@ -1,5 +1,8 @@
|
|
1
|
-
#!/bin/env ruby
|
2
1
|
# encoding: utf-8
|
2
|
+
# comandos.conf
|
3
|
+
# caminho completo execução Dir.pwd
|
4
|
+
# documentar caminho completo
|
5
|
+
# modulos do ruby para instalar basta abrir o prompt de comando e digitar "gem install [nome]" ex: "gem install win32ole"
|
3
6
|
require "cgi"
|
4
7
|
require 'open-uri'
|
5
8
|
require 'json'
|
@@ -7,64 +10,71 @@ require 'win32ole'
|
|
7
10
|
require 'rbconfig'
|
8
11
|
require 'fileutils'
|
9
12
|
|
13
|
+
# carrega os arquivos .rb tentei com require mas não funcionou
|
10
14
|
load 'eva-pergunta.rb'
|
11
15
|
load 'eva-resposta.rb'
|
12
16
|
load 'versao.rb'
|
17
|
+
load 'os.rb'
|
13
18
|
|
19
|
+
# teste mas ainda não sei como vou fazer isso.
|
14
20
|
module HelloWorld
|
15
21
|
def self.say
|
16
22
|
"Hello World!"
|
17
23
|
end
|
18
24
|
end
|
19
25
|
|
20
|
-
|
21
|
-
puts "teste"
|
26
|
+
# tentei abrir o programa pelo system() mas não funcionou direito o WIN32OLE é uma biblioteca "dll" do windows
|
22
27
|
shell = WIN32OLE.new('Shell.Application')
|
28
|
+
# inicializa configuração
|
23
29
|
frase = ""
|
24
30
|
feedback = true
|
25
31
|
beep = true
|
26
|
-
|
27
|
-
|
28
|
-
host_os = RbConfig::CONFIG['host_os']
|
29
|
-
case host_os
|
30
|
-
when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
|
31
|
-
'windows'
|
32
|
-
when /darwin|mac os/
|
33
|
-
'macosx'
|
34
|
-
when /linux/
|
35
|
-
'linux'
|
36
|
-
when /solaris|bsd/
|
37
|
-
'unix'
|
38
|
-
else
|
39
|
-
raise Error::WebDriverError, "unknown os: #{host_os.inspect}"
|
40
|
-
end
|
41
|
-
)
|
42
|
-
end
|
32
|
+
|
33
|
+
# loop para ficar gravando o comando de voz repetidamente so sai do loop e finaliza o sistema se o comando "sair" for executado
|
43
34
|
while frase !="sair" do
|
35
|
+
# se houver algum erro ele imprimi e continua o processamento
|
44
36
|
begin
|
37
|
+
# chama o procedimento pergunta para gravar o audio
|
38
|
+
# feedback true - habilita a resposta para repetir o comando
|
39
|
+
# feedback = false - desabilita a resposta para repetir o comndo
|
40
|
+
# beep = true - habilita beep antes da gravação
|
41
|
+
# beep = false - desabilita beep antes da gravação
|
42
|
+
|
43
|
+
# a referência sobre a pergunta encontra-se no arquivo eva-pergunta.rb
|
45
44
|
p frase = pergunta(feedback,beep)
|
46
45
|
rescue =>e
|
46
|
+
# se houver erro simplesmente imprime
|
47
47
|
puts e.message
|
48
48
|
end
|
49
|
+
|
50
|
+
# OBSERVAÇÃO---------------------------------------
|
51
|
+
# Você pode alterar o valor de frase e de resposta.
|
52
|
+
|
53
|
+
# se a conversão do audio gravado em texto for igual a frase, ele executa os comandos e o feedback auditivo do sistema.
|
49
54
|
if frase == 'eva'
|
55
|
+
# quando o usuário dar o comando eva o sitema responde falando "pois não"
|
56
|
+
# a referência sobre a resposta encontra-se no arquivo eva-resposta.rb
|
50
57
|
resposta('pois não')
|
51
58
|
end
|
52
59
|
|
53
60
|
if frase == 'versão'
|
61
|
+
# recebe a verificação da versão do sistema
|
54
62
|
resposta(versao())
|
55
|
-
|
56
63
|
end
|
57
64
|
|
65
|
+
# desativa o feedback com o conteúdo "favor repetir o comando"
|
58
66
|
if frase == 'desativar'
|
59
67
|
resposta('sistema de resposta desativado')
|
60
68
|
feedback = false
|
61
69
|
end
|
62
70
|
|
63
|
-
|
71
|
+
# ativa o feedback com o conteúdo "favor repetir o comando"
|
72
|
+
if frase == 'ativar'
|
64
73
|
resposta('sistema de resposta ativado')
|
65
74
|
feedback = true
|
66
75
|
end
|
67
76
|
|
77
|
+
# desativa o feedback com o conteúdo "favor repetir o comando"
|
68
78
|
if frase == 'desativar som'
|
69
79
|
resposta('sistema de beep desativado')
|
70
80
|
beep = false
|
@@ -101,43 +111,45 @@ resposta("hoje é #{semana[Time.now.wday]} dia #{Time.now.day.to_s} de #{mes[Tim
|
|
101
111
|
end
|
102
112
|
|
103
113
|
if frase == 'abrir word'
|
114
|
+
p "inicio execução #{Time.now}"
|
115
|
+
shell.ShellExecute("winword.exe", "", "", "open", 1)
|
104
116
|
resposta('abrindo word')
|
105
|
-
|
117
|
+
p "final execução #{Time.now}"
|
118
|
+
|
106
119
|
end
|
107
120
|
|
108
|
-
|
121
|
+
if frase == 'finalizar word'
|
122
|
+
system("taskkill /IM winword.exe")
|
109
123
|
resposta('finalizando word')
|
110
|
-
|
124
|
+
|
111
125
|
end
|
112
126
|
|
113
127
|
if frase == 'abrir illustrator'
|
114
|
-
|
115
|
-
|
128
|
+
resposta('abrindo ilustreitor')
|
129
|
+
shell.ShellExecute("illustrator.exe", "", "", "open", 1)
|
116
130
|
end
|
117
131
|
|
118
132
|
if frase == 'finalizar illustrator'
|
119
|
-
|
120
|
-
|
133
|
+
resposta('finalizando ilustreitor')
|
134
|
+
system("taskkill /IM illustrator.exe")
|
121
135
|
end
|
122
136
|
|
123
|
-
|
137
|
+
if frase == 'abrir prompt'
|
124
138
|
resposta('abrindo prompt de comando')
|
125
|
-
|
139
|
+
shell.ShellExecute("cmd.exe", "", "", "open", 1)
|
126
140
|
end
|
127
141
|
|
128
|
-
|
142
|
+
if frase == 'finalizar prompt'
|
129
143
|
resposta('finalizando prompt')
|
130
|
-
|
144
|
+
system("taskkill /IM cmd.exe")
|
131
145
|
end
|
132
146
|
|
133
|
-
|
134
|
-
if frase == 'sair'
|
147
|
+
if frase == 'sair'
|
135
148
|
resposta('finalizando sistema de voz')
|
136
149
|
resposta('tênha um bom dia')
|
137
150
|
|
138
151
|
end
|
139
152
|
|
140
|
-
|
141
153
|
if frase == 'sistema operacional'
|
142
154
|
resposta("seu sistema operacional é #{os()}")
|
143
155
|
end
|
@@ -1,24 +1,49 @@
|
|
1
|
-
#!/bin/env ruby
|
2
1
|
# encoding: utf-8
|
2
|
+
# Esse código transforma audio em texto via api do google speech
|
3
|
+
|
4
|
+
# Win32/sound modulo para tocar um beep via script
|
3
5
|
require 'win32/sound'
|
4
6
|
include Win32
|
5
7
|
|
6
|
-
|
7
8
|
def pergunta(feedback,beep)
|
9
|
+
# imprimi na tela um feedback visual de quando dar o comando verbal
|
8
10
|
p 'gravando ...'
|
11
|
+
# verifica se a configuração auditiva para dar o comando verbal esta setada na configuração
|
9
12
|
if beep== true
|
13
|
+
# Emite um som antes da gravação da voz
|
10
14
|
Sound.beep(1500, 200)
|
11
15
|
end
|
16
|
+
|
17
|
+
p "inicio gravação #{Time.now}"
|
18
|
+
# utilizamos o sox que é um programa para gravar audio via linha de comando - no caso salva com o nome test.flac que é o formato do google
|
19
|
+
# silence -l significa que o rec.exe grava o audio e ao perceber o silencio finaliza a gravação e salva o arquivo ja no formato permitido pelo google speech
|
12
20
|
system('rec.exe -r 16000 test.flac silence -l 1 0.1 1% 1 1.5 1%')
|
21
|
+
# feedback para o envio do arquivo para o google
|
13
22
|
p 'Enviando arquivo ...'
|
23
|
+
p "inicio envio #{Time.now}"
|
24
|
+
# envia o arquivo test.flac para o servidor e este retorna um json
|
25
|
+
# {\"status\":0,\"id\":\"\",\"hypotheses\":[{\"utterance\":\"abrir word\",\"confidence\":0.82485712}]}\n"
|
26
|
+
# status =>0 - significa sucesso
|
27
|
+
# status =>5 - significa que o audio não foi reconhecido
|
28
|
+
# atterance => texto - o texto convertido
|
29
|
+
|
30
|
+
|
14
31
|
request = %x(wget.exe -q -U "rate=16000" -O - "http://www.google.com/speech-api/v1/recognize?lang=pt-BR&client=Mozilla/5.0" --post-file test.flac --header="Content-Type: audio/x-flac; rate=16000")
|
32
|
+
# loop que corrige um bug de sair do programa quando o tempo de gravação é muito grande ou quando o json retorna algum erro ou simplesmente nulo
|
15
33
|
begin
|
34
|
+
# força a codificação com acento
|
35
|
+
p request
|
16
36
|
request.force_encoding('utf-8')
|
37
|
+
# converte a resposta da requisição para json
|
17
38
|
resposta = JSON.parse(request)
|
39
|
+
p "chegada resposta #{Time.now}"
|
18
40
|
rescue =>e
|
41
|
+
# se houver erro ele simplesmente exibe a mensagem de erro e continua o seu processamento normal
|
19
42
|
puts e.message
|
20
43
|
end
|
44
|
+
# se o status for 5, quer dizer que o texto não foi reconhecido adequadamente então ele pede para repetir o comando caso contrario ele retorna o texto
|
21
45
|
if resposta["status"] == 5
|
46
|
+
# a variavel feedback controla se vai ter resposta por audio ou apenas visual
|
22
47
|
if feedback==true
|
23
48
|
resposta("favor repêtir o comando")
|
24
49
|
else
|
@@ -26,8 +51,10 @@ def pergunta(feedback,beep)
|
|
26
51
|
end
|
27
52
|
|
28
53
|
else
|
54
|
+
# pega apenas o texto do json
|
29
55
|
resp = resposta["hypotheses"][0]["utterance"]
|
30
56
|
puts resp
|
57
|
+
# retorna o texto
|
31
58
|
return resp
|
32
59
|
end
|
33
60
|
end
|
@@ -1,8 +1,16 @@
|
|
1
|
+
# Esse código transforma texto em audio via api do google Translate
|
1
2
|
def resposta(texto)
|
3
|
+
#converte o texto para a requisição via url
|
2
4
|
texto = CGI::escape(texto)
|
5
|
+
#envia o texto ao servidor do google e retorna os dados de audio
|
6
|
+
#modifique a tag pt para alterar o idioma a ser convertido
|
3
7
|
url = 'http://translate.google.com/translate_tts?ie=UTF-8&tl=pt&q='+texto
|
8
|
+
# abre o arquivo localmente com o nome arquivo.mp3 e escreve os dados da requisição para salva-los localmente
|
4
9
|
open("arquivo.mp3", "wb") do |file|
|
10
|
+
#Escreve dentro do arquivo e já salva
|
5
11
|
file.write(open(url).read)
|
6
12
|
end
|
13
|
+
# system executa um comando no prompt
|
14
|
+
# play.exe executa audio via linha de comando para não precisar de um player externo.
|
7
15
|
system('play.exe arquivo.mp3')
|
8
16
|
end
|
data/eva_ia_robot/os.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# verifica o sistema operacional e retorna o nome do sistema em formato texto
|
3
|
+
require 'rbconfig'
|
4
|
+
|
5
|
+
def os
|
6
|
+
@os ||= (
|
7
|
+
host_os = RbConfig::CONFIG['host_os']
|
8
|
+
case host_os
|
9
|
+
when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
|
10
|
+
'windows'
|
11
|
+
when /darwin|mac os/
|
12
|
+
'macosx'
|
13
|
+
when /linux/
|
14
|
+
'linux'
|
15
|
+
when /solaris|bsd/
|
16
|
+
'unix'
|
17
|
+
else
|
18
|
+
raise Error::WebDriverError, "unknown os: #{host_os.inspect}"
|
19
|
+
end
|
20
|
+
)
|
21
|
+
end
|
22
|
+
|
23
|
+
p os()
|
data/eva_ia_robot/versao.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eva-ia-robot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -22,6 +22,7 @@ files:
|
|
22
22
|
- eva_ia_robot/eva-ia-robot.rb
|
23
23
|
- eva_ia_robot/eva-pergunta.rb
|
24
24
|
- eva_ia_robot/eva-resposta.rb
|
25
|
+
- eva_ia_robot/os.rb
|
25
26
|
- eva_ia_robot/vagrantlistbox.rb
|
26
27
|
- eva_ia_robot/versao.rb
|
27
28
|
- eva_ia_robot/libgomp-1.dll
|