Stralo
Stralo

Reputation: 474

Decoding Google Speech API response in python

I'm trying to use the Google Speech API in Python. I load a .flac file like this:

url = "https://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=en-US"
audio = open('temp_voice.flac','rb').read()
headers = {'Content-Type': 'audio/x-flac; rate=44100', 'User-Agent':'Mozilla/5.0'}
req = urllib2.Request(url, data=audio, headers=headers)
resp = urllib2.urlopen(req)
system("rm temp_voice.wav; rm temp_voice.flac")
print resp.read()

Output:

{"status":0,"id":"","hypotheses":[{"utterance":"Today is Wednesday","confidence":0.75135982}]}

Can someone please teach me how I can extract and save the text "Today is Wednesday" as a variable and print it?

Upvotes: 0

Views: 1609

Answers (3)

karolina stamblewska
karolina stamblewska

Reputation: 47

The problem with retrieve output is bit more complicate that looks. At first resp is type of instance, however if you copy the output manually is dictionary->list->dictionary. If you assign the resp.read() to new variable you will get type string with length 0. It happens, because the all output vanish into air once is used (print). Therefore the json decoding has to be done as soon the respond from google api is granted. As follow:

resp = urllib2.urlopen(req)

text = json.loads(resp.read())["hypotheses"][0]["utterance"]

Works like a charm in my case ;)

Upvotes: 0

Steve Barnes
Steve Barnes

Reputation: 28370

If the response is coming as a string then you can just eval it to a dictionary, (for safety it is preferable to use literal_eval from the ast library instead):

>>> d=eval('{"status":0,"id":"","hypotheses":[{"utterance":"Today is Wednesday","confidence":0.75135982}]}')
>>> d
{'status': 0, 'hypotheses': [{'confidence': 0.75135982, 'utterance': 'Today is Wednesday'}], 'id': ''}  

>>> h=d.get('hypotheses')                                                                            
>>> h                                                                                                 
[{'confidence': 0.75135982, 'utterance': 'Today is Wednesday'}]                                       
>>> for i in h:                                                                                       
...    print i.get('utterance')
... 
Today is Wednesday

Of course if it is already a dictionary then you do not need to do the evaluate, try using print type(response) where response is the result you are getting.

Upvotes: 0

thefourtheye
thefourtheye

Reputation: 239453

You can use json.loads to convert the JSON data to a dict, like this

data = '{"status":0,"id":"","hypotheses":[{"utterance":"Today is Wednesday","confidence":0.75135982}]}'
import json
data = json.loads(data)
print data["hypotheses"][0]["utterance"]

Upvotes: 4

Related Questions