Compartilhar via


Início Rápido: criar diarização em tempo real

Documentação de referência | Pacotes (NuGet) | Exemplos adicionais no GitHub

Neste início rápido, você executará um aplicativo para transcrição de conversão de fala em texto com diarização em tempo real. A diarização distingue entre os diferentes palestrantes que participam da conversa. O Serviço de fala fornece informações sobre qual locutor estava falando uma parte específica da fala transcrita.

As informações do locutor são incluídas no resultado no campo ID do locutor. A ID do locutor é um identificador genérico atribuído a cada participante da conversa pelo serviço durante o reconhecimento, pois diferentes locutores estão sendo identificados a partir do conteúdo de áudio fornecido.

Dica

Você pode experimentar o reconhecimento de fala em tempo real no Speech Studio sem inscrever-se ou gravar qualquer código. No entanto, o Speech Studio ainda não dá suporte à diarização.

Pré-requisitos

Configurar o ambiente

O SDK de Fala está disponível como um pacote NuGet e implementa o .NET Standard 2.0. Você instalará o SDK de Fala posteriormente neste guia, mas primeiro verifique o guia de instalação do SDK para conhecer os demais requisitos.

Definir variáveis de ambiente

O aplicativo deverá ser autenticado para acessar os recursos dos serviços de IA do Azure. Para produção, use uma maneira segura de armazenar e acessar suas credenciais. Por exemplo, após obter uma chave para o recurso Fala, grave-a em uma nova variável de ambiente no computador local que executa o aplicativo.

Dica

Não inclua a chave diretamente no código e nunca a divulgue publicamente. Confira Segurança dos serviços de IA do Azure para obter mais opções de autenticação, como o Azure Key Vault.

Para definir a variável de ambiente da chave de recurso de Fala, abra uma janela do console e siga as instruções para o seu sistema operacional e o ambiente de desenvolvimento.

  • Para definir a variável de ambiente SPEECH_KEY, substitua your-key por uma das chaves do recurso.
  • Para definir a variável de ambiente SPEECH_REGION, substitua your-region por uma das regiões do recurso.
setx SPEECH_KEY your-key
setx SPEECH_REGION your-region

Observação

Se precisar acessar as variáveis de ambiente apenas no console atual, você pode definir a variável de ambiente com set em vez de setx.

Depois de adicionar as variáveis de ambiente, talvez seja necessário reiniciar todos os programas que precisem ler a variável de ambiente, inclusive a janela do console. Por exemplo, se estiver usando o Visual Studio como editor, reinicie o Visual Studio antes de executar o exemplo.

Implementar a diarização do arquivo com transcrição de conversa

Siga estas etapas para criar um aplicativo de console e instalar o SDK de Fala.

  1. Abra uma janela do prompt de comando na pasta em que você deseja o novo projeto. Execute este comando para criar um aplicativo de console com a CLI do .NET.

    dotnet new console
    

    Esse comando cria o arquivo Program.cs no diretório do projeto.

  2. Instale o SDK de Fala em seu novo projeto com a CLI do .NET.

    dotnet add package Microsoft.CognitiveServices.Speech
    
  3. Substitua o conteúdo de Program.cs pelo seguinte código.

    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";
    
            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}");
                    };
    
                    conversationTranscriber.Transcribed += (s, e) =>
                    {
                        if (e.Result.Reason == ResultReason.RecognizedSpeech)
                        {
                            Console.WriteLine($"TRANSCRIBED: Text={e.Result.Text} Speaker ID={e.Result.SpeakerId}");
                        }
                        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();
                }
            }
        }
    }
    
  4. Obtenha o arquivo de áudio de exemplo ou use seu próprio arquivo .wav. Substitua katiesteve.wav pelo caminho e pelo nome do arquivo .wav.

    O aplicativo reconhece a fala de vários participantes na conversa. Seu arquivo de áudio deve conter vários locutores.

  5. Para alterar o idioma de reconhecimento de fala, substitua en-US por outro en-US. Por exemplo: es-ES para espanhol (Espanha). O idioma padrão é en-US se você não especificar um idioma. Para obter detalhes sobre como identificar um dos vários idiomas que podem ser falados, consulte identificação do idioma.

  6. Execute o seu aplicativo de console para iniciar a transcrição da conversa:

    dotnet run
    

