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.
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "eva-ia-robot"
3
- s.version = "0.1.2"
3
+ s.version = "0.1.3"
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,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
- def os
27
- @os ||= (
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
- if frase == 'ativar'
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
- shell.ShellExecute("winword.exe", "", "", "open", 1)
117
+ p "final execução #{Time.now}"
118
+
106
119
  end
107
120
 
108
- if frase == 'finalizar word'
121
+ if frase == 'finalizar word'
122
+ system("taskkill /IM winword.exe")
109
123
  resposta('finalizando word')
110
- system("taskkill /IM winword.exe")
124
+
111
125
  end
112
126
 
113
127
  if frase == 'abrir illustrator'
114
- resposta('abrindo ilustreitor')
115
- shell.ShellExecute("illustrator.exe", "", "", "open", 1)
128
+ resposta('abrindo ilustreitor')
129
+ shell.ShellExecute("illustrator.exe", "", "", "open", 1)
116
130
  end
117
131
 
118
132
  if frase == 'finalizar illustrator'
119
- resposta('finalizando ilustreitor')
120
- system("taskkill /IM illustrator.exe")
133
+ resposta('finalizando ilustreitor')
134
+ system("taskkill /IM illustrator.exe")
121
135
  end
122
136
 
123
- if frase == 'abrir prompt'
137
+ if frase == 'abrir prompt'
124
138
  resposta('abrindo prompt de comando')
125
- shell.ShellExecute("cmd.exe", "", "", "open", 1)
139
+ shell.ShellExecute("cmd.exe", "", "", "open", 1)
126
140
  end
127
141
 
128
- if frase == 'finalizar prompt'
142
+ if frase == 'finalizar prompt'
129
143
  resposta('finalizando prompt')
130
- system("taskkill /IM cmd.exe")
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
@@ -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()
@@ -1,4 +1,3 @@
1
- #!/bin/env ruby
2
1
  # encoding: utf-8
3
2
  require 'open-uri'
4
3
  require 'nokogiri'
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.2
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