Lab04
Sintetização de voz¶
A sintetização de voz é o processo para converter texto em voz. Podemos utilizar diversas ferramentas para realizar esse processo via API, em python podemos utilizar:
- eSpeak
- pyTTSx
- gTTS
pyttsx3¶
O pyttsx3 possui suporte para diversos idiomas incluindo português, roda offline, é muito simples e intuitiva de usar.
- link documentação: https://pyttsx3.readthedocs.io/en/latest/index.html
No windowns, o pttsx3 utiliza a engine SAPI5, caso tenha problemas tente instalar esse lib.
Instalação¶
Instalação pelo comando: pip install pyttsx3
!pip install pyttsx3
Hello World¶
#importa a biblioteca
import pyttsx3
#inicializa o objeto
tts = pyttsx3.init()
#define a msg
msg = "Hello World"
tts.say(msg) #adiciona msg na fila de processamento
tts.runAndWait() ##reproduz a msg da fila
# ou simplesmente invocar o método pyttsx3.speak()
pyttsx3.speak("Hello World")
Desafio1¶
Troque a msg para uma frase em português. Ficou boa a reprodução?
### seu código aqui...
Configurando idioma, velocidade, volume¶
Por padrão o idioma é inglês, frases em português vão ficar com 'sotaque' bem estranho, vamos alterar o idioma para português-brasil.
voices = tts.getProperty("voices")
for voice in voices:
print(voice.id,'\n', voice.name,'\n', voice.languages)
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_PT-BR_MARIA_11.0 Microsoft Maria Desktop - Portuguese(Brazil) [] HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_EN-US_ZIRA_11.0 Microsoft Zira Desktop - English (United States) []
O método setProperty configura o pyttsx3
- voices[0].id =>português
- voices[1].id =>inglês
- exemplo: engine.setProperty('voice', voices[1].id)
import pyttsx3
en = pyttsx3.init()
en.setProperty('rate', 100) #configura taxa de velocidade (palavras por minuto)
en.setProperty('volume', 1) # configura volume
en.setProperty('voice', voices[0].id) # configura idioma
msg = "Olá mundo!"
en.say(msg)
en.runAndWait()
Conversor de texto em Voz¶
import pyttsx3
engine = pyttsx3.init()
voices = engine.getProperty("voices")
engine.setProperty('voice', voices[0].id) #brasil
engine.setProperty('volume', 1)
engine.setProperty("rate", 155)
#Processa as modificações feitas até o momento
engine.runAndWait()
#Loop principal
while True:
#Pega a entrada do usuário
frase = input("> digite uma frase (fim! => para fechar).")
if frase != "fim!":
#Coloca frase na fila de processamento da engine
engine.say(frase)
#Executa os comandos da fila (no caso, say(frase) )
engine.runAndWait()
else:
break
> digite uma frase (fim! => para fechar).oi pessoal, tudo bem??w > digite uma frase (fim! => para fechar).aqui está bacana. > digite uma frase (fim! => para fechar).fim!
Reconhecimento de voz¶
O reconhecimento de voz é o processo para converter voz em texto. Podemos utilizar diversas ferramentas para realizar esse processo via API, em python podemos utilizar:
- pocket sphink
- speech recognition
speech recognition¶
- link documentação: https://github.com/Uberi/speech_recognition
Instalação¶
Instalação pelo comando: pip install SpeechRecognition
#!pip install SpeechRecognition
dica de instalação¶
Se você usa o python3.10 talvez tenha dificuldade com o pyaudio. Acesse o link e veja uma possivel solução.
Processando voz¶
import speech_recognition as sr
recon = sr.Recognizer()
with sr.Microphone() as source:
print("fale algo ")
audio = recon.listen(source)
print("processando...")
print(recon.recognize_google(audio,language='pt'))
fale algo
Assistente virtual¶
import pyttsx3, speech_recognition as sr
engine = pyttsx3.init()
voices = engine.getProperty("voices")
engine.setProperty('voice', voices[0].id) #brasil
engine.setProperty('volume', 1)
engine.setProperty("rate", 155)
#Processa as modificações feitas até o momento
engine.runAndWait()
def speak(audio):
engine.say(audio)
engine.runAndWait()
# Ouve o usuario.
def command():
r = sr.Recognizer()
with sr.Microphone() as source:
print("\n Listening...\n")
speak('ouvindo')
r.adjust_for_ambient_noise = 1.25
r.pause_threshold = 1
audio = r.listen(source)
try:
print(" Recognizing...\n")
speak('Espera um pouco pra eu tentar entender.')
query = r.recognize_google(audio, language='pt')
#print(query)
except:
return "©empty_^_^_queryª"
return query
speak("Como posso ajudar hoje?")
if __name__ == "__main__":
while True:
query = command().lower()
if '1' in query or 'um' in query:
print("opção: 1 ")
speak("você escolheu a opção numero 1")
elif '2' in query or 'dois' in query:
print("opção: 2")
speak('você escolheu a opção numero 2')
elif '3' in query or 'três' in query:
print("opção: 3")
speak("você escolheu a opção numero 3")
elif 'fim' in query or 'sair' in query :
print("sair")
speak("valeu chapa, até a próxima!")
break
else:
print("opção invalida")
speak('não entendi o que você disse.')
speak("Por favor, vamos tentar novamente. escolha uma opção válida.")
Listening... Recognizing... sair