Importante

Certifique-se de definir SPEECH_KEY e as SPEECH_REGIONvariáveis de ambiente. Se você não definir essas variáveis, a amostra falhará com uma mensagem de erro.

A conversa transcrita produzirá uma saída de texto:

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
TRANSRIBED: 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: Reason=EndOfStream

Os locutores são identificados como Convidado-1, Convidado-2 e assim por diante, dependendo do número de locutores na conversa.

Limpar os recursos

Você pode usar o portal do Azure ou a CLI (interface de linha de comando) do Azure para remover o recurso de fala que você criou.

Documentação de referência | Pacotes (NuGet) | Exemplos adicionais no GitHub

Neste início rápido, você executará um aplicativo para transcrição de conversão de fala em texto com diarização em tempo real. A diarização distingue entre os diferentes palestrantes que participam da conversa. O Serviço de fala fornece informações sobre qual locutor estava falando uma parte específica da fala transcrita.

As informações do locutor são incluídas no resultado no campo ID do locutor. A ID do locutor é um identificador genérico atribuído a cada participante da conversa pelo serviço durante o reconhecimento, pois diferentes locutores estão sendo identificados a partir do conteúdo de áudio fornecido.

Dica

Você pode experimentar o reconhecimento de fala em tempo real no Speech Studio sem inscrever-se ou gravar qualquer código. No entanto, o Speech Studio ainda não dá suporte à diarização.

Pré-requisitos

Configurar o ambiente

O SDK de Fala está disponível como um pacote NuGet e implementa o .NET Standard 2.0. Você instalará o SDK de Fala posteriormente neste guia, mas primeiro verifique o guia de instalação do SDK para conhecer os demais requisitos.

Definir variáveis de ambiente

O aplicativo deverá ser autenticado para acessar os recursos dos serviços de IA do Azure. Para produção, use uma maneira segura de armazenar e acessar suas credenciais. Por exemplo, após obter uma chave para o recurso Fala, grave-a em uma nova variável de ambiente no computador local que executa o aplicativo.

Dica

Não inclua a chave diretamente no código e nunca a divulgue publicamente. Confira Segurança dos serviços de IA do Azure para obter mais opções de autenticação, como o Azure Key Vault.

Para definir a variável de ambiente da chave de recurso de Fala, abra uma janela do console e siga as instruções para o seu sistema operacional e o ambiente de desenvolvimento.

  • Para definir a variável de ambiente SPEECH_KEY, substitua your-key por uma das chaves do recurso.
  • Para definir a variável de ambiente SPEECH_REGION, substitua your-region por uma das regiões do recurso.
setx SPEECH_KEY your-key
setx SPEECH_REGION your-region

Observação

Se precisar acessar as variáveis de ambiente apenas no console atual, você pode definir a variável de ambiente com set em vez de setx.

Depois de adicionar as variáveis de ambiente, talvez seja necessário reiniciar todos os programas que precisem ler a variável de ambiente, inclusive a janela do console. Por exemplo, se estiver usando o Visual Studio como editor, reinicie o Visual Studio antes de executar o exemplo.

Implementar a diarização do arquivo com transcrição de conversa

