Jarvis virtual. Typle - controle de voz do computador

A maioria dos usuários sabe que o Siri é considerado o assistente pessoal e a tecnologia de perguntas e respostas mais solicitadas em dispositivos iOS. Felizmente, o Siri não é o único sistema disponível no mercado. Assim, aos fãs de ficção científica e quadrinhos criados pela Marvel é oferecido um assistente pessoal JARVIS do filme "Homem de Ferro".

Se o dono do aparelho viu o filme "Homem de Ferro", provavelmente conhece o mordomo de Tony Stark, cujo nome é Jarvis. Consequentemente, o usuário poderá recorrer à ajuda de um servidor virtual por conta própria aparelho portátil... Além disso, o programa JARVIS é um desenvolvimento exclusivo que usa a voz e a imagem do personagem Jarvis.

O utilitário JARVIS começa com as instruções básicas de áudio para usar e gerenciar a ferramenta especificada. Ao final da configuração, o usuário deverá especificar seu gênero (para que o assistente virtual possa contatar corretamente o dono do aparelho). Além disso, aqui você terá que definir a unidade de medida para as principais condições de temperatura (em particular, graus Kelvin, Fahrenheit ou, é claro, Celsius).


Uma lista detalhada de instruções pode ser encontrada tocando no ícone localizado no canto superior da tela. Neste caso, todas as equipes devem necessariamente começar com o endereço "Jarvis" e geralmente conter uma palavra (por exemplo, "Jarvis, previsão do tempo"). JARVIS também pode notificar o proprietário do dispositivo sobre reuniões futuras e exibir a hora atual. Você também pode criar uma variedade de lembretes de áudio no programa.

É importante observar que para proprietários de discos ópticos com o blockbuster do filme Homem de Ferro, o utilitário JARVIS fornece características adicionais... Por exemplo, o usuário pode controlar facilmente a reprodução do filme correspondente usando este mordomo virtual.


Informação útil: Se você fizer uma pergunta ao seu assistente virtual: devo comprar um BMW 740 (http://www.bmw-avtoport.ru/auto/7/), então sua resposta com cem por cento de probabilidade será afirmativa! A propósito, você pode comprar um BMW da sétima série agora nas condições mais favoráveis ​​para você! Para isso, basta visitar o site www.bmw-avtoport.ru.

Hoje vamos nos concentrar em nosso discurso. Gostaria controlar o computador por voz sem a ajuda dos seus dedos? E, como se costuma dizer, pelo poder do pensamento! É verdade que não controlaremos o computador com o poder do pensamento, mas o poder da voz é bastante real.

Programa Typle- Este é um dos melhores programas da atualidade para controlar um computador por voz. Nos sites dos comentários a este programa, as opiniões convergem.

É verdade que existem algumas desvantagens. Mas mais sobre isso mais tarde. A propósito, se você estiver interessado, leia minha crítica.

Você pode baixar o programa aqui: http://freesoft.ru/typle

como você usa isso? Primeiro, vamos iniciá-lo e ver os botões de controle principais:

O programa nos saúda e imediatamente nos dá dicas de como usar o Typle. Primeiro, pressione o botão "adicionar" e escreva uma palavra, por exemplo, "abrir". Para fazer isso, diga esta palavra no microfone:

Em seguida, clique em Adicionar. Assim, salvamos a palavra "Abrir" no programa com nossa voz. Você pode falar qualquer outra palavra no microfone. O principal é não se confundir.

A próxima etapa é adicionar comandos. Para fazer isso, vá para este item:

Em seguida, marcamos a caixa ao lado do item de que precisamos:

Selecione um programa, aplicativo ou ação e clique no botão vermelho de gravação. Se o computador captar nossa voz, clique em "Adicionar":

E agora um estará visível em nosso perfil comando de voz... V este caso aquele que abre o 7-Zip:

E agora, pressionando o botão final "comece a falar"

dizemos a frase "abra o Seven Zip". No meu caso, tudo funcionará. E o programa 7-zip será aberto. Lembre-se desta frase: Abrir este sim? Isso é quase o mesmo.

O programa nem sempre funciona bem. Agora, a poderosa língua russa não foi totalmente estudada por programadores linguísticos ... Mas ainda é bom quando um computador ouve você.

Portanto, para testes e curiosidade banal, o programa Typle é 100% adequado.

Neste vídeo você pode ver a história da criação dos primeiros motores de voz e no que mais precisamos trabalhar:

Existem nomes terríveis para outros análogos do programa, como Gorynych, Perpetuum, Diktograf, Voice Commander. Mas todos eles são "não isso". Não critique um programa digno.

Levei 5 minutos para dominar este programa. Isso é muito tempo (basicamente, eu entendo esses programas em 1-2 minutos). Se você tiver alguma dúvida, escreva. Vejo vocês em breve, amigos :)!


