eva-ia-robot 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "eva-ia-robot"
3
- s.version = "0.1.3"
3
+ s.version = "0.1.4"
4
4
  s.description = "Gem integrada com Google Speech e Google Translate"
5
5
  s.summary = "Command line"
6
6
  s.author = "Henrique Utsch"
@@ -1,8 +1,7 @@
1
1
  # encoding: utf-8
2
2
  # comandos.conf
3
- # caminho completo execução Dir.pwd
4
3
  # documentar caminho completo
5
- # modulos do ruby para instalar basta abrir o prompt de comando e digitar "gem install [nome]" ex: "gem install win32ole"
4
+ # modulos do ruby para instalar basta abrir o prompt de comando e digitar "gem install [nome]" ex: "gem install win32ole"
6
5
  require "cgi"
7
6
  require 'open-uri'
8
7
  require 'json'
@@ -10,162 +9,78 @@ require 'win32ole'
10
9
  require 'rbconfig'
11
10
  require 'fileutils'
12
11
 
12
+
13
13
  # carrega os arquivos .rb tentei com require mas não funcionou
14
14
  load 'eva-pergunta.rb'
15
15
  load 'eva-resposta.rb'
16
- load 'versao.rb'
17
- load 'os.rb'
18
-
19
- # teste mas ainda não sei como vou fazer isso.
20
- module HelloWorld
21
- def self.say
22
- "Hello World!"
23
- end
24
- end
16
+ load 'eva-modulo.rb'
25
17
 
26
- # tentei abrir o programa pelo system() mas não funcionou direito o WIN32OLE é uma biblioteca "dll" do windows
27
18
  shell = WIN32OLE.new('Shell.Application')
28
- # inicializa configuração
29
19
  frase = ""
30
20
  feedback = true
31
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
+
32
54
 
33
- # loop para ficar gravando o comando de voz repetidamente so sai do loop e finaliza o sistema se o comando "sair" for executado
34
55
  while frase !="sair" do
35
- # se houver algum erro ele imprimi e continua o processamento
56
+
57
+
36
58
  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
44
- p frase = pergunta(feedback,beep)
59
+ p frase = pergunta(feedback,beep)
45
60
  rescue =>e
46
- # se houver erro simplesmente imprime
47
61
  puts e.message
48
62
  end
49
63
 
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.
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
57
- resposta('pois não')
58
- end
59
-
60
- if frase == 'versão'
61
- # recebe a verificação da versão do sistema
62
- resposta(versao())
63
- end
64
-
65
- # desativa o feedback com o conteúdo "favor repetir o comando"
66
- if frase == 'desativar'
67
- resposta('sistema de resposta desativado')
68
- feedback = false
69
- end
70
-
71
- # ativa o feedback com o conteúdo "favor repetir o comando"
72
- if frase == 'ativar'
73
- resposta('sistema de resposta ativado')
74
- feedback = true
75
- end
76
-
77
- # desativa o feedback com o conteúdo "favor repetir o comando"
78
- if frase == 'desativar som'
79
- resposta('sistema de beep desativado')
80
- beep = false
81
- end
82
-
83
- if frase == 'ativar som'
84
- resposta('sistema de beep ativado')
85
- beep = true
86
- end
87
-
88
- if frase == 'abrir chrome'
89
- resposta('abrindo krome')
90
- shell.ShellExecute("chrome.exe", "", "", "open", 1)
91
- end
92
-
93
- if frase == 'que horas são'
94
- resposta("são #{Time.now.hour.to_s} horas e #{Time.now.min.to_s} minutos")
95
- end
96
-
97
- if frase == 'que dia é hoje'
98
- semana = ["","Segunda-feira","terça-feira","quarta-feira","quinta-feira","sexta-feira","sabado","domingo"]
99
- mes = ["","janeiro","fevereiro","março","abril","maio","junho","julho","agosto","setembro","outubro","novembro","dezembro"]
100
- resposta("hoje é #{semana[Time.now.wday]} dia #{Time.now.day.to_s} de #{mes[Time.now.month]} de #{Time.now.year.to_s}")
101
- end
102
-
103
- if frase == 'abrir excel'
104
- resposta('abrindo ekcel')
105
- shell.ShellExecute("excel.exe", "", "", "open", 1)
106
- end
107
-
108
- if frase == 'finalizar excel'
109
- resposta('finalizando ekcel')
110
- system("taskkill /IM excel.exe")
111
- end
112
-
113
- if frase == 'abrir word'
114
- p "inicio execução #{Time.now}"
115
- shell.ShellExecute("winword.exe", "", "", "open", 1)
116
- resposta('abrindo word')
117
- p "final execução #{Time.now}"
118
-
119
- end
120
-
121
- if frase == 'finalizar word'
122
- system("taskkill /IM winword.exe")
123
- resposta('finalizando word')
124
-
125
- end
126
64
 
