Python - Entrada conversacional en Pyaudio (cómo hacer entradas de tiempo desigual)

 
Vista:
sin imagen de perfil
Val: 2
Ha disminuido su posición en 18 puestos en Python (en relación al último mes)
Gráfica de Python

Entrada conversacional en Pyaudio (cómo hacer entradas de tiempo desigual)

Publicado por Vicente (1 intervención) el 03/09/2020 21:12:47
Estoy realizando un programa conversacional, que ya tengo bastante avanzado, de modo que actualmente acepta una entrada por teclado, en lenguaje natural, y el "robot" contesta tanto en pantalla como por los altavoces, es decir, "lee" la entrada del usuario y le contesta "hablando".

El siguiente paso es ir a un sistema por el que el usuario pueda dar su entrada de viva voz, no por teclado, y el "robot" le conteste; para ello, debo hacer que por micrófono se acepte una entrada, y se convierta a texto. Esto lo tengo ya resuelto mediante esta pequeña rutina:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import pyaudio
import wave
import speech_recognition as sr
 
FORMAT=pyaudio.paInt16
CHANNELS=2
RATE=44100
CHUNK=1024
duracion=5
archivo="grabacion.wav"
audio=pyaudio.PyAudio()
stream=audio.open(format=FORMAT,channels=CHANNELS,rate=RATE,
                  input=True,frames_per_buffer=CHUNK)
print("grabando...")
frames=[]
for i in range(0,int(RATE/CHUNK*duracion)):
    data=stream.read(CHUNK)
    frames.append(data)
print("grabación terminada")
stream.stop_stream()
stream.close()
audio.terminate()
waveFile=wave.open(archivo,"wb")
waveFile.setnchannels(CHANNELS)
waveFile.setsampwidth(audio.get_sample_size(FORMAT))
waveFile.setframerate(RATE)
waveFile.writeframes(b''.join(frames))
waveFile.close()
 
re = sr.Recognizer()
 
with sr.Microphone() as source:
    audio="grabacion.wav"
 
with sr.AudioFile(audio) as source:
    info_audio=re.record(source)
    texto=re.recognize_google(info_audio,language='es')
    print(texto)
print("fin")

Funciona perfectamente, pero se basa en grabar X segundos y transcribirlos (en este caso 5 segundos, aunque puedo poner los que quiera). Transcurrido este tiempo, el sistema hace la transcripción a texto, y como digo, funciona. Ahora bien, ¿no sería posible hacer que la entrada no tuviera un tiempo marcado, sino que esperase hasta que hubiera un silencio, y entonces se generara el fichero wav que se transcribe?

Agradecería cualquier ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder