6.0 KiB
Conversão de fala para texto - Raspberry Pi
Nesta parte da lição, vais escrever código para converter a fala captada no áudio em texto, utilizando o serviço de fala.
Enviar o áudio para o serviço de fala
O áudio pode ser enviado para o serviço de fala utilizando a API REST. Para usar o serviço de fala, primeiro precisas de solicitar um token de acesso e, em seguida, usar esse token para aceder à API REST. Estes tokens de acesso expiram após 10 minutos, por isso o teu código deve solicitá-los regularmente para garantir que estão sempre atualizados.
Tarefa - obter um token de acesso
-
Abre o projeto
smart-timer
no teu Raspberry Pi. -
Remove a função
play_audio
. Esta já não é necessária, pois não queres que o temporizador inteligente repita o que disseste. -
Adiciona a seguinte importação no início do ficheiro
app.py
:import requests
-
Adiciona o seguinte código acima do ciclo
while True
para declarar algumas definições para o serviço de fala:speech_api_key = '<key>' location = '<location>' language = '<language>'
Substitui
<key>
pela chave da API do teu recurso do serviço de fala. Substitui<location>
pela localização que utilizaste ao criar o recurso do serviço de fala.Substitui
<language>
pelo nome do local para o idioma em que vais falar, por exemplo,en-GB
para inglês ouzn-HK
para cantonês. Podes encontrar uma lista dos idiomas suportados e os respetivos nomes de local na documentação de suporte a idiomas e vozes nos Microsoft Docs. -
Abaixo disto, adiciona a seguinte função para obter um token de acesso:
def get_access_token(): headers = { 'Ocp-Apim-Subscription-Key': speech_api_key } token_endpoint = f'https://{location}.api.cognitive.microsoft.com/sts/v1.0/issuetoken' response = requests.post(token_endpoint, headers=headers) return str(response.text)
Esta função chama um endpoint de emissão de tokens, passando a chave da API como um cabeçalho. Esta chamada retorna um token de acesso que pode ser usado para chamar os serviços de fala.
-
A seguir, declara uma função para converter a fala captada no áudio em texto utilizando a API REST:
def convert_speech_to_text(buffer):
-
Dentro desta função, configura o URL da API REST e os cabeçalhos:
url = f'https://{location}.stt.speech.microsoft.com/speech/recognition/conversation/cognitiveservices/v1' headers = { 'Authorization': 'Bearer ' + get_access_token(), 'Content-Type': f'audio/wav; codecs=audio/pcm; samplerate={rate}', 'Accept': 'application/json;text/xml' } params = { 'language': language }
Isto constrói um URL utilizando a localização do recurso dos serviços de fala. Em seguida, preenche os cabeçalhos com o token de acesso da função
get_access_token
, bem como a taxa de amostragem usada para capturar o áudio. Por fim, define alguns parâmetros a serem passados com o URL, contendo o idioma do áudio. -
Abaixo disto, adiciona o seguinte código para chamar a API REST e obter o texto de volta:
response = requests.post(url, headers=headers, params=params, data=buffer) response_json = response.json() if response_json['RecognitionStatus'] == 'Success': return response_json['DisplayText'] else: return ''
Esta chamada utiliza o URL e decodifica o valor JSON que vem na resposta. O valor
RecognitionStatus
na resposta indica se a chamada conseguiu extrair com sucesso a fala em texto e, se forSuccess
, o texto é retornado pela função; caso contrário, é retornada uma string vazia. -
Acima do ciclo
while True:
, define uma função para processar o texto retornado pelo serviço de conversão de fala para texto. Esta função, por agora, apenas imprimirá o texto no terminal.def process_text(text): print(text)
-
Por fim, substitui a chamada para
play_audio
no ciclowhile True
por uma chamada para a funçãoconvert_speech_to_text
, passando o texto para a funçãoprocess_text
:text = convert_speech_to_text(buffer) process_text(text)
-
Executa o código. Pressiona o botão e fala para o microfone. Solta o botão quando terminares, e o áudio será convertido em texto e impresso no terminal.
pi@raspberrypi:~/smart-timer $ python3 app.py Hello world. Welcome to IoT for beginners.
Experimenta diferentes tipos de frases, incluindo frases onde as palavras têm o mesmo som, mas significados diferentes. Por exemplo, se estiveres a falar em inglês, diz "I want to buy two bananas and an apple too" e repara como ele utiliza corretamente "to", "two" e "too" com base no contexto da palavra, e não apenas no som.
💁 Podes encontrar este código na pasta code-speech-to-text/pi.
😀 O teu programa de conversão de fala para texto foi um sucesso!
Aviso Legal:
Este documento foi traduzido utilizando o serviço de tradução por IA Co-op Translator. Embora nos esforcemos pela precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original na sua língua nativa deve ser considerado a fonte autoritária. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas decorrentes do uso desta tradução.