Как получить расшифровку только из Watson Speech API? - PullRequest
2 голосов
/ 26 февраля 2020

Я могу заставить мой код работать, однако в выводе я получаю вложенный словарь и не уверен, как получить доступ только к расшифровке (словам) всего файла wav?

import json
from os.path import join, dirname
from ibm_watson import SpeechToTextV1
from ibm_watson.websocket import RecognizeCallback, AudioSource
import threading
from ibm_cloud_sdk_core.authenticators import IAMAuthenticator

authenticator = IAMAuthenticator('****')
service = SpeechToTextV1(authenticator=authenticator)
service.set_service_url('https://api.us-east.speech-to-text.watson.cloud.ibm.com')

models = service.list_models().get_result()
print(json.dumps(models, indent=2))

model = service.get_model('en-US_BroadbandModel').get_result()
print(json.dumps(model, indent=2))

with open(join(dirname('__file__'), 'nickvoice.wav'),
          'rb') as audio_file:
        print(json.dumps(
        output = service.recognize(
            audio=audio_file,
            content_type='audio/wav',
            #timestamps=True,
            #word_confidence=True,
            model='en-US_NarrowbandModel',
        continuous=True).get_result(),
        indent=2))

Мой вывод:

    {
      "alternatives": [
        {
          "confidence": 0.97,
          "transcript": "awesome "
        }
      ],
      "final": true
    },
    {
      "alternatives": [
        {
          "confidence": 0.59,
          "transcript": "%HESITATION possible give Charlie meds from me and then "
        }
      ],
      "final": true
    },
    {
      "alternatives": [
        {
          "confidence": 0.86,
          "transcript": "thing else comes up or you have any questions just don't hesitate to call us okay okay thank you so much yeah you're very welcome you have a great rest your day okay you too bye bye "
        }
      ],
      "final": true
    }
  ],
  "result_index": 0
}

Вышеуказанное является частью вывода. Я попытался вызвать только стенограмму, выполнив:

print(output['results'][0]['alternatives'][0]['transcript'])
Traceback (most recent call last):



File "<ipython-input-28-fda0a085be69>", line 31, in <module>
    print(output['results'][0]['alternatives'][0]['transcript'])

TypeError: 'NoneType' object is not subscriptable

Как получить доступ только ко всей стенограмме, не получая другие вертикали, такие как «уверенность», «финал» и др. c.

1 Ответ

1 голос
/ 26 февраля 2020

Ключ results в объекте ответа является массивом, поэтому вам нужно выполнить что-то вроде output["results"][0]["alternatives"][0]["transcript"]. Я предполагаю, что вы сохраняете результаты в выводе, например:

output = service.recognize(
            audio=audio_file,
            content_type='audio/wav',
            #timestamps=True,
            #word_confidence=True,
            model='en-US_NarrowbandModel',
            continuous=True).get_result()
print(output['results'][0]['alternatives'][0]['transcript'])


## Updated Example including file handling
with open(join(dirname(__file__), '../resources/speech.wav'),
          'rb') as audio_file:
    output = service.recognize(
            audio=audio_file,
            content_type='audio/wav',
            timestamps=True,
            word_confidence=True).get_result()
    print(output['results'][0]['alternatives'][0]['transcript'])

Пожалуйста, ознакомьтесь с документом Начало работы , чтобы понять больше об объекте ответа.

...