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.
3 Réponses :
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 à:
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.
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;
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