Siga estas etapas para criar um aplicativo de console e instalar o SDK de Fala.

  1. Crie um novo projeto de console do C++ no Visual Studio Community 2022 chamado ConversationTranscription.

  2. Selecione Ferramentas>Gerenciador de pacotes Nuget>Console do gerenciador de pacotes. No Console do gerenciador de pacotes, execute este comando:

    Install-Package Microsoft.CognitiveServices.Speech
    
  3. Substitua o conteúdo de ConversationTranscription.cpp pelo seguinte código.

    #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->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;
            });
    
        conversationTranscriber->Transcribed.Connect([](const ConversationTranscriptionEventArgs& e)
            {
                if (e.Result->Reason == ResultReason::RecognizedSpeech)
                {
                    std::cout << "TRANSCRIBED: Text=" << e.Result->Text << std::endl;
                    std::cout << "Speaker ID=" << e.Result->SpeakerId << 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
    }
    
  4. Obtenha o arquivo de áudio de exemplo ou use seu próprio arquivo .wav. Substitua katiesteve.wav pelo caminho e pelo nome do arquivo .wav.

    O aplicativo reconhece a fala de vários participantes na conversa. Seu arquivo de áudio deve conter vários locutores.

  5. Para alterar o idioma de reconhecimento de fala, substitua en-US por outro en-US. Por exemplo: es-ES para espanhol (Espanha). O idioma padrão é en-US se você não especificar um idioma. Para obter detalhes sobre como identificar um dos vários idiomas que podem ser falados, consulte identificação do idioma.

  6. Crie e execute seu aplicativo para iniciar a transcrição de conversas:

    Importante

    Certifique-se de definir SPEECH_KEY e as SPEECH_REGIONvariáveis de ambiente. Se você não definir essas variáveis, a amostra falhará com uma mensagem de erro.

A conversa transcrita produzirá uma saída de texto:

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
TRANSRIBED: 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: Reason=EndOfStream

Os locutores são identificados como Convidado-1, Convidado-2 e assim por diante, dependendo do número de locutores na conversa.

Limpar os recursos

Você pode usar o portal do Azure ou a CLI (interface de linha de comando) do Azure para remover o recurso de fala que você criou.

Documentação de referência | Pacotes (Go) | Exemplos adicionais no GitHub

O SDK de Fala para Go não dá suporte à transcrição de conversas. Selecione outra linguagem de programação ou a referência do Go e exemplos vinculados no início deste artigo.

Documentação de referência | Amostras adicionais no GitHub

Neste início rápido, você executará um aplicativo para transcrição de conversão de fala em texto com diarização em tempo real. A diarização distingue entre os diferentes palestrantes que participam da conversa. O Serviço de fala fornece informações sobre qual locutor estava falando uma parte específica da fala transcrita.

As informações do locutor são incluídas no resultado no campo ID do locutor. A ID do locutor é um identificador genérico atribuído a cada participante da conversa pelo serviço durante o reconhecimento, pois diferentes locutores estão sendo identificados a partir do conteúdo de áudio fornecido.

Dica

Você pode experimentar o reconhecimento de fala em tempo real no Speech Studio sem inscrever-se ou gravar qualquer código. No entanto, o Speech Studio ainda não dá suporte à diarização.

Pré-requisitos

Configurar o ambiente

Para configurar o seu ambiente, instale o SDK de Fala. O exemplo deste guia de início rápido funciona com o Runtime Java.

  1. Instale o Apache Maven. Em seguida, execute mvn -v para confirmar a instalação bem-sucedida.

  2. Crie um arquivo pom.xml na raiz do projeto e copie nele o seguinte:

    <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.38.0</version>
            </dependency>
        </dependencies>
    </project>
    
  3. Instale o SDK de Fala e as dependências.

    mvn clean dependency:copy-dependencies
    

Definir variáveis de ambiente

O aplicativo deverá ser autenticado para acessar os recursos dos serviços de IA do Azure. Para produção, use uma maneira segura de armazenar e acessar suas credenciais. Por exemplo, após obter uma chave para o recurso Fala, grave-a em uma nova variável de ambiente no computador local que executa o aplicativo.

Dica

Não inclua a chave diretamente no código e nunca a divulgue publicamente. Confira Segurança dos serviços de IA do Azure para obter mais opções de autenticação, como o Azure Key Vault.

Para definir a variável de ambiente da chave de recurso de Fala, abra uma janela do console e siga as instruções para o seu sistema operacional e o ambiente de desenvolvimento.

  • Para definir a variável de ambiente SPEECH_KEY, substitua your-key por uma das chaves do recurso.
  • Para definir a variável de ambiente SPEECH_REGION, substitua your-region por uma das regiões do recurso.
setx SPEECH_KEY your-key
setx SPEECH_REGION your-region

Observação

Se precisar acessar as variáveis de ambiente apenas no console atual, você pode definir a variável de ambiente com set em vez de setx.

Depois de adicionar as variáveis de ambiente, talvez seja necessário reiniciar todos os programas que precisem ler a variável de ambiente, inclusive a janela do console. Por exemplo, se estiver usando o Visual Studio como editor, reinicie o Visual Studio antes de executar o exemplo.

Implementar a diarização do arquivo com transcrição de conversa

Siga estas etapas para criar um aplicativo de console para transcrição de conversa.

  1. Crie um novo arquivo chamado ConversationTranscription.java no mesmo diretório raiz do projeto.

  2. Copie o seguinte código dentro de 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");
    
            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());
                });
    
                conversationTranscriber.transcribed.addEventListener((s, e) -> {
                    if (e.getResult().getReason() == ResultReason.RecognizedSpeech) {
                        System.out.println("TRANSCRIBED: Text=" + e.getResult().getText() + " Speaker ID=" + e.getResult().getSpeakerId() );
                    }
                    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);
        }
    }
    
  3. Obtenha o arquivo de áudio de exemplo ou use o seu próprio arquivo .wav. Substitua katiesteve.wav pelo caminho e pelo nome do arquivo .wav.

    O aplicativo reconhece a fala de vários participantes na conversa. Seu arquivo de áudio deve conter vários locutores.

  4. Para alterar o idioma de reconhecimento de fala, substitua en-US por outro en-US. Por exemplo: es-ES para espanhol (Espanha). O idioma padrão é en-US se você não especificar um idioma. Para obter detalhes sobre como identificar um dos vários idiomas que podem ser falados, consulte identificação do idioma.

  5. Execute seu novo aplicativo de console para iniciar a transcrição de conversas:

    javac ConversationTranscription.java -cp ".;target\dependency\*"
    java -cp ".;target\dependency\*" ConversationTranscription
    

