Метка динамика / диаризация не возвращается в Watson Speech to Text API - PullRequest
5 голосов
/ 08 апреля 2020

Я пытаюсь получить метки динамиков через речь IBM Ватсона в текстовом API. В моем окончательном выводе я хочу, чтобы он отображал стенограмму, достоверность и метки динамиков для всего аудио. Мой код ниже:

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
import pandas as pd
authenticator = IAMAuthenticator('rXXXYYZZ')
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__'), 'testvoicejen.wav'),
          'rb') as audio_file:
#    print(json.dumps(
    output = service.recognize(
    audio=audio_file,
    speaker_labels=True,
    content_type='audio/wav',
    #timestamps=True,
    #word_confidence=True,
    model='en-US_NarrowbandModel',
    continuous=True).get_result(),
    indent=2
df = pd.DataFrame([i for elts in output for alts in elts['results'] for i in alts['alternatives']])

Однако, вывод df:

df
Out[22]: 
                                          timestamps  ...                                         transcript
0  [[thank, 3.88, 4.04], [you, 4.04, 4.13], [for,...  ...  thank you for calling my name is Britney and h...
1  [[thank, 30.21, 30.56], [you, 30.56, 30.74], [...  ...  thank you %HESITATION and then %HESITATION you..

Как вы можете заметить, я получаю расшифровку успешно, однако, вместо диаризации динамика или ярлыки, я получаю метки времени. Метка динамика будет выглядеть примерно так:

from": 0.68,
      "to": 1.19,
      "speaker": 2

Как мне это получить?

1 Ответ

1 голос
/ 09 апреля 2020

Когда вы включаете speaker_labels, вы автоматически получаете timestamps. Если вы посмотрите на пример выходных данных в сервисной документации - https://cloud.ibm.com/docs/speech-to-text?topic=speech-to-text-output#speaker_labels

Вы увидите, что раздел меток динамиков отделен от раздела альтернатив / результатов. Ваш код анализирует только раздел результатов / альтернатив. Чтобы получить ярлыки динамика, вам нужно что-то вроде -

df = pd.DataFrame([i for elts in output for i in elts['speaker_labels']])
...