Use o serviço Microsoft Azure Speech para extrair texto de um arquivo de áudio

Página atualizada :
Data de criação de página :

Ambiente de verificação de operação

Serviços de voz do Microsoft Azure
  • Edição de julho de 2022
Estúdio Visual
  • Visual Studio 2022
.NET
  • 6.0

pré-condição

Antes de verificar se essas dicas funcionam, você precisa:

Sobre materiais de amostra

Emprestamos arquivos de áudio do seguinte site. Não está incluído no código de amostra.

Links externos

Inicialmente

Como exemplo, para registrar o conteúdo da reunião, etc., o conteúdo da conversa é gravado e, posteriormente, para criar a ata da reunião, o áudio gravado é ouvido e transcrito em texto. No entanto, é fácil imaginar que é muito problemático escrever o conteúdo da conversa em uma frase.

Veja como usar o serviço Microsoft Azure Speech para exportar e produzir automaticamente dados de fala para texto. No exemplo anterior, é uma gravação da reunião, mas nesta Dica, ela é extraída do arquivo de áudio, para que possa ser aplicada a qualquer coisa que contenha conteúdos de conversação.

Além disso, desta vez estamos falando de transcrever para texto, Você também pode usar o serviço de voz Microsoft Azure para converter e traduzir durante a gravação.

Sobre taxas

Desta vez, usaremos o plano Free, então mesmo que você tente operar, você não será cobrado. No entanto, o plano Free tem limites de tempo e caráter, portanto, se você precisar de mais conversão depois de realmente operá-lo, por favor mude para um plano pago.

Consulte a seguinte página oficial para preços. Por ser um serviço em nuvem, a taxa pode variar dependendo da estação.

Acesse o portal Microsoft Azure

Acesse a seguinte URL em um navegador da Web:

Se você já está lodo, você está feito. Se você ainda não estiver loto, a tela a seguir será exibida, então faça login.

Ao fazer login, a tela a seguir será exibida. Dependendo do design que você está configurando, o display pode ser diferente.

Crie um serviço de voz no Microsoft Azure

Se você inserir "voz" no campo de entrada de pesquisa acima do portal, o "serviço de voz" será eliminado, então selecione-o.

「Conhecição de Serviço |s Ambientais Quando a tela "Serviço de voz" for exibida, selecione "Criar".

A tela "Criar serviços de fala" é aberta, então insira os itens necessários.

Básico

Exemplo de
conteúdo de entrada de itens
subscrição Selecione as assinaturas pelas quais deseja pagar. Mesmo que seja grátis, você sempre precisa amarrá-lo a algum tipo de assinatura.
Grupos de recursos Especifica em qual grupo de recursos o serviço de voz a ser criado deve incluir. Se você ainda não criou um, por favor, crie um a partir de "Novo" abaixo. Você pode pensar em grupos de recursos como agrupamentos quando você cria vários serviços.
Região Escolha perto de um lugar onde você pode estar usando-o com mais frequência. No entanto, observe que os preços podem variar de acordo com a região. Japão Leste
nome Qualquer nome para este serviço de voz. Se você está criando mais de um serviço de voz, certifique-se de que o nome é descritivo. Este nome é global e único, então você não pode usar um nome que é usado em outro lugar. SpeechToText-Test
Nível de preços Se você quiser usá-lo gratuitamente, escolha "F0 grátis". Se você quiser usá-lo por uma taxa, por favor escolha outro plano. Claro, há restrições se for de graça. F0 grátis

Uma vez inscrito, selecione Seguinte: > de rede abaixo.

rede

Exemplo de
conteúdo de entrada de itens
tipo Especifica o intervalo a partir do qual este serviço de voz é acessível. Se você quiser ser capaz de acessá-lo de qualquer lugar sem qualquer configuração detalhada, selecione "Incluindo a Internet...". "Pode ser acessado de qualquer lugar" também significa "qualquer pessoa pode acessá-la", mas na verdade apenas aqueles que têm a "chave" a ser adquirida depois disso podem acessá-la, por isso não é tanto um problema em termos de segurança. Incluindo a Internet...

