Snabbstart: Skapa diarisering i realtid
Referensdokumentation Paket (NuGet) | Ytterligare exempel på GitHub |
I den här snabbstarten kör du ett program för tal till text-transkription med realtidsdiarisering. Diarization skiljer mellan de olika talare som deltar i konversationen. Taltjänsten tillhandahåller information om vilken talare som talade en viss del av transkriberat tal.
Talarinformationen ingår i resultatet i talar-ID-fältet. Talar-ID:t är en allmän identifierare som tilldelas varje konversationsdeltagare av tjänsten under igenkänningen eftersom olika talare identifieras från det angivna ljudinnehållet.
Dricks
Du kan prova tal till text i realtid i Speech Studio utan att registrera dig eller skriva någon kod. Speech Studio har dock ännu inte stöd för diarisering.
Förutsättningar
- En Azure-prenumeration. Du kan skapa en kostnadsfritt.
- Skapa en Speech-resurs i Azure Portal.
- Hämta resursnyckeln och regionen Speech. När speech-resursen har distribuerats väljer du Gå till resurs för att visa och hantera nycklar.
Konfigurera miljön
Speech SDK är tillgängligt som ett NuGet-paket och implementerar .NET Standard 2.0. Du installerar Speech SDK senare i den här guiden, men kontrollera först SDK-installationsguiden om det finns fler krav.
Ange miljövariabler
Du måste autentisera ditt program för att få åtkomst till Azure AI-tjänster. Den här artikeln visar hur du använder miljövariabler för att lagra dina autentiseringsuppgifter. Du kan sedan komma åt miljövariablerna från koden för att autentisera ditt program. För produktion använder du ett säkrare sätt att lagra och komma åt dina autentiseringsuppgifter.
Viktigt!
Vi rekommenderar Microsoft Entra-ID-autentisering med hanterade identiteter för Azure-resurser för att undvika att lagra autentiseringsuppgifter med dina program som körs i molnet.
Om du använder en API-nyckel lagrar du den på ett säkert sätt någon annanstans, till exempel i Azure Key Vault. Inkludera inte API-nyckeln direkt i koden och publicera den aldrig offentligt.
Mer information om säkerhet för AI-tjänster finns i Autentisera begäranden till Azure AI-tjänster.
Om du vill ange miljövariablerna för din Speech-resursnyckel och -region öppnar du ett konsolfönster och följer anvisningarna för operativsystemet och utvecklingsmiljön.
- Om du vill ange
SPEECH_KEY
miljövariabeln ersätter du din nyckel med en av nycklarna för resursen. - Om du vill ange
SPEECH_REGION
miljövariabeln ersätter du din region med en av regionerna för resursen.
setx SPEECH_KEY your-key
setx SPEECH_REGION your-region
Kommentar
Om du bara behöver komma åt miljövariablerna i den aktuella konsolen kan du ange miljövariabeln med set
i stället för setx
.
När du har lagt till miljövariablerna kan du behöva starta om alla program som behöver läsa miljövariablerna, inklusive konsolfönstret. Om du till exempel använder Visual Studio som redigerare startar du om Visual Studio innan du kör exemplet.
Implementera diarisering från fil med konversationstranskription
Följ de här stegen för att skapa ett konsolprogram och installera Speech SDK.
Öppna ett kommandotolksfönster i mappen där du vill ha det nya projektet. Kör det här kommandot för att skapa ett konsolprogram med .NET CLI.
dotnet new console
Det här kommandot skapar Program.cs-filen i projektkatalogen.
Installera Speech SDK i ditt nya projekt med .NET CLI.
dotnet add package Microsoft.CognitiveServices.Speech
Ersätt innehållet i
Program.cs
med följande kod.using Microsoft.CognitiveServices.Speech; using Microsoft.CognitiveServices.Speech.Audio; using Microsoft.CognitiveServices.Speech.Transcription; class Program { // This example requires environment variables named "SPEECH_KEY" and "SPEECH_REGION" static string speechKey = Environment.GetEnvironmentVariable("SPEECH_KEY"); static string speechRegion = Environment.GetEnvironmentVariable("SPEECH_REGION"); async static Task Main(string[] args) { var filepath = "katiesteve.wav"; var speechConfig = SpeechConfig.FromSubscription(speechKey, speechRegion); speechConfig.SpeechRecognitionLanguage = "en-US"; speechConfig.SetProperty(PropertyId.SpeechServiceResponse_DiarizeIntermediateResults, "true"); var stopRecognition = new TaskCompletionSource<int>(TaskCreationOptions.RunContinuationsAsynchronously); // Create an audio stream from a wav file or from the default microphone using (var audioConfig = AudioConfig.FromWavFileInput(filepath)) { // Create a conversation transcriber using audio stream input using (var conversationTranscriber = new ConversationTranscriber(speechConfig, audioConfig)) { conversationTranscriber.Transcribing += (s, e) => { Console.WriteLine($"TRANSCRIBING: Text={e.Result.Text} Speaker ID={e.Result.SpeakerId}"); }; conversationTranscriber.Transcribed += (s, e) => { if (e.Result.Reason == ResultReason.RecognizedSpeech) { Console.WriteLine(); Console.WriteLine($"TRANSCRIBED: Text={e.Result.Text} Speaker ID={e.Result.SpeakerId}"); Console.WriteLine(); } else if (e.Result.Reason == ResultReason.NoMatch) { Console.WriteLine($"NOMATCH: Speech could not be transcribed."); } }; conversationTranscriber.Canceled += (s, e) => { Console.WriteLine($"CANCELED: Reason={e.Reason}"); if (e.Reason == CancellationReason.Error) { Console.WriteLine($"CANCELED: ErrorCode={e.ErrorCode}"); Console.WriteLine($"CANCELED: ErrorDetails={e.ErrorDetails}"); Console.WriteLine($"CANCELED: Did you set the speech resource key and region values?"); stopRecognition.TrySetResult(0); } stopRecognition.TrySetResult(0); }; conversationTranscriber.SessionStopped += (s, e) => { Console.WriteLine("\n Session stopped event."); stopRecognition.TrySetResult(0); }; await conversationTranscriber.StartTranscribingAsync(); // Waits for completion. Use Task.WaitAny to keep the task rooted. Task.WaitAny(new[] { stopRecognition.Task }); await conversationTranscriber.StopTranscribingAsync(); } } } }
Hämta exempelljudfilen eller använd din egen
.wav
fil. Ersättkatiesteve.wav
med sökvägen och namnet på.wav
filen.Programmet identifierar tal från flera deltagare i konversationen. Ljudfilen ska innehålla flera högtalare.
Om du vill ändra taligenkänningsspråket ersätter du
en-US
med ett annat språk som stöds. Till exempeles-ES
för spanska (Spanien). Standardspråket ären-US
om du inte anger något språk. Mer information om hur du identifierar ett av flera språk som kan talas finns i språkidentifiering.Kör konsolprogrammet för att starta konversationstranskription:
dotnet run
Viktigt!
Se till att du anger SPEECH_KEY
miljövariablerna och SPEECH_REGION
. Om du inte anger dessa variabler misslyckas exemplet med ett felmeddelande.
Den transkriberade konversationen ska matas ut som text:
TRANSCRIBING: Text=good morning steve Speaker ID=Unknown
TRANSCRIBING: Text=good morning steve how are Speaker ID=Guest-1
TRANSCRIBING: Text=good morning steve how are you doing today Speaker ID=Guest-1
TRANSCRIBED: Text=Good morning, Steve. How are you doing today? Speaker ID=Guest-1
TRANSCRIBING: Text=good morning katie Speaker ID=Unknown
TRANSCRIBING: Text=good morning katie i hope Speaker ID=Guest-2
TRANSCRIBING: Text=good morning katie i hope you're having a great Speaker ID=Guest-2
TRANSCRIBING: Text=good morning katie i hope you're having a great start to Speaker ID=Guest-2
TRANSCRIBING: Text=good morning katie i hope you're having a great start to your day Speaker ID=Guest-2
TRANSCRIBED: Text=Good morning, Katie. I hope you're having a great start to your day. Speaker ID=Guest-2
TRANSCRIBING: Text=have you tried Speaker ID=Unknown
TRANSCRIBING: Text=have you tried the latest Speaker ID=Unknown
TRANSCRIBING: Text=have you tried the latest real time Speaker ID=Guest-1
TRANSCRIBING: Text=have you tried the latest real time diarization Speaker ID=Guest-1
TRANSCRIBING: Text=have you tried the latest real time diarization in Speaker ID=Guest-1
TRANSCRIBING: Text=have you tried the latest real time diarization in microsoft Speaker ID=Guest-1
TRANSCRIBING: Text=have you tried the latest real time diarization in microsoft speech Speaker ID=Guest-1
TRANSCRIBING: Text=have you tried the latest real time diarization in microsoft speech service Speaker ID=Guest-1
TRANSCRIBING: Text=have you tried the latest real time diarization in microsoft speech service which Speaker ID=Guest-1
TRANSCRIBING: Text=have you tried the latest real time diarization in microsoft speech service which can Speaker ID=Guest-1
TRANSCRIBING: Text=have you tried the latest real time diarization in microsoft speech service which can tell you Speaker ID=Guest-1
TRANSCRIBING: Text=have you tried the latest real time diarization in microsoft speech service which can tell you who said Speaker ID=Guest-1
TRANSCRIBING: Text=have you tried the latest real time diarization in microsoft speech service which can tell you who said what Speaker ID=Guest-1
TRANSCRIBING: Text=have you tried the latest real time diarization in microsoft speech service which can tell you who said what in Speaker ID=Guest-1
TRANSCRIBING: Text=have you tried the latest real time diarization in microsoft speech service which can tell you who said what in real time Speaker ID=Guest-1
TRANSCRIBED: Text=Have you tried the latest real time diarization in Microsoft Speech Service which can tell you who said what in real time? Speaker ID=Guest-1
TRANSCRIBING: Text=not yet Speaker ID=Unknown
TRANSCRIBING: Text=not yet i Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch trans Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization function Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produc Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produces Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produces di Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is processed Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is processed is the Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is processed is the new Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is processed is the new feature Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is processed is the new feature able to Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is processed is the new feature able to di Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is processed is the new feature able to diarize Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is processed is the new feature able to diarize in real Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is processed is the new feature able to diarize in real time Speaker ID=Guest-2
TRANSCRIBED: Text=Not yet. I've been using the batch transcription with diarization functionality, but it produces diarization results after the whole audio is processed. Is the new feature able to diarize in real time? Speaker ID=Guest-2
TRANSCRIBING: Text=absolutely Speaker ID=Unknown
TRANSCRIBING: Text=absolutely i Speaker ID=Unknown
TRANSCRIBING: Text=absolutely i recom Speaker ID=Guest-1
TRANSCRIBING: Text=absolutely i recommend Speaker ID=Guest-1
TRANSCRIBING: Text=absolutely i recommend you give it a try Speaker ID=Guest-1
TRANSCRIBED: Text=Absolutely, I recommend you give it a try. Speaker ID=Guest-1
TRANSCRIBING: Text=that's exc Speaker ID=Unknown
TRANSCRIBING: Text=that's exciting Speaker ID=Unknown
TRANSCRIBING: Text=that's exciting let me try Speaker ID=Guest-2
TRANSCRIBING: Text=that's exciting let me try it right now Speaker ID=Guest-2
TRANSCRIBED: Text=That's exciting. Let me try it right now. Speaker ID=Guest-2
Talare identifieras som Gäst-1, Gäst-2 och så vidare, beroende på antalet talare i konversationen.
Kommentar
Du kan se Speaker ID=Unknown
några av de tidiga mellanliggande resultaten när talaren ännu inte har identifierats. Utan mellanliggande diariseringsresultat (om du inte anger PropertyId.SpeechServiceResponse_DiarizeIntermediateResults
egenskapen till "true" är talar-ID:t alltid "Okänt".
Rensa resurser
Du kan använda Azure Portal- eller Azure-kommandoradsgränssnittet (CLI) för att ta bort den Speech-resurs som du skapade.
Referensdokumentation Paket (NuGet) | Ytterligare exempel på GitHub |
I den här snabbstarten kör du ett program för tal till text-transkription med realtidsdiarisering. Diarization skiljer mellan de olika talare som deltar i konversationen. Taltjänsten tillhandahåller information om vilken talare som talade en viss del av transkriberat tal.
Talarinformationen ingår i resultatet i talar-ID-fältet. Talar-ID:t är en allmän identifierare som tilldelas varje konversationsdeltagare av tjänsten under igenkänningen eftersom olika talare identifieras från det angivna ljudinnehållet.
Dricks
Du kan prova tal till text i realtid i Speech Studio utan att registrera dig eller skriva någon kod. Speech Studio har dock ännu inte stöd för diarisering.
Förutsättningar
- En Azure-prenumeration. Du kan skapa en kostnadsfritt.
- Skapa en Speech-resurs i Azure Portal.
- Hämta resursnyckeln och regionen Speech. När speech-resursen har distribuerats väljer du Gå till resurs för att visa och hantera nycklar.
Konfigurera miljön
Speech SDK är tillgängligt som ett NuGet-paket och implementerar .NET Standard 2.0. Du installerar Speech SDK senare i den här guiden, men kontrollera först SDK-installationsguiden om det finns fler krav.
Ange miljövariabler
Du måste autentisera ditt program för att få åtkomst till Azure AI-tjänster. Den här artikeln visar hur du använder miljövariabler för att lagra dina autentiseringsuppgifter. Du kan sedan komma åt miljövariablerna från koden för att autentisera ditt program. För produktion använder du ett säkrare sätt att lagra och komma åt dina autentiseringsuppgifter.
Viktigt!
Vi rekommenderar Microsoft Entra-ID-autentisering med hanterade identiteter för Azure-resurser för att undvika att lagra autentiseringsuppgifter med dina program som körs i molnet.
Om du använder en API-nyckel lagrar du den på ett säkert sätt någon annanstans, till exempel i Azure Key Vault. Inkludera inte API-nyckeln direkt i koden och publicera den aldrig offentligt.
Mer information om säkerhet för AI-tjänster finns i Autentisera begäranden till Azure AI-tjänster.
Om du vill ange miljövariablerna för din Speech-resursnyckel och -region öppnar du ett konsolfönster och följer anvisningarna för operativsystemet och utvecklingsmiljön.
- Om du vill ange
SPEECH_KEY
miljövariabeln ersätter du din nyckel med en av nycklarna för resursen. - Om du vill ange
SPEECH_REGION
miljövariabeln ersätter du din region med en av regionerna för resursen.
setx SPEECH_KEY your-key
setx SPEECH_REGION your-region
Kommentar
Om du bara behöver komma åt miljövariablerna i den aktuella konsolen kan du ange miljövariabeln med set
i stället för setx
.
När du har lagt till miljövariablerna kan du behöva starta om alla program som behöver läsa miljövariablerna, inklusive konsolfönstret. Om du till exempel använder Visual Studio som redigerare startar du om Visual Studio innan du kör exemplet.
Implementera diarisering från fil med konversationstranskription
Följ de här stegen för att skapa ett konsolprogram och installera Speech SDK.
Skapa ett nytt C++-konsolprojekt i Visual Studio Community 2022 med namnet
ConversationTranscription
.Välj Verktyg>Nuget Package Manager Package Manager>Console. Kör följande kommando i Package Manager-konsolen:
Install-Package Microsoft.CognitiveServices.Speech
Ersätt innehållet i
ConversationTranscription.cpp
med följande kod.#include <iostream> #include <stdlib.h> #include <speechapi_cxx.h> #include <future> using namespace Microsoft::CognitiveServices::Speech; using namespace Microsoft::CognitiveServices::Speech::Audio; using namespace Microsoft::CognitiveServices::Speech::Transcription; std::string GetEnvironmentVariable(const char* name); int main() { // This example requires environment variables named "SPEECH_KEY" and "SPEECH_REGION" auto speechKey = GetEnvironmentVariable("SPEECH_KEY"); auto speechRegion = GetEnvironmentVariable("SPEECH_REGION"); if ((size(speechKey) == 0) || (size(speechRegion) == 0)) { std::cout << "Please set both SPEECH_KEY and SPEECH_REGION environment variables." << std::endl; return -1; } auto speechConfig = SpeechConfig::FromSubscription(speechKey, speechRegion); speechConfig->SetProperty(PropertyId::SpeechServiceResponse_DiarizeIntermediateResults, "true"); speechConfig->SetSpeechRecognitionLanguage("en-US"); auto audioConfig = AudioConfig::FromWavFileInput("katiesteve.wav"); auto conversationTranscriber = ConversationTranscriber::FromConfig(speechConfig, audioConfig); // promise for synchronization of recognition end. std::promise<void> recognitionEnd; // Subscribes to events. conversationTranscriber->Transcribing.Connect([](const ConversationTranscriptionEventArgs& e) { std::cout << "TRANSCRIBING:" << e.Result->Text << std::endl; std::cout << "Speaker ID=" << e.Result->SpeakerId << std::endl; }); conversationTranscriber->Transcribed.Connect([](const ConversationTranscriptionEventArgs& e) { if (e.Result->Reason == ResultReason::RecognizedSpeech) { std::cout << "\n" << "TRANSCRIBED: Text=" << e.Result->Text << std::endl; std::cout << "Speaker ID=" << e.Result->SpeakerId << "\n" << std::endl; } else if (e.Result->Reason == ResultReason::NoMatch) { std::cout << "NOMATCH: Speech could not be transcribed." << std::endl; } }); conversationTranscriber->Canceled.Connect([&recognitionEnd](const ConversationTranscriptionCanceledEventArgs& e) { auto cancellation = CancellationDetails::FromResult(e.Result); std::cout << "CANCELED: Reason=" << (int)cancellation->Reason << std::endl; if (cancellation->Reason == CancellationReason::Error) { std::cout << "CANCELED: ErrorCode=" << (int)cancellation->ErrorCode << std::endl; std::cout << "CANCELED: ErrorDetails=" << cancellation->ErrorDetails << std::endl; std::cout << "CANCELED: Did you set the speech resource key and region values?" << std::endl; } else if (cancellation->Reason == CancellationReason::EndOfStream) { std::cout << "CANCELED: Reach the end of the file." << std::endl; } }); conversationTranscriber->SessionStopped.Connect([&recognitionEnd](const SessionEventArgs& e) { std::cout << "Session stopped."; recognitionEnd.set_value(); // Notify to stop recognition. }); conversationTranscriber->StartTranscribingAsync().wait(); // Waits for recognition end. recognitionEnd.get_future().wait(); conversationTranscriber->StopTranscribingAsync().wait(); } std::string GetEnvironmentVariable(const char* name) { #if defined(_MSC_VER) size_t requiredSize = 0; (void)getenv_s(&requiredSize, nullptr, 0, name); if (requiredSize == 0) { return ""; } auto buffer = std::make_unique<char[]>(requiredSize); (void)getenv_s(&requiredSize, buffer.get(), requiredSize, name); return buffer.get(); #else auto value = getenv(name); return value ? value : ""; #endif }
Hämta exempelljudfilen eller använd din egen
.wav
fil. Ersättkatiesteve.wav
med sökvägen och namnet på.wav
filen.Programmet identifierar tal från flera deltagare i konversationen. Ljudfilen ska innehålla flera högtalare.
Om du vill ändra taligenkänningsspråket ersätter du
en-US
med ett annat språk som stöds. Till exempeles-ES
för spanska (Spanien). Standardspråket ären-US
om du inte anger något språk. Mer information om hur du identifierar ett av flera språk som kan talas finns i språkidentifiering.Skapa och kör ditt program för att starta konversationstranskription:
Viktigt!
Se till att du anger
SPEECH_KEY
miljövariablerna ochSPEECH_REGION
. Om du inte anger dessa variabler misslyckas exemplet med ett felmeddelande.
Den transkriberade konversationen ska matas ut som text:
TRANSCRIBING:good morning
Speaker ID=Unknown
TRANSCRIBING:good morning steve
Speaker ID=Unknown
TRANSCRIBING:good morning steve how are you doing
Speaker ID=Guest-1
TRANSCRIBING:good morning steve how are you doing today
Speaker ID=Guest-1
TRANSCRIBED: Text=Good morning, Steve. How are you doing today?
Speaker ID=Guest-1
TRANSCRIBING:good
Speaker ID=Unknown
TRANSCRIBING:good morning
Speaker ID=Unknown
TRANSCRIBING:good morning kat
Speaker ID=Unknown
TRANSCRIBING:good morning katie i hope you're having a
Speaker ID=Guest-2
TRANSCRIBING:good morning katie i hope you're having a great start to your day
Speaker ID=Guest-2
TRANSCRIBED: Text=Good morning, Katie. I hope you're having a great start to your day.
Speaker ID=Guest-2
TRANSCRIBING:have you
Speaker ID=Unknown
TRANSCRIBING:have you tried
Speaker ID=Unknown
TRANSCRIBING:have you tried the latest
Speaker ID=Unknown
TRANSCRIBING:have you tried the latest real
Speaker ID=Guest-1
TRANSCRIBING:have you tried the latest real time
Speaker ID=Guest-1
TRANSCRIBING:have you tried the latest real time diarization
Speaker ID=Guest-1
TRANSCRIBING:have you tried the latest real time diarization in
Speaker ID=Guest-1
TRANSCRIBING:have you tried the latest real time diarization in microsoft
Speaker ID=Guest-1
TRANSCRIBING:have you tried the latest real time diarization in microsoft speech
Speaker ID=Guest-1
TRANSCRIBING:have you tried the latest real time diarization in microsoft speech service
Speaker ID=Guest-1
TRANSCRIBING:have you tried the latest real time diarization in microsoft speech service which
Speaker ID=Guest-1
TRANSCRIBING:have you tried the latest real time diarization in microsoft speech service which can
Speaker ID=Guest-1
TRANSCRIBING:have you tried the latest real time diarization in microsoft speech service which can tell you
Speaker ID=Guest-1
TRANSCRIBING:have you tried the latest real time diarization in microsoft speech service which can tell you who said
Speaker ID=Guest-1
TRANSCRIBING:have you tried the latest real time diarization in microsoft speech service which can tell you who said what
Speaker ID=Guest-1
TRANSCRIBING:have you tried the latest real time diarization in microsoft speech service which can tell you who said what in
Speaker ID=Guest-1
TRANSCRIBING:have you tried the latest real time diarization in microsoft speech service which can tell you who said what in real time
Speaker ID=Guest-1
TRANSCRIBED: Text=Have you tried the latest real time diarization in Microsoft Speech Service which can tell you who said what in real time?
Speaker ID=Guest-1
TRANSCRIBING:not yet
Speaker ID=Unknown
TRANSCRIBING:not yet i
Speaker ID=Guest-2
TRANSCRIBING:not yet i've been using
Speaker ID=Guest-2
TRANSCRIBING:not yet i've been using the
Speaker ID=Guest-2
TRANSCRIBING:not yet i've been using the batch
Speaker ID=Guest-2
TRANSCRIBING:not yet i've been using the batch trans
Speaker ID=Guest-2
TRANSCRIBING:not yet i've been using the batch transcription with
Speaker ID=Guest-2
TRANSCRIBING:not yet i've been using the batch transcription with diarization
Speaker ID=Guest-2
TRANSCRIBING:not yet i've been using the batch transcription with diarization function
Speaker ID=Guest-2
TRANSCRIBING:not yet i've been using the batch transcription with diarization functionality
Speaker ID=Guest-2
TRANSCRIBING:not yet i've been using the batch transcription with diarization functionality but
Speaker ID=Guest-2
TRANSCRIBING:not yet i've been using the batch transcription with diarization functionality but it
Speaker ID=Guest-2
TRANSCRIBING:not yet i've been using the batch transcription with diarization functionality but it produces
Speaker ID=Guest-2
TRANSCRIBING:not yet i've been using the batch transcription with diarization functionality but it produces di
Speaker ID=Guest-2
TRANSCRIBING:not yet i've been using the batch transcription with diarization functionality but it produces diarization
Speaker ID=Guest-2
TRANSCRIBING:not yet i've been using the batch transcription with diarization functionality but it produces diarization results
Speaker ID=Guest-2
TRANSCRIBING:not yet i've been using the batch transcription with diarization functionality but it produces diarization results after
Speaker ID=Guest-2
TRANSCRIBING:not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the
Speaker ID=Guest-2
TRANSCRIBING:not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole
Speaker ID=Guest-2
TRANSCRIBING:not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio
Speaker ID=Guest-2
TRANSCRIBING:not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is
Speaker ID=Guest-2
TRANSCRIBING:not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is processed
Speaker ID=Guest-2
TRANSCRIBING:not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is processed is the
Speaker ID=Guest-2
TRANSCRIBING:not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is processed is the new
Speaker ID=Guest-2
TRANSCRIBING:not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is processed is the new feature
Speaker ID=Guest-2
TRANSCRIBING:not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is processed is the new feature able to
Speaker ID=Guest-2
TRANSCRIBING:not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is processed is the new feature able to di
Speaker ID=Guest-2
TRANSCRIBING:not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is processed is the new feature able to diarize
Speaker ID=Guest-2
TRANSCRIBING:not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is processed is the new feature able to diarize in real
Speaker ID=Guest-2
TRANSCRIBING:not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is processed is the new feature able to diarize in real time
Speaker ID=Guest-2
TRANSCRIBED: Text=Not yet. I've been using the batch transcription with diarization functionality, but it produces diarization results after the whole audio is processed. Is the new feature able to diarize in real time?
Speaker ID=Guest-2
TRANSCRIBING:absolutely
Speaker ID=Unknown
TRANSCRIBING:absolutely i
Speaker ID=Unknown
TRANSCRIBING:absolutely i recom
Speaker ID=Guest-1
TRANSCRIBING:absolutely i recommend
Speaker ID=Guest-1
TRANSCRIBING:absolutely i recommend you
Speaker ID=Guest-1
TRANSCRIBING:absolutely i recommend you give it a try
Speaker ID=Guest-1
TRANSCRIBED: Text=Absolutely, I recommend you give it a try.
Speaker ID=Guest-1
TRANSCRIBING:that's exc
Speaker ID=Unknown
TRANSCRIBING:that's exciting
Speaker ID=Unknown
TRANSCRIBING:that's exciting let me
Speaker ID=Guest-2
TRANSCRIBING:that's exciting let me try
Speaker ID=Guest-2
TRANSCRIBING:that's exciting let me try it right now
Speaker ID=Guest-2
TRANSCRIBED: Text=That's exciting. Let me try it right now.
Speaker ID=Guest-2
Talare identifieras som Gäst-1, Gäst-2 och så vidare, beroende på antalet talare i konversationen.
Kommentar
Du kan se Speaker ID=Unknown
några av de tidiga mellanliggande resultaten när talaren ännu inte har identifierats. Utan mellanliggande diariseringsresultat (om du inte anger PropertyId::SpeechServiceResponse_DiarizeIntermediateResults
egenskapen till "true" är talar-ID:t alltid "Okänt".
Rensa resurser
Du kan använda Azure Portal- eller Azure-kommandoradsgränssnittet (CLI) för att ta bort den Speech-resurs som du skapade.
Referensdokumentation Paket (Go) | Ytterligare exempel på GitHub |
Speech SDK för programmeringsspråket Go stöder inte konversationstranskription. Välj ett annat programmeringsspråk eller Go-referensen och exempel som är länkade från början av den här artikeln.
Referensdokumentation | Ytterligare exempel på GitHub
I den här snabbstarten kör du ett program för tal till text-transkription med realtidsdiarisering. Diarization skiljer mellan de olika talare som deltar i konversationen. Taltjänsten tillhandahåller information om vilken talare som talade en viss del av transkriberat tal.
Talarinformationen ingår i resultatet i talar-ID-fältet. Talar-ID:t är en allmän identifierare som tilldelas varje konversationsdeltagare av tjänsten under igenkänningen eftersom olika talare identifieras från det angivna ljudinnehållet.
Dricks
Du kan prova tal till text i realtid i Speech Studio utan att registrera dig eller skriva någon kod. Speech Studio har dock ännu inte stöd för diarisering.
Förutsättningar
- En Azure-prenumeration. Du kan skapa en kostnadsfritt.
- Skapa en Speech-resurs i Azure Portal.
- Hämta resursnyckeln och regionen Speech. När speech-resursen har distribuerats väljer du Gå till resurs för att visa och hantera nycklar.
Konfigurera miljön
Installera Speech SDK för att konfigurera din miljö. Exemplet i den här snabbstarten fungerar med Java Runtime.
Installera Apache Maven. Kör
mvn -v
sedan för att bekräfta att installationen har slutförts.Skapa en ny
pom.xml
fil i roten för projektet och kopiera följande till den:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.microsoft.cognitiveservices.speech.samples</groupId> <artifactId>quickstart-eclipse</artifactId> <version>1.0.0-SNAPSHOT</version> <build> <sourceDirectory>src</sourceDirectory> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.7.0</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>com.microsoft.cognitiveservices.speech</groupId> <artifactId>client-sdk</artifactId> <version>1.40.0</version> </dependency> </dependencies> </project>
Installera Speech SDK och beroenden.
mvn clean dependency:copy-dependencies
Ange miljövariabler
Du måste autentisera ditt program för att få åtkomst till Azure AI-tjänster. Den här artikeln visar hur du använder miljövariabler för att lagra dina autentiseringsuppgifter. Du kan sedan komma åt miljövariablerna från koden för att autentisera ditt program. För produktion använder du ett säkrare sätt att lagra och komma åt dina autentiseringsuppgifter.
Viktigt!
Vi rekommenderar Microsoft Entra-ID-autentisering med hanterade identiteter för Azure-resurser för att undvika att lagra autentiseringsuppgifter med dina program som körs i molnet.
Om du använder en API-nyckel lagrar du den på ett säkert sätt någon annanstans, till exempel i Azure Key Vault. Inkludera inte API-nyckeln direkt i koden och publicera den aldrig offentligt.
Mer information om säkerhet för AI-tjänster finns i Autentisera begäranden till Azure AI-tjänster.
Om du vill ange miljövariablerna för din Speech-resursnyckel och -region öppnar du ett konsolfönster och följer anvisningarna för operativsystemet och utvecklingsmiljön.
- Om du vill ange
SPEECH_KEY
miljövariabeln ersätter du din nyckel med en av nycklarna för resursen. - Om du vill ange
SPEECH_REGION
miljövariabeln ersätter du din region med en av regionerna för resursen.
setx SPEECH_KEY your-key
setx SPEECH_REGION your-region
Kommentar
Om du bara behöver komma åt miljövariablerna i den aktuella konsolen kan du ange miljövariabeln med set
i stället för setx
.
När du har lagt till miljövariablerna kan du behöva starta om alla program som behöver läsa miljövariablerna, inklusive konsolfönstret. Om du till exempel använder Visual Studio som redigerare startar du om Visual Studio innan du kör exemplet.
Implementera diarisering från fil med konversationstranskription
Följ de här stegen för att skapa ett konsolprogram för konversationstranskription.
Skapa en ny fil med namnet
ConversationTranscription.java
i samma projektrotkatalog.Kopiera följande kod till
ConversationTranscription.java
:import com.microsoft.cognitiveservices.speech.*; import com.microsoft.cognitiveservices.speech.audio.AudioConfig; import com.microsoft.cognitiveservices.speech.transcription.*; import java.util.concurrent.Semaphore; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; public class ConversationTranscription { // This example requires environment variables named "SPEECH_KEY" and "SPEECH_REGION" private static String speechKey = System.getenv("SPEECH_KEY"); private static String speechRegion = System.getenv("SPEECH_REGION"); public static void main(String[] args) throws InterruptedException, ExecutionException { SpeechConfig speechConfig = SpeechConfig.fromSubscription(speechKey, speechRegion); speechConfig.setSpeechRecognitionLanguage("en-US"); AudioConfig audioInput = AudioConfig.fromWavFileInput("katiesteve.wav"); speechConfig.setProperty(PropertyId.SpeechServiceResponse_DiarizeIntermediateResults, "true"); Semaphore stopRecognitionSemaphore = new Semaphore(0); ConversationTranscriber conversationTranscriber = new ConversationTranscriber(speechConfig, audioInput); { // Subscribes to events. conversationTranscriber.transcribing.addEventListener((s, e) -> { System.out.println("TRANSCRIBING: Text=" + e.getResult().getText() + " Speaker ID=" + e.getResult().getSpeakerId() ); }); conversationTranscriber.transcribed.addEventListener((s, e) -> { if (e.getResult().getReason() == ResultReason.RecognizedSpeech) { System.out.println(); System.out.println("TRANSCRIBED: Text=" + e.getResult().getText() + " Speaker ID=" + e.getResult().getSpeakerId() ); System.out.println(); } else if (e.getResult().getReason() == ResultReason.NoMatch) { System.out.println("NOMATCH: Speech could not be transcribed."); } }); conversationTranscriber.canceled.addEventListener((s, e) -> { System.out.println("CANCELED: Reason=" + e.getReason()); if (e.getReason() == CancellationReason.Error) { System.out.println("CANCELED: ErrorCode=" + e.getErrorCode()); System.out.println("CANCELED: ErrorDetails=" + e.getErrorDetails()); System.out.println("CANCELED: Did you update the subscription info?"); } stopRecognitionSemaphore.release(); }); conversationTranscriber.sessionStarted.addEventListener((s, e) -> { System.out.println("\n Session started event."); }); conversationTranscriber.sessionStopped.addEventListener((s, e) -> { System.out.println("\n Session stopped event."); }); conversationTranscriber.startTranscribingAsync().get(); // Waits for completion. stopRecognitionSemaphore.acquire(); conversationTranscriber.stopTranscribingAsync().get(); } speechConfig.close(); audioInput.close(); conversationTranscriber.close(); System.exit(0); } }
Hämta exempelljudfilen eller använd din egen
.wav
fil. Ersättkatiesteve.wav
med sökvägen och namnet på.wav
filen.Programmet identifierar tal från flera deltagare i konversationen. Ljudfilen ska innehålla flera högtalare.
Om du vill ändra taligenkänningsspråket ersätter du
en-US
med ett annat språk som stöds. Till exempeles-ES
för spanska (Spanien). Standardspråket ären-US
om du inte anger något språk. Mer information om hur du identifierar ett av flera språk som kan talas finns i språkidentifiering.Kör det nya konsolprogrammet för att starta konversationstranskription:
javac ConversationTranscription.java -cp ".;target\dependency\*" java -cp ".;target\dependency\*" ConversationTranscription
Viktigt!
Se till att du anger SPEECH_KEY
miljövariablerna och SPEECH_REGION
. Om du inte anger dessa variabler misslyckas exemplet med ett felmeddelande.
Den transkriberade konversationen ska matas ut som text:
TRANSCRIBING: Text=good morning Speaker ID=Unknown
TRANSCRIBING: Text=good morning steve Speaker ID=Unknown
TRANSCRIBING: Text=good morning steve how Speaker ID=Guest-1
TRANSCRIBING: Text=good morning steve how are you doing Speaker ID=Guest-1
TRANSCRIBING: Text=good morning steve how are you doing today Speaker ID=Guest-1
TRANSCRIBED: Text=Good morning, Steve. How are you doing today? Speaker ID=Guest-1
TRANSCRIBING: Text=good morning katie i hope Speaker ID=Guest-2
TRANSCRIBING: Text=good morning katie i hope you're having a Speaker ID=Guest-2
TRANSCRIBING: Text=good morning katie i hope you're having a great Speaker ID=Guest-2
TRANSCRIBING: Text=good morning katie i hope you're having a great start to Speaker ID=Guest-2
TRANSCRIBING: Text=good morning katie i hope you're having a great start to your day Speaker ID=Guest-2
TRANSCRIBED: Text=Good morning, Katie. I hope you're having a great start to your day. Speaker ID=Guest-2
TRANSCRIBING: Text=have you tried Speaker ID=Unknown
TRANSCRIBING: Text=have you tried the latest Speaker ID=Unknown
TRANSCRIBING: Text=have you tried the latest real Speaker ID=Guest-1
TRANSCRIBING: Text=have you tried the latest real time Speaker ID=Guest-1
TRANSCRIBING: Text=have you tried the latest real time diarization Speaker ID=Guest-1
TRANSCRIBING: Text=have you tried the latest real time diarization in Speaker ID=Guest-1
TRANSCRIBING: Text=have you tried the latest real time diarization in microsoft Speaker ID=Guest-1
TRANSCRIBING: Text=have you tried the latest real time diarization in microsoft speech Speaker ID=Guest-1
TRANSCRIBING: Text=have you tried the latest real time diarization in microsoft speech service Speaker ID=Guest-1
TRANSCRIBING: Text=have you tried the latest real time diarization in microsoft speech service which Speaker ID=Guest-1
TRANSCRIBING: Text=have you tried the latest real time diarization in microsoft speech service which can Speaker ID=Guest-1
TRANSCRIBING: Text=have you tried the latest real time diarization in microsoft speech service which can tell you Speaker ID=Guest-1
TRANSCRIBING: Text=have you tried the latest real time diarization in microsoft speech service which can tell you who said Speaker ID=Guest-1
TRANSCRIBING: Text=have you tried the latest real time diarization in microsoft speech service which can tell you who said what Speaker ID=Guest-1
TRANSCRIBING: Text=have you tried the latest real time diarization in microsoft speech service which can tell you who said what in Speaker ID=Guest-1
TRANSCRIBING: Text=have you tried the latest real time diarization in microsoft speech service which can tell you who said what in real time Speaker ID=Guest-1
TRANSCRIBED: Text=Have you tried the latest real time diarization in Microsoft Speech Service which can tell you who said what in real time? Speaker ID=Guest-1
TRANSCRIBING: Text=not yet Speaker ID=Unknown
TRANSCRIBING: Text=not yet i Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch trans Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization function Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produces Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produces di Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is processed Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is processed is the Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is processed is the new Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is processed is the new feature Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is processed is the new feature able to Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is processed is the new feature able to di Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is processed is the new feature able to diarize in real Speaker ID=Guest-2
TRANSCRIBING: Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is processed is the new feature able to diarize in real time Speaker ID=Guest-2
TRANSCRIBED: Text=Not yet. I've been using the batch transcription with diarization functionality, but it produces diarization results after the whole audio is processed. Is the new feature able to diarize in real time? Speaker ID=Guest-2
TRANSCRIBING: Text=absolutely Speaker ID=Unknown
TRANSCRIBING: Text=absolutely i recom Speaker ID=Guest-1
TRANSCRIBING: Text=absolutely i recommend Speaker ID=Guest-1
TRANSCRIBING: Text=absolutely i recommend you Speaker ID=Guest-1
TRANSCRIBING: Text=absolutely i recommend you give it a try Speaker ID=Guest-1
TRANSCRIBED: Text=Absolutely, I recommend you give it a try. Speaker ID=Guest-1
TRANSCRIBING: Text=that's exc Speaker ID=Unknown
TRANSCRIBING: Text=that's exciting Speaker ID=Unknown
TRANSCRIBING: Text=that's exciting let me try Speaker ID=Guest-2
TRANSCRIBING: Text=that's exciting let me try it right now Speaker ID=Guest-2
TRANSCRIBED: Text=That's exciting. Let me try it right now. Speaker ID=Guest-2
Talare identifieras som Gäst-1, Gäst-2 och så vidare, beroende på antalet talare i konversationen.
Kommentar
Du kan se Speaker ID=Unknown
några av de tidiga mellanliggande resultaten när talaren ännu inte har identifierats. Utan mellanliggande diariseringsresultat (om du inte anger PropertyId.SpeechServiceResponse_DiarizeIntermediateResults
egenskapen till "true" är talar-ID:t alltid "Okänt".
Rensa resurser
Du kan använda Azure Portal- eller Azure-kommandoradsgränssnittet (CLI) för att ta bort den Speech-resurs som du skapade.
Referensdokumentation Paket (npm) | Ytterligare exempel på GitHub-bibliotekets källkod | |
I den här snabbstarten kör du ett program för tal till text-transkription med realtidsdiarisering. Diarization skiljer mellan de olika talare som deltar i konversationen. Taltjänsten tillhandahåller information om vilken talare som talade en viss del av transkriberat tal.
Talarinformationen ingår i resultatet i talar-ID-fältet. Talar-ID:t är en allmän identifierare som tilldelas varje konversationsdeltagare av tjänsten under igenkänningen eftersom olika talare identifieras från det angivna ljudinnehållet.
Dricks
Du kan prova tal till text i realtid i Speech Studio utan att registrera dig eller skriva någon kod. Speech Studio har dock ännu inte stöd för diarisering.
Förutsättningar
- En Azure-prenumeration. Du kan skapa en kostnadsfritt.
- Skapa en Speech-resurs i Azure Portal.
- Hämta resursnyckeln och regionen Speech. När speech-resursen har distribuerats väljer du Gå till resurs för att visa och hantera nycklar.
Konfigurera miljön
Installera Speech SDK för JavaScript för att konfigurera din miljö. Om du bara vill att paketnamnet ska installeras kör du npm install microsoft-cognitiveservices-speech-sdk
. Anvisningar för guidad installation finns i installationsguiden för SDK.
Ange miljövariabler
Du måste autentisera ditt program för att få åtkomst till Azure AI-tjänster. Den här artikeln visar hur du använder miljövariabler för att lagra dina autentiseringsuppgifter. Du kan sedan komma åt miljövariablerna från koden för att autentisera ditt program. För produktion använder du ett säkrare sätt att lagra och komma åt dina autentiseringsuppgifter.
Viktigt!
Vi rekommenderar Microsoft Entra-ID-autentisering med hanterade identiteter för Azure-resurser för att undvika att lagra autentiseringsuppgifter med dina program som körs i molnet.
Om du använder en API-nyckel lagrar du den på ett säkert sätt någon annanstans, till exempel i Azure Key Vault. Inkludera inte API-nyckeln direkt i koden och publicera den aldrig offentligt.
Mer information om säkerhet för AI-tjänster finns i Autentisera begäranden till Azure AI-tjänster.
Om du vill ange miljövariablerna för din Speech-resursnyckel och -region öppnar du ett konsolfönster och följer anvisningarna för operativsystemet och utvecklingsmiljön.
- Om du vill ange
SPEECH_KEY
miljövariabeln ersätter du din nyckel med en av nycklarna för resursen. - Om du vill ange
SPEECH_REGION
miljövariabeln ersätter du din region med en av regionerna för resursen.
setx SPEECH_KEY your-key
setx SPEECH_REGION your-region
Kommentar
Om du bara behöver komma åt miljövariablerna i den aktuella konsolen kan du ange miljövariabeln med set
i stället för setx
.
När du har lagt till miljövariablerna kan du behöva starta om alla program som behöver läsa miljövariablerna, inklusive konsolfönstret. Om du till exempel använder Visual Studio som redigerare startar du om Visual Studio innan du kör exemplet.
Implementera diarisering från fil med konversationstranskription
Följ de här stegen för att skapa ett nytt konsolprogram för konversationstranskription.
Öppna ett kommandotolksfönster där du vill ha det nya projektet och skapa en ny fil med namnet
ConversationTranscription.js
.Installera Speech SDK för JavaScript:
npm install microsoft-cognitiveservices-speech-sdk
Kopiera följande kod till
ConversationTranscription.js
:const fs = require("fs"); const sdk = require("microsoft-cognitiveservices-speech-sdk"); // This example requires environment variables named "SPEECH_KEY" and "SPEECH_REGION" const speechConfig = sdk.SpeechConfig.fromSubscription(process.env.SPEECH_KEY, process.env.SPEECH_REGION); function fromFile() { const filename = "katiesteve.wav"; let audioConfig = sdk.AudioConfig.fromWavFileInput(fs.readFileSync(filename)); let conversationTranscriber = new sdk.ConversationTranscriber(speechConfig, audioConfig); var pushStream = sdk.AudioInputStream.createPushStream(); fs.createReadStream(filename).on('data', function(arrayBuffer) { pushStream.write(arrayBuffer.slice()); }).on('end', function() { pushStream.close(); }); console.log("Transcribing from: " + filename); conversationTranscriber.sessionStarted = function(s, e) { console.log("SessionStarted event"); console.log("SessionId:" + e.sessionId); }; conversationTranscriber.sessionStopped = function(s, e) { console.log("SessionStopped event"); console.log("SessionId:" + e.sessionId); conversationTranscriber.stopTranscribingAsync(); }; conversationTranscriber.canceled = function(s, e) { console.log("Canceled event"); console.log(e.errorDetails); conversationTranscriber.stopTranscribingAsync(); }; conversationTranscriber.transcribed = function(s, e) { console.log("TRANSCRIBED: Text=" + e.result.text + " Speaker ID=" + e.result.speakerId); }; // Start conversation transcription conversationTranscriber.startTranscribingAsync( function () {}, function (err) { console.trace("err - starting transcription: " + err); } ); } fromFile();
Hämta exempelljudfilen eller använd din egen
.wav
fil. Ersättkatiesteve.wav
med sökvägen och namnet på.wav
filen.Programmet identifierar tal från flera deltagare i konversationen. Ljudfilen ska innehålla flera högtalare.
Om du vill ändra taligenkänningsspråket ersätter du
en-US
med ett annat språk som stöds. Till exempeles-ES
för spanska (Spanien). Standardspråket ären-US
om du inte anger något språk. Mer information om hur du identifierar ett av flera språk som kan talas finns i språkidentifiering.Kör det nya konsolprogrammet för att starta taligenkänning från en fil:
node.exe ConversationTranscription.js
Viktigt!
Se till att du anger SPEECH_KEY
miljövariablerna och SPEECH_REGION
. Om du inte anger dessa variabler misslyckas exemplet med ett felmeddelande.
Den transkriberade konversationen ska matas ut som text:
SessionStarted event
SessionId:E87AFBA483C2481985F6C9AF719F616B
TRANSCRIBED: Text=Good morning, Steve. Speaker ID=Unknown
TRANSCRIBED: Text=Good morning, Katie. Speaker ID=Unknown
TRANSCRIBED: Text=Have you tried the latest real time diarization in Microsoft Speech Service which can tell you who said what in real time? Speaker ID=Guest-1
TRANSCRIBED: Text=Not yet. I've been using the batch transcription with diarization functionality, but it produces diarization result until whole audio get processed. Speaker ID=Guest-2
TRANSCRIBED: Text=Is the new feature can diarize in real time? Speaker ID=Guest-2
TRANSCRIBED: Text=Absolutely. Speaker ID=Guest-1
TRANSCRIBED: Text=That's exciting. Let me try it right now. Speaker ID=Guest-2
Canceled event
undefined
SessionStopped event
SessionId:E87AFBA483C2481985F6C9AF719F616B
Talare identifieras som Gäst-1, Gäst-2 och så vidare, beroende på antalet talare i konversationen.
Rensa resurser
Du kan använda Azure Portal- eller Azure-kommandoradsgränssnittet (CLI) för att ta bort den Speech-resurs som du skapade.
Paket för referensdokumentation (nedladdning) | Ytterligare exempel på GitHub |
Speech SDK för Objective-C stöder konversationstranskription, men vi har ännu inte tagit med någon guide här. Välj ett annat programmeringsspråk för att komma igång och lära dig mer om begreppen, eller se Objective-C-referensen och exemplen som är länkade från början av den här artikeln.
Paket för referensdokumentation (nedladdning) | Ytterligare exempel på GitHub |
Speech SDK för Swift stöder konversationstranskription, men vi har ännu inte tagit med någon guide här. Välj ett annat programmeringsspråk för att komma igång och lära dig mer om begreppen, eller se Swift-referensen och exemplen som är länkade från början av den här artikeln.
Referensdokumentation Paket (PyPi) | Ytterligare exempel på GitHub |
I den här snabbstarten kör du ett program för tal till text-transkription med realtidsdiarisering. Diarization skiljer mellan de olika talare som deltar i konversationen. Taltjänsten tillhandahåller information om vilken talare som talade en viss del av transkriberat tal.
Talarinformationen ingår i resultatet i talar-ID-fältet. Talar-ID:t är en allmän identifierare som tilldelas varje konversationsdeltagare av tjänsten under igenkänningen eftersom olika talare identifieras från det angivna ljudinnehållet.
Dricks
Du kan prova tal till text i realtid i Speech Studio utan att registrera dig eller skriva någon kod. Speech Studio har dock ännu inte stöd för diarisering.
Förutsättningar
- En Azure-prenumeration. Du kan skapa en kostnadsfritt.
- Skapa en Speech-resurs i Azure Portal.
- Hämta resursnyckeln och regionen Speech. När speech-resursen har distribuerats väljer du Gå till resurs för att visa och hantera nycklar.
Konfigurera miljön
Speech SDK för Python är tillgänglig som en PyPI-modul (Python Package Index). Speech SDK för Python är kompatibelt med Windows, Linux och macOS.
- Du måste installera Microsoft Visual C++ Redistributable för Visual Studio 2015, 2017, 2019 och 2022 för din plattform. Att installera det här paketet för första gången kan kräva en omstart.
- I Linux måste du använda x64-målarkitekturen.
Installera en version av Python från 3.7 eller senare. Kontrollera först installationsguiden för SDK för ytterligare krav.
Ange miljövariabler
Du måste autentisera ditt program för att få åtkomst till Azure AI-tjänster. Den här artikeln visar hur du använder miljövariabler för att lagra dina autentiseringsuppgifter. Du kan sedan komma åt miljövariablerna från koden för att autentisera ditt program. För produktion använder du ett säkrare sätt att lagra och komma åt dina autentiseringsuppgifter.
Viktigt!
Vi rekommenderar Microsoft Entra-ID-autentisering med hanterade identiteter för Azure-resurser för att undvika att lagra autentiseringsuppgifter med dina program som körs i molnet.
Om du använder en API-nyckel lagrar du den på ett säkert sätt någon annanstans, till exempel i Azure Key Vault. Inkludera inte API-nyckeln direkt i koden och publicera den aldrig offentligt.
Mer information om säkerhet för AI-tjänster finns i Autentisera begäranden till Azure AI-tjänster.
Om du vill ange miljövariablerna för din Speech-resursnyckel och -region öppnar du ett konsolfönster och följer anvisningarna för operativsystemet och utvecklingsmiljön.
- Om du vill ange
SPEECH_KEY
miljövariabeln ersätter du din nyckel med en av nycklarna för resursen. - Om du vill ange
SPEECH_REGION
miljövariabeln ersätter du din region med en av regionerna för resursen.
setx SPEECH_KEY your-key
setx SPEECH_REGION your-region
Kommentar
Om du bara behöver komma åt miljövariablerna i den aktuella konsolen kan du ange miljövariabeln med set
i stället för setx
.
När du har lagt till miljövariablerna kan du behöva starta om alla program som behöver läsa miljövariablerna, inklusive konsolfönstret. Om du till exempel använder Visual Studio som redigerare startar du om Visual Studio innan du kör exemplet.
Implementera diarisering från fil med konversationstranskription
Följ de här stegen för att skapa ett nytt konsolprogram.
Öppna ett kommandotolksfönster där du vill ha det nya projektet och skapa en ny fil med namnet
conversation_transcription.py
.Kör det här kommandot för att installera Speech SDK:
pip install azure-cognitiveservices-speech
Kopiera följande kod till
conversation_transcription.py
:import os import time import azure.cognitiveservices.speech as speechsdk def conversation_transcriber_recognition_canceled_cb(evt: speechsdk.SessionEventArgs): print('Canceled event') def conversation_transcriber_session_stopped_cb(evt: speechsdk.SessionEventArgs): print('SessionStopped event') def conversation_transcriber_transcribed_cb(evt: speechsdk.SpeechRecognitionEventArgs): print('\nTRANSCRIBED:') if evt.result.reason == speechsdk.ResultReason.RecognizedSpeech: print('\tText={}'.format(evt.result.text)) print('\tSpeaker ID={}\n'.format(evt.result.speaker_id)) elif evt.result.reason == speechsdk.ResultReason.NoMatch: print('\tNOMATCH: Speech could not be TRANSCRIBED: {}'.format(evt.result.no_match_details)) def conversation_transcriber_transcribing_cb(evt: speechsdk.SpeechRecognitionEventArgs): print('TRANSCRIBING:') print('\tText={}'.format(evt.result.text)) print('\tSpeaker ID={}'.format(evt.result.speaker_id)) def conversation_transcriber_session_started_cb(evt: speechsdk.SessionEventArgs): print('SessionStarted event') def recognize_from_file(): # This example requires environment variables named "SPEECH_KEY" and "SPEECH_REGION" speech_config = speechsdk.SpeechConfig(subscription=os.environ.get('SPEECH_KEY'), region=os.environ.get('SPEECH_REGION')) speech_config.speech_recognition_language="en-US" speech_config.set_property(property_id=speechsdk.PropertyId.SpeechServiceResponse_DiarizeIntermediateResults, value='true') audio_config = speechsdk.audio.AudioConfig(filename="katiesteve.wav") conversation_transcriber = speechsdk.transcription.ConversationTranscriber(speech_config=speech_config, audio_config=audio_config) transcribing_stop = False def stop_cb(evt: speechsdk.SessionEventArgs): #"""callback that signals to stop continuous recognition upon receiving an event `evt`""" print('CLOSING on {}'.format(evt)) nonlocal transcribing_stop transcribing_stop = True # Connect callbacks to the events fired by the conversation transcriber conversation_transcriber.transcribed.connect(conversation_transcriber_transcribed_cb) conversation_transcriber.transcribing.connect(conversation_transcriber_transcribing_cb) conversation_transcriber.session_started.connect(conversation_transcriber_session_started_cb) conversation_transcriber.session_stopped.connect(conversation_transcriber_session_stopped_cb) conversation_transcriber.canceled.connect(conversation_transcriber_recognition_canceled_cb) # stop transcribing on either session stopped or canceled events conversation_transcriber.session_stopped.connect(stop_cb) conversation_transcriber.canceled.connect(stop_cb) conversation_transcriber.start_transcribing_async() # Waits for completion. while not transcribing_stop: time.sleep(.5) conversation_transcriber.stop_transcribing_async() # Main try: recognize_from_file() except Exception as err: print("Encountered exception. {}".format(err))
Hämta exempelljudfilen eller använd din egen
.wav
fil. Ersättkatiesteve.wav
med sökvägen och namnet på.wav
filen.Programmet identifierar tal från flera deltagare i konversationen. Ljudfilen ska innehålla flera högtalare.
Om du vill ändra taligenkänningsspråket ersätter du
en-US
med ett annat språk som stöds. Till exempeles-ES
för spanska (Spanien). Standardspråket ären-US
om du inte anger något språk. Mer information om hur du identifierar ett av flera språk som kan talas finns i språkidentifiering.Kör det nya konsolprogrammet för att starta konversationstranskription:
python conversation_transcription.py
Viktigt!
Se till att du anger SPEECH_KEY
miljövariablerna och SPEECH_REGION
. Om du inte anger dessa variabler misslyckas exemplet med ett felmeddelande.
Den transkriberade konversationen ska matas ut som text:
TRANSCRIBING:
Text=good morning
Speaker ID=Unknown
TRANSCRIBING:
Text=good morning steve
Speaker ID=Unknown
TRANSCRIBING:
Text=good morning steve how are
Speaker ID=Guest-1
TRANSCRIBING:
Text=good morning steve how are you doing today
Speaker ID=Guest-1
TRANSCRIBED:
Text=Good morning, Steve. How are you doing today?
Speaker ID=Guest-1
TRANSCRIBING:
Text=good morning katie
Speaker ID=Unknown
TRANSCRIBING:
Text=good morning katie i hope you're having a
Speaker ID=Guest-2
TRANSCRIBING:
Text=good morning katie i hope you're having a great start to
Speaker ID=Guest-2
TRANSCRIBING:
Text=good morning katie i hope you're having a great start to your day
Speaker ID=Guest-2
TRANSCRIBED:
Text=Good morning, Katie. I hope you're having a great start to your day.
Speaker ID=Guest-2
TRANSCRIBING:
Text=have you
Speaker ID=Unknown
TRANSCRIBING:
Text=have you tried
Speaker ID=Unknown
TRANSCRIBING:
Text=have you tried the latest
Speaker ID=Unknown
TRANSCRIBING:
Text=have you tried the latest real
Speaker ID=Guest-1
TRANSCRIBING:
Text=have you tried the latest real time
Speaker ID=Guest-1
TRANSCRIBING:
Text=have you tried the latest real time diarization
Speaker ID=Guest-1
TRANSCRIBING:
Text=have you tried the latest real time diarization in
Speaker ID=Guest-1
TRANSCRIBING:
Text=have you tried the latest real time diarization in microsoft
Speaker ID=Guest-1
TRANSCRIBING:
Text=have you tried the latest real time diarization in microsoft speech
Speaker ID=Guest-1
TRANSCRIBING:
Text=have you tried the latest real time diarization in microsoft speech service
Speaker ID=Guest-1
TRANSCRIBING:
Text=have you tried the latest real time diarization in microsoft speech service which
Speaker ID=Guest-1
TRANSCRIBING:
Text=have you tried the latest real time diarization in microsoft speech service which can
Speaker ID=Guest-1
TRANSCRIBING:
Text=have you tried the latest real time diarization in microsoft speech service which can tell you
Speaker ID=Guest-1
TRANSCRIBING:
Text=have you tried the latest real time diarization in microsoft speech service which can tell you who said
Speaker ID=Guest-1
TRANSCRIBING:
Text=have you tried the latest real time diarization in microsoft speech service which can tell you who said what
Speaker ID=Guest-1
TRANSCRIBING:
Text=have you tried the latest real time diarization in microsoft speech service which can tell you who said what in
Speaker ID=Guest-1
TRANSCRIBING:
Text=have you tried the latest real time diarization in microsoft speech service which can tell you who said what in real time
Speaker ID=Guest-1
TRANSCRIBED:
Text=Have you tried the latest real time diarization in Microsoft Speech Service which can tell you who said what in real time?
Speaker ID=Guest-1
TRANSCRIBING:
Text=not yet
Speaker ID=Unknown
TRANSCRIBING:
Text=not yet i
Speaker ID=Guest-2
TRANSCRIBING:
Text=not yet i've been using
Speaker ID=Guest-2
TRANSCRIBING:
Text=not yet i've been using the
Speaker ID=Guest-2
TRANSCRIBING:
Text=not yet i've been using the batch
Speaker ID=Guest-2
TRANSCRIBING:
Text=not yet i've been using the batch trans
Speaker ID=Guest-2
TRANSCRIBING:
Text=not yet i've been using the batch transcription with
Speaker ID=Guest-2
TRANSCRIBING:
Text=not yet i've been using the batch transcription with diarization
Speaker ID=Guest-2
TRANSCRIBING:
Text=not yet i've been using the batch transcription with diarization function
Speaker ID=Guest-2
TRANSCRIBING:
Text=not yet i've been using the batch transcription with diarization functionality
Speaker ID=Guest-2
TRANSCRIBING:
Text=not yet i've been using the batch transcription with diarization functionality but
Speaker ID=Guest-2
TRANSCRIBING:
Text=not yet i've been using the batch transcription with diarization functionality but it
Speaker ID=Guest-2
TRANSCRIBING:
Text=not yet i've been using the batch transcription with diarization functionality but it produces
Speaker ID=Guest-2
TRANSCRIBING:
Text=not yet i've been using the batch transcription with diarization functionality but it produces di
Speaker ID=Guest-2
TRANSCRIBING:
Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization
Speaker ID=Guest-2
TRANSCRIBING:
Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results
Speaker ID=Guest-2
TRANSCRIBING:
Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after
Speaker ID=Guest-2
TRANSCRIBING:
Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the
Speaker ID=Guest-2
TRANSCRIBING:
Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole
Speaker ID=Guest-2
TRANSCRIBING:
Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio
Speaker ID=Guest-2
TRANSCRIBING:
Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is
Speaker ID=Guest-2
TRANSCRIBING:
Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is processed
Speaker ID=Guest-2
TRANSCRIBING:
Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is processed is the
Speaker ID=Guest-2
TRANSCRIBING:
Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is processed is the new
Speaker ID=Guest-2
TRANSCRIBING:
Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is processed is the new feature
Speaker ID=Guest-2
TRANSCRIBING:
Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is processed is the new feature able to
Speaker ID=Guest-2
TRANSCRIBING:
Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is processed is the new feature able to di
Speaker ID=Guest-2
TRANSCRIBING:
Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is processed is the new feature able to diarize in real
Speaker ID=Guest-2
TRANSCRIBING:
Text=not yet i've been using the batch transcription with diarization functionality but it produces diarization results after the whole audio is processed is the new feature able to diarize in real time
Speaker ID=Guest-2
TRANSCRIBED:
Text=Not yet. I've been using the batch transcription with diarization functionality, but it produces diarization results after the whole audio is processed. Is the new feature able to diarize in real time?
Speaker ID=Guest-2
TRANSCRIBING:
Text=absolutely
Speaker ID=Unknown
TRANSCRIBING:
Text=absolutely i
Speaker ID=Unknown
TRANSCRIBING:
Text=absolutely i recom
Speaker ID=Guest-1
TRANSCRIBING:
Text=absolutely i recommend
Speaker ID=Guest-1
TRANSCRIBING:
Text=absolutely i recommend you give it a try
Speaker ID=Guest-1
TRANSCRIBED:
Text=Absolutely, I recommend you give it a try.
Speaker ID=Guest-1
TRANSCRIBING:
Text=that's exc
Speaker ID=Unknown
TRANSCRIBING:
Text=that's exciting
Speaker ID=Unknown
TRANSCRIBING:
Text=that's exciting let me
Speaker ID=Guest-2
TRANSCRIBING:
Text=that's exciting let me try
Speaker ID=Guest-2
TRANSCRIBING:
Text=that's exciting let me try it right now
Speaker ID=Guest-2
TRANSCRIBED:
Text=That's exciting. Let me try it right now.
Speaker ID=Guest-2
Talare identifieras som Gäst-1, Gäst-2 och så vidare, beroende på antalet talare i konversationen.
Kommentar
Du kan se Speaker ID=Unknown
några av de tidiga mellanliggande resultaten när talaren ännu inte har identifierats. Utan mellanliggande diariseringsresultat (om du inte anger PropertyId.SpeechServiceResponse_DiarizeIntermediateResults
egenskapen till "true" är talar-ID:t alltid "Okänt".
Rensa resurser
Du kan använda Azure Portal- eller Azure-kommandoradsgränssnittet (CLI) för att ta bort den Speech-resurs som du skapade.
Tal till text REST API-referens Tal till text REST API för kort ljudreferens | Ytterligare exempel på GitHub |
REST-API:et stöder inte konversationstranskription. Välj ett annat programmeringsspråk eller verktyg överst på den här sidan.
Speech CLI stöder inte konversationstranskription. Välj ett annat programmeringsspråk eller verktyg överst på den här sidan.