127
- if frase == 'abrir illustrator'
128
- resposta('abrindo ilustreitor')
129
- shell.ShellExecute("illustrator.exe", "", "", "open", 1)
130
- end
131
65
 
132
- if frase == 'finalizar illustrator'
133
- resposta('finalizando ilustreitor')
134
- system("taskkill /IM illustrator.exe")
135
- end
136
-
137
- if frase == 'abrir prompt'
138
- resposta('abrindo prompt de comando')
139
- shell.ShellExecute("cmd.exe", "", "", "open", 1)
140
- end
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
141
72
 
142
- if frase == 'finalizar prompt'
143
- resposta('finalizando prompt')
144
- system("taskkill /IM cmd.exe")
145
- end
73
+ if listaexecutar[listacomandos.index(frase)].include? '&'
74
+ p fechar = listaexecutar[listacomandos.index(frase)].gsub('&',"").gsub("\n",'')
75
+ system("taskkill /IM #{fechar}")
76
+ end
146
77
 
147
- if frase == 'sair'
148
- resposta('finalizando sistema de voz')
149
- resposta('tênha um bom dia')
150
-
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
151
85
  end
152
-
153
- if frase == 'sistema operacional'
154
- resposta("seu sistema operacional é #{os()}")
155
- end
156
-
157
- if frase == 'listar'
158
- resposta("exibindo lista de músicas")
159
- listamusicas = Array.new
160
- listamusicas = Dir.entries('D:/Musicas')
161
- listamusicas.each_with_index{ |musica,indice| p "#{indice} #{musica}"}
162
- end
163
-
164
- if frase == 'tocar'
165
- resposta("exibindo lista de musicas")
166
- listamusicas = Array.new
167
- listamusicas = Dir.entries('D:/Musicas')
168
- listamusicas.each_with_index{ |musica,indice| p "#{indice} #{musica}"}
169
- end
170
-
171
86
  end
@@ -0,0 +1,78 @@
1
+ # encoding: utf-8
2
+ require 'open-uri'
3
+ require 'nokogiri'
4
+ require 'rubygems'
5
+ require 'rbconfig'
6
+
7
+ load 'eva-resposta.rb'
8
+ def os
9
+ @os ||= (
10
+ host_os = RbConfig::CONFIG['host_os']
11
+ case host_os
12
+ when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
13
+ resposta('seu sistema operacional é windous')
14
+ when /darwin|mac os/
15
+ resposta('seu sistema operacional é macosx')
16
+ when /linux/
17
+ resposta('seu sistema operacional é linux')
18
+ when /solaris|bsd/
19
+ resposta('seu sistema operacional é unix')
20
+ else
21
+ raise Error::WebDriverError, "unknown os: #{host_os.inspect}"
22
+ end
23
+ )
24
+ end
25
+
26
+ def versao()
27
+ pagina = Nokogiri::HTML(open("http://rubygems.org/gems/eva-ia-robot"))
28
+ vremota = pagina.xpath("/html/body/div/div[3]/div[1]/div[1]").text
29
+ vremota = vremota.gsub(/[^0-9.]/,'')
30
+ puts vremota
31
+
32
+
33
+ name = /^/i
34
+ dep = Gem::Dependency.new(name, Gem::Requirement.default)
35
+ specs = Gem.source_index.search(dep)
36
+ vlocal = ""
37
+ # specs.map{ |s| puts "#{s.version}" if s.name=="eva-ia-robot"}
38
+ specs.map{ |s| vlocal = s.version if s.name=="eva-ia-robot"}
39
+ vlocal = vlocal.to_s
40
+ puts vlocal
41
+ # vremota= teste
42
+ if vlocal==vremota
43
+ resposta("Sua versão é a mais atual")
44
+ else
45
+ resposta("Existe uma atualização disponível")
46
+ end
47
+
48
+ end
49
+
50
+
51
+ def data()
52
+ semana = ["","Segunda-feira","terça-feira","quarta-feira","quinta-feira","sexta-feira","sabado","domingo"]
53
+ mes = ["","janeiro","fevereiro","março","abril","maio","junho","julho","agosto","setembro","outubro","novembro","dezembro"]
54
+ resposta("hoje é #{semana[Time.now.wday]} dia #{Time.now.day.to_s} de #{mes[Time.now.month]} de #{Time.now.year.to_s}")
55
+ end
56
+
57
+ def hora()
58
+ resposta("são #{Time.now.hour.to_s} horas e #{Time.now.min.to_s} minutos")
59
+ end
60
+
61
+ def modulos(modulo)
62
+ case modulo
63
+ when 'hora'
64
+ hora()
65
+ when 'versao'
66
+ versao()
67
+ when 'data'
68
+ data()
69
+ when 'sistema'
70
+ os()
71
+ else
72
+ puts 'erro 1'
73
+ end
74
+ end
75
+
76
+ # modulos('hora')
77
+ # data()
78
+ # os()
@@ -2,8 +2,10 @@
2
2
  # Esse código transforma audio em texto via api do google speech
