停止通过watson STT(keyboardinterrupt)中的websocket连接流式传输

时间:2019-10-02 17:33:30

标签: python-2.7 ibm-cloud ibm-watson

对于实时语音到文本的转录,程序使用麦克风,音频源被初始化为队列。 pyaudio流正在将录音不断添加到队列中,并且Web套接字客户端将发送 录制语音到文本服务。我想在用户暂停时停止流式传输,然后将成绩单发送给Watson Assistant。

我正在通过下面的链接关注此代码

https://github.com/watson-developer-cloud/python-sdk/blob/master/examples/microphone-speech-to-text.py

from __future__ import print_function
import pyaudio
from ibm_watson import SpeechToTextV1
from ibm_watson.websocket import RecognizeCallback, AudioSource
from threading import Thread

CHUNK = 1024
BUF_MAX_SIZE = CHUNK * 10
q = Queue(maxsize=int(round(BUF_MAX_SIZE / CHUNK)))


audio_source = AudioSource(q, True, True)




 speech_to_text = SpeechToTextV1(
      iam_apikey=####,
      url=###)


class MyRecognizeCallback(RecognizeCallback):
 def __init__(self):
    RecognizeCallback.__init__(self)

 def on_transcription(self, transcript):
    print(transcript)

 def on_connected(self):
    print('Connection was successful')

 def on_error(self, error):
    print('Error received: {}'.format(error))

 def on_inactivity_timeout(self, error):
    print('Inactivity timeout: {}'.format(error))

 def on_listening(self):
    print('Service is listening')

 def on_hypothesis(self, hypothesis):
    global data1
    print(hypothesis)
    data1 = hypothesis


 def on_data(self, data):
    global finalvalue
    print(data["results"][0]["final"])
    finalvalue = data["results"][0]["final"]
    if (data["results"][0]["final"]) == True:
        stream.stop_stream()
        stream.close()
        audio.terminate()
        audio_source.completed_recording()


 def on_close(self):
    print("Connection closed")



 def recognize_using_weboscket(*args):
    mycallback = MyRecognizeCallback()
    speech_to_text.recognize_using_websocket(audio=audio_source,
                                         content_type='audio/l16; 
                                                          rate=44100',
                                         recognize_callback=mycallback,
                                         interim_results=True)


      FORMAT = pyaudio.paInt16
      CHANNELS = 1
      RATE = 44100


   def pyaudio_callback(in_data, frame_count, time_info, status):
   try:
      q.put(in_data)
   except Full:
      pass # discard
   return (None, pyaudio.paContinue)


  audio = pyaudio.PyAudio()


 stream = audio.open(
    format=FORMAT,
    channels=CHANNELS,
    rate=RATE,
    input=True,
    frames_per_buffer=CHUNK,
    stream_callback=pyaudio_callback,
    start=False

    )



   print("Enter CTRL+C to end recording...")

   stream.start_stream()

  try:
      recognize_thread = Thread(target=recognize_using_weboscket, args=())
      recognize_thread.start()

   while True:
      pass
   except KeyboardInterrupt:

       stream.stop_stream()
       stream.close()
       audio.terminate()
       audio_source.completed_recording()

在def on_data(self,data)部分中,我尝试关闭连接,并关闭了连接,但未将值传递给Watson Assistant。我必须手动按Ctrl + C才能完全退出语音转文本服务。请指教 预先感谢

0 个答案:

没有答案