Depois de inseri-lo, selecione Seguinte: > de identidade abaixo.

Identidade

Exemplo de
conteúdo de entrada de itens
ID gerenciado atribuído pelo sistema Desta vez eu uso o serviço de voz sozinho, então é bom desligá-lo. desligado
ID gerenciado atribuído pelo usuário Eu não preciso adicioná-lo porque eu não crio um usuário desta vez. sem

Depois de inseri-lo, selecione Seguinte: Marque > abaixo.

etiqueta

Como a tag não é usada desta vez, ela não está definida.

Uma vez inserido, selecione Next: Revise e crie > abaixo.

Revise e crie

Se não houver problemas com o conteúdo de entrada, "Validação bem sucedida" será exibido. Se houver um problema, uma mensagem de erro será exibida, então volte e defina-a novamente.

Se não houver problema com o conteúdo de entrada, clique no botão "Criar". Então a implantação começará.

Depois de um tempo, a implantação é concluída e a tela a seguir é exibida. O nome de implantação é longo, mas você não precisa se preocupar com isso porque é temporário em implantação.

Você pode clicar no botão Ir para Recurso para verificar se o serviço de voz foi criado.

Gerando e recuperando chaves

Uma chave de autenticação é necessária para acessar este serviço de voz do cliente. Como só é acessível pelo programa que tem essa chave, é necessário evitar que essa chave seja roubada por terceiros.

"Cliente" aqui refere-se a todos os programas que usam o Microsoft Azure, como aplicativos de desktop, aplicativos para smartphones e aplicativos web.

Para obter a chave, vá para o serviço de voz que você criou. Ele pode ser acessado a partir de painéis, grupos de recursos, e assim por diante.

Quando a página serviços de voz for aberta, selecione Keys & Endpoints no menu à esquerda.

Em seguida, será aberta a página "Chave e Ponto Final" e os itens "Chave 1", "Chave 2", "Localização/Região" e "Ponto final" serão exibidos.

Ambos os itens são necessários, mas "Key 2" é um quadro sobressalente, por isso não é usado na maioria dos casos.

Anote cada valor. Como mencionado na descrição, por favor, não compartilhe a chave com as partes de desenvolvimento inesperadamente.

Se a chave vazar, clique em "Regenerar a chave 1" acima para emitir uma nova tecla. Claro, esteja ciente de que, neste caso, a chave anterior não será mais utilizável.

Use um serviço de fala de um programa para extrair texto da fala

A partir de agora, o uso do serviço de voz mudará dependendo do programa utilizado. Desta vez, vou acessá-lo a partir de um aplicativo de desktop .NET, mas se você estiver usando outra estrutura, tente usá-lo na Internet. O site oficial também tem instruções sobre como usá-lo em vários idiomas.

Desta vez, estamos criando um aplicativo de desktop WPF no Visual Studio 2022. No caso do Visual Studio Code, é um pouco problemático porque não há designer, mas se você extrair apenas a parte do programa, é possível usá-lo em um aplicativo de console ou um aplicativo web.

Criar projeto

Inicie o Visual Studio 2022.

Selecione Criar novo projeto.

Selecione o aplicativo WPF.

O nome do projeto e a localização são arbitrários. Uma vez inscrito, selecione Próximo.

A versão se chama ". NET 6.0". Uma vez definido, clique no botão "Criar".

Configurações do NuGet

Você pode criar acesso à API microsoft Azure do zero, mas é mais fácil usá-la porque você já tem uma biblioteca oficial.

Com o botão direito do mouse em Dependências para a solução e selecione Gerenciar pacotes NuGet.

Selecione a guia "Procurar", digite "Microsoft.CognitiveServices.Speech" no campo de entrada de pesquisa e uma lista será exibida, então selecione "Microsoft.CognitiveServices.Speech" e clique no botão Instalar.

