diff --git a/requirements.txt b/requirements.txt index 36a32b6..4fbf81e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -16,3 +16,7 @@ soundfile streamlit spacy_streamlit flask +numpy +sounddevice +python_speech_features +soundfile diff --git a/src/Servidor/reconhecimentoAudio.py b/src/Servidor/reconhecimentoAudio.py index 09136b6..7ac4eee 100644 --- a/src/Servidor/reconhecimentoAudio.py +++ b/src/Servidor/reconhecimentoAudio.py @@ -1,15 +1,54 @@ import speech_recognition as sr +import numpy as np +import sounddevice as sd +import soundfile as sf -#TODO: limpeza de audio +def trataAudio(audio, taxa_amostragem, duracao): + + passa_alta = False + amplitude = 0.3 + + duracao_amostragem = int(duracao * taxa_amostragem) + + sinal_entrada = audio + + freq_corte = np.geomspace(20000, 20, sinal_entrada.shape[0]) + passaAlta_saida = np.zeros_like(sinal_entrada) + dn_1 = 0 + + for n in range(sinal_entrada.shape[0]): + freq_quebra = freq_corte[n] + + tan = np.tan(np.pi * freq_quebra / taxa_amostragem) + a1 = (tan - 1) / (tan + 1) + + passaAlta_saida[n] = a1 * sinal_entrada[n] + dn_1 + dn_1 = sinal_entrada[n] - a1 * passaAlta_saida[n] + + if passa_alta: + passaAlta_saida *= -1 + + audio_tratado = sinal_entrada + passaAlta_saida + audio_tratado *= 0.5 + audio_tratado *= amplitude + + return audio_tratado def reconhecerAudio(audio, sample_rate=44100, sample_width=2): rec = sr.Recognizer() - audiodata = sr.AudioData(audio, sample_rate, sample_width) - - texto = rec.recognize_google(audiodata, language="pt-BR") + sd.play(audio, sample_rate) + sd.wait() + + try: + rec.adjust_for_ambient_noise(audio) + audiodata = sr.AudioData(audio, sample_rate, sample_width) + texto = rec.recognize_google(audiodata, language="pt-BR", show_all=False) + except: + return None + return texto @@ -17,20 +56,21 @@ def reconhecerAudio(audio, sample_rate=44100, sample_width=2): from sys import path from os.path import join, dirname, realpath - #adiciona o caminho da função de gravar áudio, feito somente para - #reutilizar código na situação de debugging, - #não é uma prática boa fora desse contexto! + # adiciona o caminho da função de gravar áudio, feito somente para + # reutilizar código na situação de debugging, + # não é uma prática boa fora desse contexto! path.append(join(dirname(realpath(__file__)), "../Cliente")) from gravarAudio import gravarAudioArquivo import os gravarAudioArquivo("exemplo.wav") - arq = open("exemplo.wav", "rb") - audio = arq.read() + data = sf.SoundFile('exemplo.wav') + duracao = data.frames / data.samplerate + data, taxa_amostragem = sf.read('exemplo.wav') - texto = reconhecerAudio(audio) + audio_tratado = trataAudio(np.array(data), taxa_amostragem, duracao) + texto = reconhecerAudio(audio_tratado) print(texto) - arq.close() - os.remove("exemplo.wav") \ No newline at end of file + os.remove("exemplo.wav")