eva-ia-robot 0.1.5 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,10 +1,21 @@
1
1
  Gem::Specification.new do |s|
2
- s.name = "eva-ia-robot"
3
- s.version = "0.1.5"
4
- s.description = "Gem integrada com Google Speech e Google Translate"
5
- s.summary = "Command line"
6
- s.author = "Henrique Utsch"
7
- s.email = "henriqueutsch@gmail.com"
8
- s.homepage = "https://github.com/henriqueutsch/Eva-IA-Robot"
9
- s.files = Dir["{lib/**/*.rb,README.rdoc,test/**/*.rb,eva_ia_robot/*.rb,eva_ia_robot/*.dll,eva_ia_robot/*.config,eva_ia_robot/*.exe,Rakefile,*.gemspec}"]
2
+ s.name = "eva-ia-robot"
3
+ s.version = "0.1.7"
4
+ s.description = "Gem integrada com Google Speech e Google Translate"
5
+ s.summary = "Command line"
6
+ s.author = "Henrique Utsch"
7
+ s.email = "henriqueutsch@gmail.com"
8
+ s.homepage = "https://github.com/henriqueutsch/Eva-IA-Robot"
9
+ s.files = Dir["{lib/**/*.rb,README.rdoc,tests/**/*.rb,lib/eva_ia_robot/*.rb,lib/eva_ia_robot/*.dll,lib/eva_ia_robot/*.config,lib/eva_ia_robot/*.exe,,lib/eva_ia_robot/*.yml,lib/Rakefile,*.gemspec}"]
10
+ s.add_dependency "cgi"
11
+ s.add_dependency 'open-uri'
12
+ s.add_dependency 'json'
13
+ s.add_dependency 'fileutils'
14
+ s.add_dependency 'nokogiri'
15
+ s.add_dependency 'rubygems'
16
+ s.add_dependency 'rbconfig'
17
+ s.add_dependency 'yaml'
18
+ s.add_dependency 'win32/sound'
19
+ s.add_dependency 'win32ole'
20
+
10
21
  end
File without changes
@@ -0,0 +1,5 @@
1
+ language: pt-br
2
+ beep: nao
3
+ feedback: nao
4
+ showrecord: nao
5
+ temporesposta: nao
@@ -0,0 +1,87 @@
1
+ # encoding: utf-8
2
+ #1 - falta corrigir o erro em eva-pergunta.rb
3
+ # antes do rescue
4
+ # 706: unexpected token at '{"status":5,"id":"","hypotheses":[]}
5
+ # 706: unexpected token at '{"status":0,"id":"","hypotheses":[{"utterance":"desativar","confidence":0.86765343}]}
6
+ # A JSON text must at least contain two octets!
7
+ # undefined method `[]' for nil:NilClass
8
+ #2 - ao executar um programa
9
+ # [Decode error - output not utf-8]
10
+ # 3 - repetição de comando
11
+ # limpar alguma variavel
12
+ # 4 - criar o tempo de resposta
13
+ # 5 - problemas ao listar comandos
14
+ # modulos do ruby para instalar basta abrir o prompt de comando e digitar "gem install [nome]" ex: "gem install win32ole"
15
+ require 'win32ole'
16
+ require 'yaml'
17
+ # carrega os arquivos .rb
18
+ require './eva-pergunta.rb'
19
+ require './eva-resposta.rb'
20
+ require './eva-modulo.rb'
21
+
22
+ # teste mas ainda não sei como vou fazer isso.
23
+ module HelloWorld
24
+ def self.say
25
+ "Hello World!"
26
+ end
27
+ end
28
+
29
+ class Time
30
+ def to_ms
31
+ (self.to_f * 1000.0).to_i
32
+ end
33
+ end
34
+
35
+ shell = WIN32OLE.new('Shell.Application')
36
+ cnf = YAML::load(File.open('config.yml'))
37
+ @frase = ""
38
+ @feedback = cnf['feedback']
39
+ @beep = cnf['beep']
40
+ @showrecord = cnf['showrecord']
41
+
42
+
43
+ evaconfig()
44
+
45
+ while @frase !="sair" do
46
+
47
+
48
+ begin
49
+ # puts start_time = Time.now
50
+ @frase = pergunta()
51
+ puts "Usuario: #{@frase}"
52
+ rescue =>e
53
+ puts e.message
54
+ end
55
+
56
+
57
+
58
+ if @listacomandos.include? @frase
59
+
60
+ if @listaexecutar[@listacomandos.index(@frase)].include? '%'
61
+ p abrir = @listaexecutar[@listacomandos.index(@frase)].gsub('%',"").gsub("\n",'')
62
+ shell.ShellExecute(abrir, "", "", "open", 1)
63
+ end
64
+
65
+ if @listaexecutar[@listacomandos.index(@frase)].include? '&'
66
+ p fechar = @listaexecutar[@listacomandos.index(@frase)].gsub('&',"").gsub("\n",'')
67
+ system("taskkill /IM #{fechar}")
68
+ end
69
+
70
+ if @listaexecutar[@listacomandos.index(@frase)].include? '$'
71
+ p executar = @listaexecutar[@listacomandos.index(@frase)].gsub('$',"").gsub("\n",'')
72
+ modulos(executar)
73
+ end
74
+
75
+ if @listaresposta[@listacomandos.index(@frase)].include? '$'
76
+ p executar = @listaresposta[@listacomandos.index(@frase)].gsub('$',"")
77
+ modulos(executar)
78
+ else
79
+ p "EVA: #{@listaresposta[@listacomandos.index(@frase)]}"
80
+ resposta(@listaresposta[@listacomandos.index(@frase)])
81
+
82
+ end
83
+ end
84
+ # puts end_time = Time.now
85
+ # puts elapsed_time = end_time.to_ms - start_time.to_ms # => 3004
86
+
87
+ end
@@ -4,7 +4,44 @@ require 'nokogiri'
4
4
  require 'rubygems'
