1
votes

Erreur avec la balise enable_speaker_diarization dans Google Cloud Speech to Text

Avec Google-Speech-to-Text, je peux transcrire un clip audio avec les paramètres par défaut. Cependant, j'obtiens un message d'erreur lorsque j'utilise la balise enable_speaker_diarization pour profiler des haut-parleurs individuels dans le clip audio. Google le documente ici Il s'agit d'un clip audio reconnu depuis longtemps, j'utilise donc une requête asynchrone que Google recommande ici

Mon code -

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

Après utilisation -

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

J'obtiens l'erreur p>

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

Je suis sûr que c'est quelque chose à voir avec les bibliothèques, j'ai utilisé toutes les variantes que j'ai pu trouver comme

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))

Mais je continuez à obtenir la même erreur. Remarque - Je me suis déjà authentifié à l'aide du fichier JSON avant d'exécuter ce code.


0 commentaires

3 Réponses :


6
votes

Le paramètre enable_speaker_diarization = True dans speech.types.RecognitionConfig est disponible uniquement dans la bibliothèque speech_v1p1beta1 pour le moment, vous avez donc besoin pour importer cette bibliothèque afin d'utiliser ce paramètre, pas celui de la parole par défaut. J'ai fait quelques modifications à votre code et fonctionne très bien pour moi. Tenez compte du fait que vous devez utiliser un compte de service pour exécuter ce code.

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("speaker {}: {}".format(tag,speaker))
            tag=word_info.speaker_tag
            speaker=""+word_info.word

     print("speaker {}: {}".format(tag,speaker))

Et le résultat devrait ressembler à:

 entrez la description de l'image ici


5 commentaires

Cela fonctionne bien, mais la sortie n'est pas ce que je recherchais. Pourriez-vous m'aider à comprendre la réponse dans ce format- Intervenant 1: Mots prononcés par l'orateur 1 Orateur 2: Mots prononcés par l'orateur 2


@AsifShaikh J'ai modifié ma réponse pour répondre à vos exigences de format, faites-moi savoir si cela fonctionne pour vous.


Fonctionne parfaitement. Merci beaucoup!


En utilisant votre code @AlexRiquelme, je n'obtiens que les 2 premières lignes de la sortie et d'autres fois, je reçois juste le haut-parleur 1: sans aucun mot. Même code que ci-dessus en utilisant commercial_mono.wav à partir de l'exemple de code google


Ce code nécessite un print ("speaker {}: {}". Format (tag, speaker)) à la fin. Sinon, il n'imprimera pas la dernière phrase.



0
votes

La cause de l'erreur est également similaire aux utilisateurs de Node JS. Importez la fonctionnalité bêta via cet appel, puis utilisez les fonctionnalités d'identification du locuteur.

const speech = require('@google-cloud/speech').v1p1beta1;


0 commentaires

0
votes

L'erreur vient du fait que vous n'avez pas importé certains fichiers. Pour ce faire, importez les fichiers suivants.

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


0 commentaires