3
3
 
4
4
  # Win32/sound modulo para tocar um beep via script
5
+ require 'json'
5
6
  require 'win32/sound'
6
7
  include Win32
8
+ load 'eva-resposta.rb'
7
9
 
8
10
  def pergunta(feedback,beep)
9
11
  # imprimi na tela um feedback visual de quando dar o comando verbal
@@ -14,13 +16,13 @@ def pergunta(feedback,beep)
14
16
  Sound.beep(1500, 200)
15
17
  end
16
18
 
17
- p "inicio gravação #{Time.now}"
19
+ # puts "inicio gravação #{Time.now}"
18
20
  # 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
21
  # 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
20
- system('rec.exe -r 16000 test.flac silence -l 1 0.1 1% 1 1.5 1%')
22
+ system('rec.exe -q -r 16000 test.flac silence -l 1 0.1 1% 1 1.5 1%')
21
23
  # feedback para o envio do arquivo para o google
22
24
  p 'Enviando arquivo ...'
23
- p "inicio envio #{Time.now}"
25
+ # p "inicio envio #{Time.now}"
24
26
  # envia o arquivo test.flac para o servidor e este retorna um json
25
27
  # {\"status\":0,\"id\":\"\",\"hypotheses\":[{\"utterance\":\"abrir word\",\"confidence\":0.82485712}]}\n"
26
28
  # status =>0 - significa sucesso
@@ -32,11 +34,11 @@ def pergunta(feedback,beep)
32
34
  # 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
33
35
  begin
34
36
  # força a codificação com acento
35
- p request
37
+
36
38
  request.force_encoding('utf-8')
37
39
  # converte a resposta da requisição para json
38
40
  resposta = JSON.parse(request)
39
- p "chegada resposta #{Time.now}"
41
+ # puts "chegada resposta #{Time.now}"
40
42
  rescue =>e
41
43
  # se houver erro ele simplesmente exibe a mensagem de erro e continua o seu processamento normal
42
44
  puts e.message
@@ -59,3 +61,4 @@ def pergunta(feedback,beep)
59
61
  end
60
62
  end
61
63
 
64
+ # pergunta(true,true)
@@ -1,4 +1,6 @@
1
1
  # Esse código transforma texto em audio via api do google Translate
2
+ require "cgi"
3
+ require 'open-uri'
2
4
  def resposta(texto)
3
5
  #converte o texto para a requisição via url
4
6
  texto = CGI::escape(texto)
@@ -12,5 +14,6 @@ def resposta(texto)
12
14
  end
13
15
  # system executa um comando no prompt
14
16
  # play.exe executa audio via linha de comando para não precisar de um player externo.