5
5
  require 'rbconfig'
6
6
 
7
- load 'eva-resposta.rb'
7
+ require './eva-resposta.rb'
8
+
9
+ def evaconfig()
10
+ @listacomandos = Array.new
11
+ @listaresposta = Array.new
12
+ @listaexecutar = Array.new
13
+
14
+ File.open(Dir.pwd()+'/eva.config', 'r:utf-8') do |linha|
15
+ while line = linha.gets
16
+ # p line
17
+ # p line.class
18
+ # p line.index('#')
19
+ # p line.index(':')
20
+ # p line.index('=')
21
+ # p line.size
22
+ line.encoding
23
+ comandos = line[line.index('#')+1..line.index(':')-1]
24
+ resposta = line[line.index(':')+1..line.index('=>')-1]
25
+ executar = line[line.index('=>')+2..line.size]
26
+ @listacomandos << comandos.gsub('[','').gsub(']','')
27
+ @listaresposta << resposta.gsub('[','').gsub(']','')
28
+ @listaexecutar << executar.gsub('[','').gsub(']','').gsub('\n','')
29
+
30
+ end
31
+ end
32
+ # puts listacomandos
33
+ # puts listaresposta
34
+ # puts listaexecutar
35
+
36
+
37
+ # p listacomandos.index('abrir chrome')
38
+ # p listaresposta[listacomandos.index('abrir chrome')]
39
+ end
40
+
41
+
42
+
43
+
44
+
8
45
  def os