Importante

Certifique-se de definir SPEECH_KEY e as SPEECH_REGIONvariáveis de ambiente. Se você não definir essas variáveis, a amostra falhará com uma mensagem de erro.

A conversa transcrita produzirá uma saída de texto:

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
TRANSRIBED: 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: Reason=EndOfStream

Os locutores são identificados como Convidado-1, Convidado-2 e assim por diante, dependendo do número de locutores na conversa.

Limpar os recursos

Você pode usar o portal do Azure ou a CLI (interface de linha de comando) do Azure para remover o recurso de fala que você criou.

Documentação de referência | Pacote (npm) | Exemplos adicionais no GitHub | Código-fonte de biblioteca

Neste início rápido, você executará um aplicativo para transcrição de conversão de fala em texto com diarização em tempo real. A diarização distingue entre os diferentes palestrantes que participam da conversa. O Serviço de fala fornece informações sobre qual locutor estava falando uma parte específica da fala transcrita.

As informações do locutor são incluídas no resultado no campo ID do locutor. A ID do locutor é um identificador genérico atribuído a cada participante da conversa pelo serviço durante o reconhecimento, pois diferentes locutores estão sendo identificados a partir do conteúdo de áudio fornecido.

Dica

Você pode experimentar o reconhecimento de fala em tempo real no Speech Studio sem inscrever-se ou gravar qualquer código. No entanto, o Speech Studio ainda não dá suporte à diarização.

Pré-requisitos

Configurar o ambiente

Para configurar o seu ambiente, instale o SDK de Fala para JavaScript. Se você quiser apenas o nome do pacote a ser instalado, execute npm install microsoft-cognitiveservices-speech-sdk. Para obter instruções de instalação guiadas, confira o Guia de instalação do SDK.

Definir variáveis de ambiente

O aplicativo deverá ser autenticado para acessar os recursos dos serviços de IA do Azure. Para produção, use uma maneira segura de armazenar e acessar suas credenciais. Por exemplo, após obter uma chave para o recurso Fala, grave-a em uma nova variável de ambiente no computador local que executa o aplicativo.

Dica

Não inclua a chave diretamente no código e nunca a divulgue publicamente. Confira Segurança dos serviços de IA do Azure para obter mais opções de autenticação, como o Azure Key Vault.

Para definir a variável de ambiente da chave de recurso de Fala, abra uma janela do console e siga as instruções para o seu sistema operacional e o ambiente de desenvolvimento.

  • Para definir a variável de ambiente SPEECH_KEY, substitua your-key por uma das chaves do recurso.
  • Para definir a variável de ambiente SPEECH_REGION, substitua your-region por uma das regiões do recurso.