15
- system('play.exe arquivo.mp3')
16
- end
17
+ system('play.exe -q arquivo.mp3')
18
+ end
19
+ # resposta('abrindo chrome')
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.3
4
+ version: 0.1.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-02-17 00:00:00.000000000 -03:00
12
+ date: 2014-02-19 00:00:00.000000000 -03:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
  description: Gem integrada com Google Speech e Google Translate
@@ -20,11 +20,9 @@ extra_rdoc_files: []
20
20
  files:
21
21
  - test/eva_ia_robot_test.rb
22
22
  - eva_ia_robot/eva-ia-robot.rb
23
+ - eva_ia_robot/eva-modulo.rb
23
24
  - eva_ia_robot/eva-pergunta.rb
24
25
  - eva_ia_robot/eva-resposta.rb
25
- - eva_ia_robot/os.rb
26
- - eva_ia_robot/vagrantlistbox.rb
27
- - eva_ia_robot/versao.rb
28
26
  - eva_ia_robot/libgomp-1.dll
29
27
  - eva_ia_robot/libltdl-7.dll
30
28
  - eva_ia_robot/libmad.dll
@@ -1,23 +0,0 @@
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()
@@ -1,32 +0,0 @@
1
- require 'open-uri'
2
- require 'nokogiri'
3
-
4
- pagina = Nokogiri::HTML(open("http://www.vagrantbox.es/"))
5
-
6
-
7
-
8
- nome,link,tamanho,lista = Array.new
9
- nome = pagina.xpath("//table/tbody/tr/th").map {|texto| texto.text}
10
- link = pagina.xpath("//table/tbody/tr/td[2]").map {|texto| texto.text}
11
- tamanho = pagina.xpath("//table/tbody/tr/td[3]").map {|texto| texto.text}
12
- indice = Array.new(tamanho.count) {|i| i+1}
13
- lista = indice,nome,link,tamanho
14
- # lista = puts pagina.xpath("//div/a").text.split('-')
15
- # puts pagina.xpath("//div/a").map {|texto| texto['onclick'].split("'")[1]}
16
- # puts pagina.xpath("//div/a").map {|texto| texto['onclick'].split("'")[3]}
17
-
18
- p "inicio"
19
- p link[58]
20
- system("dir")
21
- p system("vagrant box add Freebsd2 #{link[58]}")
22
-
23
- # pkg_add -r samba36
24
- # NET SHARE vagrant=D:\vagrant "/grant:TODOS,FULL"
25
- # NET SHARE $nomecomp=$caminho "/grant:$User,FULL|READ|WRITE"
26
-
27
-
28
- # mount_smbfs -I 192.168.2.145 //Utsch@UTSCH-PC/Vagrant /usr/home/vagrant
29
- # sudo mount_smbfs -I 192.168.2.145 //Utsch@UTSCH-PC/Vagrant /usr/home/vagrant
30
-
31
-
32
- # VM Config = "/vagrant D:/Vagrant"
@@ -1,31 +0,0 @@
1
- # encoding: utf-8
2
- require 'open-uri'
3
- require 'nokogiri'
4
- require 'rubygems'
5
-
6
-
7
- def versao(teste)
8
- pagina = Nokogiri::HTML(open("http://rubygems.org/gems/eva-ia-robot"))
9
- vremota = pagina.xpath("/html/body/div/div[3]/div[1]/div[1]").text
10
- vremota = vremota.gsub(/[^0-9.]/,'')
11
- p vremota
12
-
13
-
14
- name = /^/i
15
- dep = Gem::Dependency.new(name, Gem::Requirement.default)
16
- specs = Gem.source_index.search(dep)
17
- vlocal = ""
18
- # specs.map{ |s| puts "#{s.version}" if s.name=="eva-ia-robot"}
19
- specs.map{ |s| vlocal = s.version if s.name=="eva-ia-robot"}
20
- vlocal = vlocal.to_s
21
- p vlocal
22
- vremota= teste
23
- if vlocal==vremota
24
- return "Sua versão é a mais atual"
25
- else
26
- return "Existe uma atualização disponível"
27
- end
28
-
29
- end
30
-
31
- # p v = versao("0.2.1")