9
46
  @os ||= (
10
47
  host_os = RbConfig::CONFIG['host_os']
@@ -58,6 +95,39 @@ def hora()
58
95
  resposta("são #{Time.now.hour.to_s} horas e #{Time.now.min.to_s} minutos")
59
96
  end
60
97
 
98
+ def exit()
99
+ @frase = 'sair'
100
+ end
101
+
102
+ def beepoff()
103
+ @beep = 'nao'
104
+ end
105
+
106
+ def beepon()
107
+ @beep = 'sim'
108
+ end
109
+
110
+ def feedbackon()
111
+ @feedback = 'sim'
112
+ end
113
+
114
+ def feedbackoff()
115
+ @feedback = 'nao'
116
+ end
117
+
118
+ def showrecordon()
119
+ @showrecord = 'sim'
120
+ end
121
+
122
+ def showrecordoff()
123
+ @showrecord = 'nao'
124
+ end
125
+
126
+ def exibircomandos()
127
+ puts 'LISTA DE COMANDOS'
128
+ puts @listacomandos
129
+ end
130
+
61
131
  def modulos(modulo)
62
132
  case modulo
63
133
  when 'hora'
@@ -68,8 +138,26 @@ def modulos(modulo)
68
138
  data()
69
139
  when 'sistema'
70
140
  os()
141
+ when 'evaconfig'
142
+ evaconfig()
143
+ when 'exit'
144
+ exit()
145
+ when 'beepoff'
146
+ beepoff()
147
+ when 'beepon'
148
+ beepon()
149
+ when 'feedbackon'
150
+ feedbackon()
151
+ when 'feedbackoff'
152
+ feedbackoff()
153
+ when 'showrecordon'
154
+ showrecordon()
155
+ when 'showrecordoff'
156
+ showrecordoff()
157
+ when 'exibircomandos()'
158
+ exibircomandos()
71
159
  else
72
- puts 'erro 1'
160
+ puts 'Módulo não encontrado'
73
161
  end
74
162
  end
75
163
 
@@ -1,17 +1,16 @@
1
1
  # encoding: utf-8
2
2
  # Esse código transforma audio em texto via api do google speech
3
-
4
3
  # Win32/sound modulo para tocar um beep via script
5
4
  require 'json'
6
5
  require 'win32/sound'
7
6
  include Win32
8
- load 'eva-resposta.rb'
7
+ require './eva-resposta.rb'
9
8
 
10
- def pergunta(feedback,beep)
9
+ def pergunta()
11
10
  # imprimi na tela um feedback visual de quando dar o comando verbal
12
- p 'gravando ...'
11
+ p 'EVA: gravando ...'
13
12
  # verifica se a configuração auditiva para dar o comando verbal esta setada na configuração
14
- if beep== true
13
+ if @beep == 'sim'
15
14
  # Emite um som antes da gravação da voz
16
15
  Sound.beep(1500, 200)
17
16
  end
@@ -19,9 +18,14 @@ def pergunta(feedback,beep)
19
18
  # puts "inicio gravação #{Time.now}"
20
19
  # 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
21
20
  # 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
22
- system('rec.exe -q -r 16000 test.flac silence -l 1 0.1 1% 1 1.5 1%')
21
+ if @showrecord == 'sim'
22
+ system('rec.exe -r 16000 test.flac silence -l 1 0.1 1% 1 1.5 1%')
23
+ else
24
+ system('rec.exe -q -r 16000 test.flac silence -l 1 0.1 1% 1 1.5 1%')
25
+ end
26
+
23
27
  # feedback para o envio do arquivo para o google
24
- p 'Enviando arquivo ...'
28
+ p 'EVA: Enviando arquivo ...'
25
29
  # p "inicio envio #{Time.now}"
26
30
  # envia o arquivo test.flac para o servidor e este retorna um json
27
31
  # {\"status\":0,\"id\":\"\",\"hypotheses\":[{\"utterance\":\"abrir word\",\"confidence\":0.82485712}]}\n"
@@ -40,22 +44,27 @@ def pergunta(feedback,beep)
40
44
  resposta = JSON.parse(request)
41
45
  # puts "chegada resposta #{Time.now}"
42
46
  rescue =>e
47
+ puts 'antes do rescue'
48
+ puts e
43
49
  # se houver erro ele simplesmente exibe a mensagem de erro e continua o seu processamento normal
44
50
  puts e.message
51
+ puts 'status'
52
+ puts resposta["status"]
53
+ puts 'erro no rescue'
45
54
  end
46
55
  # 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
47
56
  if resposta["status"] == 5
48
57
  # a variavel feedback controla se vai ter resposta por audio ou apenas visual
49
- if feedback==true
58
+ if @feedback=='sim'
50
59
  resposta("favor repêtir o comando")
51
60
  else
52
- puts "favor repetir o comando"
61
+ puts "EVA: Favor repetir o comando"
53
62
  end
54
63
 
55
64
  else
56
65
  # pega apenas o texto do json
57
66
  resp = resposta["hypotheses"][0]["utterance"]
58
- puts resp
67
+ # puts resp
59
68
  # retorna o texto
60
69
  return resp
61
70
  end
@@ -1,3 +1,4 @@
1
+ # encoding: utf-8
1
2
  # Esse código transforma texto em audio via api do google Translate
2
3
  require "cgi"
3
4
  require 'open-uri'
@@ -14,6 +15,10 @@ def resposta(texto)
14
15
  end
15
16
  # system executa um comando no prompt
16
17
  # play.exe executa audio via linha de comando para não precisar de um player externo.
17
- system('play.exe -q arquivo.mp3')
18
+ if @showrecord == 'sim'
19
+ system('play.exe arquivo.mp3')
20
+ else
21
+ system('play.exe -q arquivo.mp3')
22
+ end
18
23
  end
19
24
  # resposta('abrindo chrome')
@@ -13,4 +13,14 @@
13
13
  #[finalizar illustrator]:[finalizando illustrator]=>[&illustrator.exe]
14
14
  #[abrir prompt]:[abrindo prompt de comando]=>[%cmd.exe]
15
15
  #[finalizar prompt]:[finalizando prompt]=>[&cmd.exe]
16
- #[sair]:[finalizando sistema de voz]=>[$exit]
16
+ #[atualizar comandos]:[lista de comandos atualizada]=>[$evaconfig]
17
+ #[bom dia]:[tenha um bom dia]=>[]
18
+ #[sair]:[finalizando sistema de voz]=>[]
19
+ #[finalizar sistema]:[finalizando sistema de voz]=>[$exit]
20
+ #[desativar som]:[sistema de beep desativado]=>[$beepoff]
21
+ #[ativar som]:[sistema de beep ativado]=>[$beepon]
22
+ #[desativar]:[sistema de resposta desativado]=>[$feedbackoff]
23
+ #[ativar]:[sistema de resposta ativado]=>[$feedbackon]
24
+ #[exibir som]:[sistema de som visualmente ativo]=>[$showrecordon]
25
+ #[ocultar som]:[sistema de som visualmente oculto]=>[$showrecordoff]
26
+ #[exibir comandos]:[exibindo lista de comandos]=>[$listarcomandos]
@@ -1,5 +1,8 @@
1
1
  require "test/unit"
2
- load "../eva-ia-robot.rb"
2
+ require '../lib/eva_ia_robot/eva-ia-robot.rb'
3
+
4
+ # require "../eva_ia_robot/eva-pergunta.rb"
5
+
3
6
 
4
7
  class HelloWorldTest < Test::Unit::TestCase
5
8
  def test_say_hello_to_the_world
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.5
4
+ version: 0.1.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,32 +9,143 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-02-19 00:00:00.000000000 -03:00
12
+ date: 2014-02-20 00:00:00.000000000 -03:00
13
13
  default_executable:
14
- dependencies: []
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: cgi
17
+ requirement: &24307476 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: *24307476
26
+ - !ruby/object:Gem::Dependency
27
+ name: open-uri
28
+ requirement: &24307212 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: *24307212
37
+ - !ruby/object:Gem::Dependency
38
+ name: json
39
+ requirement: &24306960 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ type: :runtime
46
+ prerelease: false
47
+ version_requirements: *24306960
48
+ - !ruby/object:Gem::Dependency
49
+ name: fileutils
50
+ requirement: &24306696 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ type: :runtime
57
+ prerelease: false
58
+ version_requirements: *24306696
59
+ - !ruby/object:Gem::Dependency
60
+ name: nokogiri
61
+ requirement: &24306444 !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ! '>='
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ type: :runtime
68
+ prerelease: false
69
+ version_requirements: *24306444
70
+ - !ruby/object:Gem::Dependency
71
+ name: rubygems
72
+ requirement: &24306168 !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ type: :runtime
79
+ prerelease: false
80
+ version_requirements: *24306168
81
+ - !ruby/object:Gem::Dependency
82
+ name: rbconfig
83
+ requirement: &24305904 !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ! '>='
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ type: :runtime
90
+ prerelease: false
91
+ version_requirements: *24305904
92
+ - !ruby/object:Gem::Dependency
93
+ name: yaml
94
+ requirement: &24305652 !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ! '>='
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ type: :runtime
101
+ prerelease: false
102
+ version_requirements: *24305652
103
+ - !ruby/object:Gem::Dependency
104
+ name: win32/sound
105
+ requirement: &24305376 !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ type: :runtime
112
+ prerelease: false
113
+ version_requirements: *24305376
114
+ - !ruby/object:Gem::Dependency
115
+ name: win32ole
116
+ requirement: &24305052 !ruby/object:Gem::Requirement
117
+ none: false
118
+ requirements:
119
+ - - ! '>='
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
122
+ type: :runtime
123
+ prerelease: false
124
+ version_requirements: *24305052
15
125
  description: Gem integrada com Google Speech e Google Translate
16
126
  email: henriqueutsch@gmail.com
17
127
  executables: []
18
128
  extensions: []
19
129
  extra_rdoc_files: []
20
130
  files:
21
- - test/eva_ia_robot_test.rb
22
- - eva_ia_robot/eva-ia-robot.rb
23
- - eva_ia_robot/eva-modulo.rb
24
- - eva_ia_robot/eva-pergunta.rb
25
- - eva_ia_robot/eva-resposta.rb
26
- - eva_ia_robot/libgomp-1.dll
27
- - eva_ia_robot/libltdl-7.dll
28
- - eva_ia_robot/libmad.dll
29
- - eva_ia_robot/libmp3lame.dll
30
- - eva_ia_robot/pthreadgc2.dll
31
- - eva_ia_robot/zlib1.dll
32
- - eva_ia_robot/eva.config
33
- - eva_ia_robot/play.exe
34
- - eva_ia_robot/rec.exe
35
- - eva_ia_robot/sox.exe
36
- - eva_ia_robot/wget.exe
37
- - Rakefile
131
+ - lib/eva_ia_robot/eva-ia-robot.rb
132
+ - lib/eva_ia_robot/eva-modulo.rb
133
+ - lib/eva_ia_robot/eva-pergunta.rb
134
+ - lib/eva_ia_robot/eva-resposta.rb
135
+ - tests/eva_ia_robot_test.rb
136
+ - lib/eva_ia_robot/libgomp-1.dll
137
+ - lib/eva_ia_robot/libltdl-7.dll
138
+ - lib/eva_ia_robot/libmad.dll
139
+ - lib/eva_ia_robot/libmp3lame.dll
140
+ - lib/eva_ia_robot/pthreadgc2.dll
141
+ - lib/eva_ia_robot/zlib1.dll
142
+ - lib/eva_ia_robot/eva.config
143
+ - lib/eva_ia_robot/play.exe
144
+ - lib/eva_ia_robot/rec.exe
145
+ - lib/eva_ia_robot/sox.exe
146
+ - lib/eva_ia_robot/wget.exe
147
+ - lib/eva_ia_robot/config.yml
148
+ - lib/Rakefile
38
149
  - eva_ia_robot.gemspec
39
150
  has_rdoc: true
40
151
  homepage: https://github.com/henriqueutsch/Eva-IA-Robot
@@ -1,86 +0,0 @@
1
- # encoding: utf-8
2
- # comandos.conf
3
- # documentar caminho completo
4
- # modulos do ruby para instalar basta abrir o prompt de comando e digitar "gem install [nome]" ex: "gem install win32ole"
5
- require "cgi"
6
- require 'open-uri'
7
- require 'json'
8
- require 'win32ole'
9
- require 'rbconfig'
10
- require 'fileutils'
11
-
12
-
13
- # carrega os arquivos .rb tentei com require mas não funcionou
14
- load 'eva-pergunta.rb'
15
- load 'eva-resposta.rb'
16
- load 'eva-modulo.rb'
17
-
18
- shell = WIN32OLE.new('Shell.Application')
19
- frase = ""
20
- feedback = true
21
- beep = true
22
- listacomandos = Array.new
23
- listaresposta = Array.new
24
- listaexecutar = Array.new
25
-
26
- File.open(Dir.pwd()+'/eva.config', 'r:utf-8') do |linha|
27
- while line = linha.gets
28
- # p line
29
- # p line.class
30
- # p line.index('#')
31
- # p line.index(':')
32
- # p line.index('=')
33
- # p line.size
34
- line.encoding
35
- comandos = line[line.index('#')+1..line.index(':')-1]
36
- resposta = line[line.index(':')+1..line.index('=>')-1]
37
- executar = line[line.index('=>')+2..line.size]
38
-
39
- comandos
40
- listacomandos << comandos.gsub('[','').gsub(']','')
41
- listaresposta << resposta.gsub('[','').gsub(']','')
42
- listaexecutar << executar.gsub('[','').gsub(']','').gsub('\n','')
43
-
44
- end
45
- end
46
- # puts listacomandos
47
- # puts listaresposta
48
- # puts listaexecutar
49
-
50
-
51
- # p listacomandos.index('abrir chrome')
52
- # p listaresposta[listacomandos.index('abrir chrome')]
53
-
54
-
55
- while frase !="sair" do
56
-
57
-
58
- begin
59
- p frase = pergunta(feedback,beep)
60
- rescue =>e
61
- puts e.message
62
- end
63
-
64
-
65
-
66
- if listacomandos.include? frase
67
-
68
- if listaexecutar[listacomandos.index(frase)].include? '%'
69
- p abrir = listaexecutar[listacomandos.index(frase)].gsub('%',"").gsub("\n",'')
70
- shell.ShellExecute(abrir, "", "", "open", 1)
71
- end
72
-
73
- if listaexecutar[listacomandos.index(frase)].include? '&'
74
- p fechar = listaexecutar[listacomandos.index(frase)].gsub('&',"").gsub("\n",'')
75
- system("taskkill /IM #{fechar}")
76
- end
77
-
78
- if listaresposta[listacomandos.index(frase)].include? '$'
79
- p executar = listaresposta[listacomandos.index(frase)].gsub('$',"")
80
- modulos(executar)
81
- else
82
- resposta(listaresposta[listacomandos.index(frase)])
83
- puts listaresposta[listacomandos.index(frase)]
84
- end
85
- end
86
- end