setx SPEECH_KEY your-key
setx SPEECH_REGION your-region

Observação

Se precisar acessar as variáveis de ambiente apenas no console atual, você pode definir a variável de ambiente com set em vez de setx.

Depois de adicionar as variáveis de ambiente, talvez seja necessário reiniciar todos os programas que precisem ler a variável de ambiente, inclusive a janela do console. Por exemplo, se estiver usando o Visual Studio como editor, reinicie o Visual Studio antes de executar o exemplo.

Implementar a diarização do arquivo com transcrição de conversa

Siga estas etapas para criar um novo aplicativo de console para transcrição de conversas.

  1. Abra uma janela do prompt de comando em que você deseja o novo projeto e crie um novo arquivo chamado ConversationTranscription.js.

  2. Instale o SDK de Fala para JavaScript:

    npm install microsoft-cognitiveservices-speech-sdk
    
  3. Copie o seguinte código dentro de 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();
    
  4. Obtenha o arquivo de áudio de exemplo ou use o seu próprio arquivo .wav. Substitua katiesteve.wav pelo caminho e pelo nome do arquivo .wav.

    O aplicativo reconhece a fala de vários participantes na conversa. Seu arquivo de áudio deve conter vários locutores.

  5. Para alterar o idioma de reconhecimento de fala, substitua en-US por outro en-US. Por exemplo: es-ES para espanhol (Espanha). O idioma padrão é en-US se você não especificar um idioma. Para obter detalhes sobre como identificar um dos vários idiomas que podem ser falados, consulte identificação do idioma.

  6. Execute seu novo aplicativo de console para iniciar o reconhecimento de fala a partir de um arquivo:

    node.exe ConversationTranscription.js
    

Importante

Certifique-se de definir SPEECH_KEY e as SPEECH_REGIONvariáveis de ambiente. Se você não definir essas variáveis, a amostra falhará com uma mensagem de erro.

A conversa transcrita produzirá uma saída de texto:

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

Os locutores são identificados como Convidado-1, Convidado-2 e assim por diante, dependendo do número de locutores na conversa.

Limpar os recursos

Você pode usar o portal do Azure ou a CLI (interface de linha de comando) do Azure para remover o recurso de fala que você criou.

Documentação de referência | Pacotes (Download) | Exemplos adicionais no GitHub

O SDK de Fala para Objective-C dá um suporte à transcrição de conversas, mas ainda não incluímos um guia a respeito. Selecione outra linguagem de programação para começar e saber mais sobre os conceitos ou confira a referência e exemplos em Objective-C vinculados no início deste artigo.

Documentação de referência | Pacotes (Download) | Exemplos adicionais no GitHub

O SDK de Fala para Swift dá um suporte à transcrição de conversas, mas ainda não incluímos um guia a respeito. Selecione outra linguagem de programação para começar e saber mais sobre os conceitos ou confira a referência e exemplos em Swift vinculados no início deste artigo.

Documentação de referência | Pacotes (PyPi) | Exemplos adicionais no GitHub

Neste início rápido, você executará um aplicativo para transcrição de conversão de fala em texto com diarização em tempo real. A diarização distingue entre os diferentes palestrantes que participam da conversa. O Serviço de fala fornece informações sobre qual locutor estava falando uma parte específica da fala transcrita.

As informações do locutor são incluídas no resultado no campo ID do locutor. A ID do locutor é um identificador genérico atribuído a cada participante da conversa pelo serviço durante o reconhecimento, pois diferentes locutores estão sendo identificados a partir do conteúdo de áudio fornecido.

Dica

Você pode experimentar o reconhecimento de fala em tempo real no Speech Studio sem inscrever-se ou gravar qualquer código. No entanto, o Speech Studio ainda não dá suporte à diarização.

Pré-requisitos

Configurar o ambiente

O SDK de fala para Python está disponível como um módulo PyPI (índice de pacote do Python). O SDK de Fala para Python é compatível com Windows, Linux e macOS.

Instale uma versão do Python 3.7 ou posterior. Primeiro, verifique o Guia de instalação do SDK para conhecer os demais requisitos.