Clique no botão OK.

Selecione eu concordo.

Quando terminar, será adicionado ao pacote.

Criando a interface do usuário

Desta vez, especificaremos um arquivo WAV contendo áudio e extrairemos o conteúdo da conversa em texto com a API de fala e o faremos exibido. Por enquanto, deixe o ambiente dependente do campo de entrada para que você possa usar o código por cópia e colar.

A tela deve ficar assim: Como apenas o valor mínimo está incluído, se você quiser adicionar um botão de referência de arquivo, por exemplo, implemente-o você mesmo.

MainWindow.xaml é o seguinte:

<Window x:Class="MicrosoftAzureSpeechToText.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:MicrosoftAzureSpeechToText"
        mc:Ignorable="d"
        Title="Microsoft Azure の音声サービスを使用したテキスト抽出" Height="450" Width="800">
  <Grid>
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="20*"/>
      <ColumnDefinition Width="80*"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
      <RowDefinition Height="auto"/>
      <RowDefinition Height="auto"/>
      <RowDefinition Height="auto"/>
      <RowDefinition Height="auto"/>
      <RowDefinition Height="auto"/>
      <RowDefinition Height="auto"/>
      <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Label Content="キー" Margin="4"/>
    <TextBox x:Name="KeyTextBox" Grid.Column="1" HorizontalAlignment="Stretch" Margin="4" Text="" />
    <Label Content="場所/地域" Margin="4" Grid.Row="1"/>
    <TextBox x:Name="RegionTextBox" Grid.Column="1" HorizontalAlignment="Stretch" Margin="4" Text="japaneast" Grid.Row="1"/>
    <Label Content="言語" Margin="4" Grid.Row="2"/>
    <TextBox x:Name="LanguageTextBox" Grid.Column="1" HorizontalAlignment="Stretch" Margin="4" Text="ja-JP" Grid.Row="2"/>
    <Label Content="WAV ファイルパス" Margin="4" Grid.Row="3"/>
    <TextBox x:Name="WavFilePathTextBox" Grid.Column="1" HorizontalAlignment="Stretch" Margin="4" Text="" Grid.Row="3"/>
    <Button x:Name="ExecuteButton" Content="実行" Margin="4" Grid.Row="4" Grid.ColumnSpan="2" FontSize="24" Click="ExecuteButton_Click"/>
    <Label Content="結果" Margin="4,2,4,2" Grid.Row="5"/>
    <TextBox x:Name="ResultTextBox" Margin="8" TextWrapping="Wrap" Text="" Grid.Row="6" Grid.ColumnSpan="2" VerticalScrollBarVisibility="Visible" />
  </Grid>
</Window>

Criando um processo

O ExecuteButton_Click programa está todo embrulhado em métodos. Se você quiser usá-lo em outras estruturas, reescreva este código como base.

MainWindow.xaml.cs

using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;
using System;
using System.Media;
using System.Threading.Tasks;
using System.Windows;

namespace MicrosoftAzureSpeechToText
{
  /// <summary>
  /// MainWindow.xamlのインタラクションロジック
  /// </summary>
  public partial class MainWindow : Window
  {
    public MainWindow()
    {
      InitializeComponent();
    }

    private void AppendLineLog(string log)
    {
      // 非同期処理から書き込むので Dispatcher.Invoke を使用
      Dispatcher.Invoke(()=>ResultTextBox.AppendText(log + Environment.NewLine));
    }

