Search code examples
pythonpython-3.xazurespeech-recognitionspeech-to-text

Storing continuous speech recognition from microphone on MS Azure to a separate variable


I have the following Python code that can continuously recognize your voice. It works fine, I just need to store the final result (after certainly long speech is finished) to one variable...

import azure.cognitiveservices.speech as speechsdk
import os
import time


path = os.getcwd()
# Creates an instance of a speech config with specified subscription key and service region.
# Replace with your own subscription key and region identifier from here: 
https://aka.ms/speech/sdkregion
speech_key, service_region = "6.....9", "eastus"
speech_config = speechsdk.SpeechConfig(subscription=speech_key, region=service_region)

# Creates a recognizer with the given settings
speech_config.speech_recognition_language="en-US"
#source_language_config = speechsdk.languageconfig.SourceLanguageConfig("en-US", "The Endpoint ID for 
your custom model.")
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config)

done = False 
def stop_cb(evt):
print('CLOSING on {}'.format(evt))
speech_recognizer.stop_continuous_recognition()
global done
done= True


#Connect callbacks to the events fired by the speech recognizer    
speech_recognizer.recognizing.connect(lambda evt: print('RECOGNIZING: {}'.format(evt)))
speech_recognizer.recognized.connect(lambda evt: print('RECOGNIZED: {}'.format(evt)))
speech_recognizer.session_started.connect(lambda evt: print('SESSION STARTED: {}'.format(evt)))
speech_recognizer.session_stopped.connect(lambda evt: print('SESSION STOPPED {}'.format(evt)))
speech_recognizer.canceled.connect(lambda evt: print('CANCELED {}'.format(evt)))
# stop continuous recognition on either session stopped or canceled events
speech_recognizer.session_stopped.connect(stop_cb)
speech_recognizer.canceled.connect(stop_cb)

speech_recognizer.start_continuous_recognition()

while not done:
    time.sleep(.5)

Is it possible to make a separate variable and store the final result in it? Can't figure out how...


Solution

  • Try this :

    import azure.cognitiveservices.speech as speechsdk
    import os
    import time
    
    path = os.getcwd()
    
    speech_key, service_region = "", ""
    speech_config = speechsdk.SpeechConfig(subscription=speech_key, region=service_region)
    
    speech_config.speech_recognition_language="en-US"
    
    speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config)
    
    result = ''
    done = False 
    
    def stop_cb(evt):
        print('CLOSING on {}'.format(evt))
        speech_recognizer.stop_continuous_recognition()
        global done
        done= True
    
    
    
    
    def collectResult(evt):
       global result 
       result += evt.result.text
    
    speech_recognizer.recognized.connect(lambda evt: collectResult(evt))
    
    speech_recognizer.session_started.connect(lambda evt: print('SESSION STARTED: {}'.format(evt)))
    speech_recognizer.session_stopped.connect(lambda evt: print('SESSION STOPPED {}'.format(evt)))
    speech_recognizer.canceled.connect(lambda evt: print('CANCELED {}'.format(evt)))
    
    speech_recognizer.session_stopped.connect(stop_cb)
    speech_recognizer.canceled.connect(stop_cb)
    
    speech_recognizer.start_continuous_recognition()
    
    while not done:
        print(result)
        time.sleep(.5)