Há muito tempo que não deixo de pensar no meu “Jarvis” e no controlo dos equipamentos em casa com uma voz. E, finalmente, as mãos chegaram ao ponto de criar este milagre. Não demorou muito para pensar nos "cérebros", o Raspberry Pi se encaixa perfeitamente.

Então, ferro:

  • Framboesa pi 3 modelo b
  • Logitech USB Camera

Implementação

Nosso assistente trabalhará de acordo com o princípio Alexa / Hub:
  1. Ative offline para uma palavra específica
  2. Reconheça uma equipe na nuvem
  3. Execute o comando
  4. Relatório sobre o trabalho realizado ou informar pedido de informação
Porque minha câmera vem com suporte fora da caixa, não precisei me preocupar com os drivers, então vamos direto para a parte do software.

Ativação offline

A ativação ocorrerá usando CMU Sphinx, e tudo ficaria bem, mas fora da caixa, o reconhecimento é muito lento, mais de 10 segundos, o que é absolutamente inadequado, para resolver o problema que você precisa para limpar o dicionário de palavras desnecessárias.

Instalamos tudo que você precisa:

Pip3 install SpeechRecognition pip3 install pocketsphinx
Avançar

Sudo nano /usr/local/lib/python3.4/dist-packages/speech_recognition/pocketsphinx-data/en-US /pronounciation-dictionary.dict
exclua tudo, exceto o Jarvis de que precisamos:

Jarvis JH AA R V AH S
Pocketsphinx agora reconhece muito rapidamente.

Reconhecimento de fala

No início surgiu a ideia de utilizar o serviço do Google, além disso, seu suporte é em SpeechRecognition. Mas como se viu, o Google recebe dinheiro por isso e não trabalha com o físico. por pessoas.

Felizmente, o Yandex também oferece essa oportunidade, gratuita e extremamente simples.

Nos registramos, obtemos a chave API. Todo o trabalho pode ser feito por curl.

Curl -X POST -H "Tipo de conteúdo: audio / x-wav" --data-binary "@file" "https://asr.yandex.net/asr_xml?uuid=ya_uid&key=yf_api_key&topic=queries"

Síntese de fala

Aqui Yandex nos ajudará novamente. Enviamos o texto em resposta e recebemos um arquivo com o texto sintetizado

Curl "https://tts.voicetech.yandex.net/generate?format=wav&lang=ru-RU&speaker=zahar&emotion=good&key=ya_api_key" -G --data-urlencode "text = text"> arquivo

Jarvis

Juntando tudo e obtemos esse script.

#! / usr / bin / env python # - * - coding: utf-8 - * - import os import speech_recognition as sr de xml.dom import minidom import sys import random r = sr.Recognizer () ya_uuid = "" ya_api_key = "" # os.system ("echo" Assist + ent app + denied "| festival --tts --language russian") def convert_ya_asr_to_key (): xmldoc = minidom.parse ("./ asr_answer.xml") itemlist = xmldoc.getElementsByTagName ("variante") if len (itemlist)> 0: return itemlist.firstChild.nodeValue else: return False def jarvis_on (): com sr.WavFile ("send.wav") como fonte: audio = r.record (fonte) try: t = r.recognize_sphinx (audio) print (t) exceto LookupError: print ("Não foi possível entender o áudio") return t == ("jarvis") def jarvis_say (frase): os.system ("curl" https: //tts.voicetech.yandex.net/generate?format=wav&lang=ru-RU&speaker=zahar&emotion=good&key="+ya_api_key+ "" -G --data-urlencode "text =" + frase + ""> jarvis_speech.wav " ) os.system ("aplay jarvis_speech.wav") def jarvis_say_good (): frase = ["Concluído", "Concluído", "Ok "," Sim "," Mais alguma coisa? ",] Randitem = random.choice (frases) jarvis_say (randitem) try: while True: os.system (" arecord -B --buffer-time = 1000000 -f dat -r 16000 -d 3 -D plughw: 1.0 send.wav ") if jarvis_on (): os.system (" aplay jarvis_on.wav ") os.system (" arecord -B --buffer-time = 1000000 - f dat -r 16000 -d 3 -D plughw: 1,0 send.wav ") os.system (" curl -X POST -H "Tipo de conteúdo: audio / x-wav" --data-binary "@send .wav" " https://asr.yandex.net/asr_xml?uuid="+ya_uuid+"&key="+ya_api_key+"&topic=queries "> asr_answer.xml") command_key = convert_ya_asr_to_key () if (command_key): if (command_key em [' key_word ", 'key_word1', 'key_word2"]): os.system (' ') jarvis_say_good () continue exceto Exceção: jarvis_say ("Algo deu errado")
O que está acontecendo aqui. Começamos um loop infinito, escrevemos um registro por três segundos e enviamos a esfinge para reconhecimento se a palavra "jarvis" for encontrada no arquivo

