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.
@@ -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