    private async void ExecuteButton_Click(object sender, RoutedEventArgs e)
    {
      // 入力内容をテキストボックスから取得
      var key = KeyTextBox.Text;
      var region = RegionTextBox.Text;
      var lang = LanguageTextBox.Text;
      var wavFilePath = WavFilePathTextBox.Text;

      try
      {
        // 音声ファイルが指定されているか確認するため再生する
        var wavPlayer = new SoundPlayer(wavFilePath);
        wavPlayer.Play();

        var stopRecognition = new TaskCompletionSource<int>();

        // 音声サービスを構成する
        var speechConfig = SpeechConfig.FromSubscription(key, region);
        AppendLineLog($"{speechConfig.Region} で音声サービスを使用する準備ができました。");

        // 音声認識言語の指定
        // 使用できる値一覧:https://docs.microsoft.com/ja-jp/azure/cognitive-services/speech-service/language-support?tabs=speechtotext#speech-to-text
        speechConfig.SpeechRecognitionLanguage = lang;

        // 入力を WAV ファイルとして設定
        using var audioConfig = AudioConfig.FromWavFileInput(wavFilePath);
        using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);

        // 解析結果が受信されたことを通知します。
        // このイベントは抽出が完了したものから随時発生します。
        speechRecognizer.Recognized += (s, e) =>
        {
          if (e.Result.Reason == ResultReason.RecognizedSpeech)
          {
            // 音声結果に認識されたテキストが含まれていることを示します。
            var time = TimeSpan.FromSeconds(e.Result.OffsetInTicks / 10000000).ToString(@"hh\:mm\:ss");
            var text = $"{time} {e.Result.Text}";
            AppendLineLog(text);
          }
          else if (e.Result.Reason == ResultReason.NoMatch)
          {
            // 音声を認識できなかったことを示します。
            AppendLineLog("音声を認識できませんでした。");
          }
        };

        // 音声認識が中断されたことを通知します。
        speechRecognizer.Canceled += (s, e) =>
        {
          AppendLineLog($"処理が終了しました。(Reason={e.Reason})");

          if (e.Reason == CancellationReason.Error)
          {
            AppendLineLog($"ErrorCode={e.ErrorCode}\r\n");
            AppendLineLog($"ErrorDetails={e.ErrorDetails}\r\n");
          }

          stopRecognition.TrySetResult(0);
        };

        // 継続的な処理を開始します。 StopContinuousRecognitionAsync を使用して処理を停止します。
        await speechRecognizer.StartContinuousRecognitionAsync().ConfigureAwait(false);

        // 完了するのを待ちます。Task.WaitAny を使用して、タスクをルート化してください。
        Task.WaitAny(new[] { stopRecognition.Task });

        // 処理を停止します。
        await speechRecognizer.StopContinuousRecognitionAsync().ConfigureAwait(false);
      }
      catch (Exception ex)
      {
        // 何らかの例外が発生した場合はエラー内容を出力
        AppendLineLog(ex.Message);
      }

      MessageBox.Show("処理が終了しました。");
    }
  }
}

Como a explicação está quase escrita no código, não vou explicar em detalhes, mas se você levantar a parte importante, será a seguinte.

  • SpeechConfig Configuração de serviços de voz em
  • AudioConfig Configuração de dados de voz em
  • SpeechRecognizer Gerar classe de processamento em
  • Os dados da fala são analisados um a um, e o texto SpeechRecognizer.Recognized completo é passado no evento de tempos em tempos.
  • Se o processamento for concluído por algum motivo, SpeechRecognizer.Canceled um evento é chamado
  • O início do processamento é SpeechRecognizer.StartContinuousRecognitionAsync chamado de método, e a conclusão do processamento é SpeechRecognizer.StopContinuousRecognitionAsync chamada de método.

Verificação de operação

Depois de criar o programa, execute-o, digite os itens necessários e pressione o botão executar. Se você especificou o arquivo de áudio correto, o áudio deve ser reproduzido e o texto deve ser extraído um por um usando o serviço de voz Microsoft Azure nos bastidores.

O sistema de extração não é perfeito porque depende do serviço de voz Microsoft Azure, Se a voz estiver quieta e falar claramente, acho que será extraída com considerável precisão. Como é um serviço de nuvem, mesmo que a precisão não seja tão alta agora, pode estar melhorando antes que você perceba, por isso é fácil não fazer nada nessa área.