Definir variáveis de ambiente

O aplicativo deverá ser autenticado para acessar os recursos dos serviços de IA do Azure. Para produção, use uma maneira segura de armazenar e acessar suas credenciais. Por exemplo, após obter uma chave para o recurso Fala, grave-a em uma nova variável de ambiente no computador local que executa o aplicativo.

Dica

Não inclua a chave diretamente no código e nunca a divulgue publicamente. Confira Segurança dos serviços de IA do Azure para obter mais opções de autenticação, como o Azure Key Vault.

Para definir a variável de ambiente da chave de recurso de Fala, abra uma janela do console e siga as instruções para o seu sistema operacional e o ambiente de desenvolvimento.

  • Para definir a variável de ambiente SPEECH_KEY, substitua your-key por uma das chaves do recurso.
  • Para definir a variável de ambiente SPEECH_REGION, substitua your-region por uma das regiões do recurso.
setx SPEECH_KEY your-key
setx SPEECH_REGION your-region

Observação

Se precisar acessar as variáveis de ambiente apenas no console atual, você pode definir a variável de ambiente com set em vez de setx.

Depois de adicionar as variáveis de ambiente, talvez seja necessário reiniciar todos os programas que precisem ler a variável de ambiente, inclusive a janela do console. Por exemplo, se estiver usando o Visual Studio como editor, reinicie o Visual Studio antes de executar o exemplo.

Implementar a diarização do arquivo com transcrição de conversa

Siga estas etapas para criar um novo aplicativo de console.

  1. Abra uma janela do prompt de comando em que você deseja o novo projeto e crie um novo arquivo chamado conversation_transcription.py.

  2. Execute este comando para instalar o SDK de Fala:

    pip install azure-cognitiveservices-speech
    
  3. Copie o seguinte código dentro de 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('TRANSCRIBED:')
        if evt.result.reason == speechsdk.ResultReason.RecognizedSpeech:
            print('\tText={}'.format(evt.result.text))
            print('\tSpeaker ID={}'.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_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"
    
        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.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))
    
  4. Obtenha o arquivo de áudio de exemplo ou use o seu próprio arquivo .wav. Substitua katiesteve.wav pelo caminho e pelo nome do arquivo .wav.

    O aplicativo reconhece a fala de vários participantes na conversa. Seu arquivo de áudio deve conter vários locutores.

  5. Para alterar o idioma de reconhecimento de fala, substitua en-US por outro en-US. Por exemplo: es-ES para espanhol (Espanha). O idioma padrão é en-US se você não especificar um idioma. Para obter detalhes sobre como identificar um dos vários idiomas que podem ser falados, consulte identificação do idioma.

  6. Execute seu novo aplicativo de console para iniciar a transcrição de conversas:

    python conversation_transcription.py
    

Importante

Certifique-se de definir SPEECH_KEY e as SPEECH_REGIONvariáveis de ambiente. Se você não definir essas variáveis, a amostra falhará com uma mensagem de erro.

A conversa transcrita produzirá uma saída de texto:

SessionStarted event
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
CLOSING on ConversationTranscriptionCanceledEventArgs(session_id=92a0abb68636471dac07041b335d9be3, result=ConversationTranscriptionResult(result_id=ad1b1d83b5c742fcacca0692baa8df74, speaker_id=, text=, reason=ResultReason.Canceled))
SessionStopped event
CLOSING on SessionEventArgs(session_id=92a0abb68636471dac07041b335d9be3)

Os locutores são identificados como Convidado-1, Convidado-2 e assim por diante, dependendo do número de locutores na conversa.

Limpar os recursos

Você pode usar o portal do Azure ou a CLI (interface de linha de comando) do Azure para remover o recurso de fala que você criou.

Referência da API REST de Conversão de fala em texto | Referência da API REST de Conversão de fala em texto para áudios curtos | Amostras Adicionais no GitHub

A API REST não dá suporte à transcrição de conversas. Selecione outra linguagem ou ferramenta de programação na parte superior desta página.

A CLI de Fala não dá suporte à transcrição de conversas. Selecione outra linguagem ou ferramenta de programação na parte superior desta página.

Próxima etapa