eva-ia-robot 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|