Use o serviço Microsoft Azure Speech para extrair texto de um arquivo de áudio
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:
- Crie uma conta microsoft (Referência: crie uma conta microsoft)
- Crie uma conta do Microsoft Azure (Referência: Crie uma conta do Microsoft Azure)
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 deconteú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 deconteú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 deconteú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 emAudioConfig
Configuração de dados de voz emSpeechRecognizer
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.