Mit Google-Speech-to-Text kann ich einen Audioclip mit den Standardparametern transkribieren. Bei Verwendung des Tags enable_speaker_diarization zum Profilieren einzelner Lautsprecher im Audioclip wird jedoch eine Fehlermeldung angezeigt. Google dokumentiert es hier Dies ist ein Audio-Clip mit langer Erkennungsdauer. Daher verwende ich eine asynchrone Anfrage, die Google empfiehlt hier

Mein Code -

def transcribe_gcs(gcs_uri):
from google.cloud import speech
from google.cloud import speech_v1 as speech
from google.cloud.speech import enums
from google.cloud.speech import types
client = speech.SpeechClient()
audio = types.RecognitionAudio(uri = gcs_uri)
config = speech.types.RecognitionConfig(encoding=speech.enums.RecognitionConfig.AudioEncoding.FLAC, 
                                        sample_rate_hertz= 16000, 
                                        language_code = 'en-US',
                                       enable_speaker_diarization=True,
                                        diarization_speaker_count=2)

operation = client.long_running_recognize(config, audio)
print('Waiting for operation to complete...')
response = operation.result(timeout=3000)
result = response.results[-1]

words_info = result.alternatives[0].words

for word_info in words_info:
    print("word: '{}', speaker_tag: {}".format(word_info.word, word_info.speaker_tag))

Nach dem Gebrauch -

transcribe_gcs('gs://bucket_name/filename.flac') 

Ich bekomme den Fehler

ValueError: Protocol message RecognitionConfig has no "enable_speaker_diarization" field.

Ich bin mir sicher, dass dies etwas mit Bibliotheken zu tun hat. Ich habe alle Varianten verwendet, die ich finden konnte

from google.cloud import speech_v1p1beta1 as speech
from google.cloud import speech

Aber ich bekomme immer den gleichen Fehler. Hinweis - Ich habe mich bereits vor dem Ausführen dieses Codes mit der JSON-Datei authentifiziert.

2
Asif Shaikh 20 Jän. 2019 im 00:57

3 Antworten

Beste Antwort

Der Parameter enable_speaker_diarization=True in speech.types.RecognitionConfig ist derzeit nur in der Bibliothek speech_v1p1beta1 verfügbar. Sie müssen diese Bibliothek also importieren, um diesen Parameter zu verwenden, nicht den Standard-Sprachparameter. Ich habe einige Änderungen an Ihrem Code vorgenommen und funktioniert gut für mich. Berücksichtigen Sie, dass Sie ein Dienstkonto verwenden müssen, um diesen Code auszuführen.

def transcribe_gcs(gcs_uri):
    from google.cloud import speech_v1p1beta1 as speech
    from google.cloud.speech_v1p1beta1 import enums
    from google.cloud.speech_v1p1beta1 import types
    client = speech.SpeechClient()
    audio = types.RecognitionAudio(uri = gcs_uri)
    config = speech.types.RecognitionConfig( language_code = 'en-US',enable_speaker_diarization=True, diarization_speaker_count=2)
    operation = client.long_running_recognize(config, audio)
    print('Waiting for operation to complete...')
    response = operation.result(timeout=3000)
    result = response.results[-1]

    words_info = result.alternatives[0].words

    tag=1
    speaker=""

    for word_info in words_info:
        if word_info.speaker_tag==tag:
            speaker=speaker+" "+word_info.word

        else:
            print("sepaker {}: {}".format(tag,speaker))
            tag=word_info.speaker_tag
            speaker=""+word_info.word

Und das Ergebnis sollte lauten:

enter image description here

5
Alex Riquelme 24 Jän. 2019 im 11:09

Die Fehlerursache ähnelt auch den Benutzern von Node JS. Importieren Sie die Beta-Funktion über diesen Aufruf und verwenden Sie dann die Sprecheridentifizierungsfunktionen.

const speech = require('@google-cloud/speech').v1p1beta1;
0
Nirojan Selvanathan 14 Juli 2019 im 19:54

Der Fehler liegt darin, dass Sie einige Dateien nicht importiert haben. Importieren Sie dazu die folgenden Dateien.

from google.cloud import speech_v1p1beta1 as speech
from google.cloud.speech_v1p1beta1 import enums
from google.cloud.speech_v1p1beta1 import types
0
Shivam Kohli 8 Nov. 2019 im 07:54