Se jarvis_on ():
reproduzir um arquivo de notificação de ativação pré-gravado.

Novamente, anotamos 3 segundos e enviamos para Yandex, em resposta recebemos nosso comando. Em seguida, executamos ações com base no comando.

Isso é tudo. Você pode pensar em uma grande variedade de cenários de execução.

Caso de uso

Agora, alguns exemplos do meu uso real

Philips Hue

Instalar

Pip install phue
No aplicativo Hue, defina um IP estático:

Lançar:

#! / usr / bin / python import sys from phue import Bridge b = Bridge ("192.168.0.100") # Digite o IP da ponte aqui. #Se estiver executando pela primeira vez, pressione o botão na ponte e execute com b.connect () não comentado # b.connect () print (b.get_scene ())
Escrevemos o ID dos esquemas necessários, como "470d4c3c8-on-0"

A versão final do script:

#! / usr / bin / python import sys from phue import Bridge b = Bridge ("192.168.0.100") # Digite o IP da ponte aqui. #Se estiver executando pela primeira vez, pressione o botão na ponte e execute com b.connect () não comentado # b.connect () if (sys.argv == "off"): b.set_light (, "on", False) else: b.activate_scene (1, sys.argv)
Adicionar ao jarvis:

If (command_key in ["acender a luz", "acender a luz", "acender"]): os.system ("python3 /home/pi/smarthome/hue/hue.py a1167aa91-on-0") jarvis_say_good () continue if (command_key in ["dim lights", "dim lights"]): os.system ("python3 /home/pi/smarthome/hue/hue.py ac637e2f0-on-0") jarvis_say_good () continue if (command_key in ["apague as luzes", "apague as luzes"]): os.system ("python3 /home/pi/smarthome/hue/hue.py" off "") jarvis_say_good () continue

Tv lg

Pegamos o roteiro a partir daqui. Após o primeiro lançamento e a inserção do código de emparelhamento, o código em si não muda, portanto, você pode cortar essa parte do script e deixar apenas o de controle.

Adicionar ao jarvis:

# 1 - POWER # 24 - VOLUNE_UP # 25 - VOLUME_DOWN # 400 - 3D_VIDEO if (command_key in ["desligar a TV", "desligar a TV"]): os.system ("python3 / home / pi / smarthome / TV / tv2. Py 1 ") jarvis_say_good () continue if (command_key in ['aumentar o volume", "mais alto"]): os.system ("python3 /home/pi/smarthome/TV/tv2.py 24" ) jarvis_say_good () continue

Rádio

sudo apt-get install mpg123
Adicionar ao jarvis:

If (command_key in ["news", "turn off news", "o que está acontecendo"]): os.system (‘mpg123 URL") continue
Você também pode colocar um homebridge e controlar tudo através do Siri, caso não grite com Jarvis.

Quanto à qualidade do reconhecimento de voz, não Alexa, claro, mas a uma distância de até 5 metros, o percentual de acertos corretos é decente. O principal problema é que a fala da TV / alto-falantes é gravada junto com os comandos e interfere no reconhecimento.

É só isso, obrigado.

Tag:

  • Raspberry Pi
  • Pitão
Adicionar tags