Usar el servicio de voz de Microsoft Azure para extraer texto de un archivo de audio
Entorno de comprobación de funcionamiento
- Servicios de voz de Microsoft Azure
-
- Edición julio 2022
- Visual Studio
-
- Visual Studio 2022
- .NET
-
- 6.0
precondición
Antes de que pueda verificar que estos Consejos funcionan, debe:
- Crear una cuenta Microsoft (Referencia: Crear una cuenta Microsoft)
- Crear una cuenta de Microsoft Azure (Referencia: Crear una cuenta de Microsoft Azure)
Acerca de los materiales de muestra
Tomamos prestados archivos de audio del siguiente sitio. No se incluye en el código de ejemplo.
Enlaces externos
- Transcripción desde un archivo de audio en C# (Azure, proxy, salida de tiempo, masivo, SpeechToText)
Al principio
Como ejemplo, para grabar el contenido de la reunión, etc., se graban los contenidos de la conversación, y más tarde para crear las actas de la reunión, el audio grabado se escucha y se transcribe en texto. Sin embargo, es fácil imaginar que es muy problemático escribir el contenido de la conversación en una oración.
A continuación se explica cómo usar el servicio de voz de Microsoft Azure para exportar y generar automáticamente datos de voz a texto. En el ejemplo anterior, es una grabación de la reunión, pero en este Tips, se extrae del archivo de audio, por lo que se puede aplicar a cualquier cosa que contenga contenido de conversación.
Además, esta vez estamos hablando de transcribir a texto, También puede usar el servicio de voz de Microsoft Azure para convertir y traducir durante la grabación.
Acerca de las tarifas
Esta vez, usaremos el plan gratuito, por lo que incluso si intenta operar, no se le cobrará. Sin embargo, el plan gratuito tiene límites de tiempo y caracteres, por lo que si necesita más conversión después de operarlo, cambie a un plan de pago.
Consulte la siguiente página oficial para conocer los precios. Dado que es un servicio en la nube, la tarifa puede fluctuar dependiendo de la temporada.
Acceso al portal de Microsoft Azure
Acceda a la siguiente dirección URL en un navegador web:
Si ya ha iniciado sesión, ha terminado. Si aún no ha iniciado sesión, se mostrará la siguiente pantalla, así que inicie sesión.
Cuando inicie sesión, se mostrará la siguiente pantalla. Dependiendo del diseño que esté configurando, la pantalla puede ser diferente.
Crear un servicio de voz en Microsoft Azure
Si ingresa "voz" en el campo de entrada de búsqueda sobre el portal, saldrá "servicio de voz", así que selecciónelo.
「| de Cognitive Services Cuando aparezca la pantalla "Servicio de voz", seleccione "Crear".
Se abre la pantalla "Crear servicios de voz", así que ingrese los elementos necesarios.
Básico
Ejemplo de de entradacontenido | de | elementos |
---|---|---|
suscripción | Seleccione las suscripciones por las que desea pagar. Incluso si es gratis, siempre debe vincularlo a algún tipo de suscripción. | |
Grupos de recursos | Especifica en qué grupo de recursos se va a incluir el servicio de voz que se va a crear. Si aún no ha creado uno, cree uno desde "Nuevo" a continuación. Puede pensar en los grupos de recursos como agrupaciones cuando crea varios servicios. | |
Región | Elija cerca de un lugar donde pueda usarlo con más frecuencia. Sin embargo, tenga en cuenta que los precios pueden variar según la región. | Japón Este |
nombre | Cualquier nombre para este servicio de voz. Si está creando más de un servicio de voz, asegúrese de que el nombre sea descriptivo. Este nombre es global y único, por lo que no puede usar un nombre que se use en otro lugar. | SpeechToText-Test |
Nivel de precios | Si desea usarlo de forma gratuita, elija "F0 gratis". Si desea usarlo por una tarifa, elija otro plan. Por supuesto, hay restricciones si es gratis. | F0 gratis |
Una vez ingresado, seleccione Siguiente: > de red a continuación.
red
Ejemplo de de entradacontenido | de | elementos |
---|---|---|
amable | Especifica el intervalo desde el que se puede acceder a este servicio de voz. Si desea poder acceder a él desde cualquier lugar sin ninguna configuración detallada, seleccione "Incluyendo Internet ...". "Se puede acceder desde cualquier lugar" también significa "cualquiera puede acceder a él", pero de hecho solo aquellos que tienen la "clave" para adquirir después de esto pueden acceder a él, por lo que no es tanto un problema en términos de seguridad. | Incluyendo Internet... |
Una vez que lo haya ingresado, seleccione Siguiente: > de identidad a continuación.
Identidad
Ejemplo de de entradacontenido | de | elementos |
---|---|---|
ID administrado asignado por el sistema | Esta vez uso el servicio de voz solo, por lo que es bueno apagarlo. | apagado |
ID administrado asignado por el usuario | No necesito agregarlo porque esta vez no creo un usuario. | sin |
Una vez que lo haya ingresado, seleccione Siguiente: Etiquetar > a continuación.
etiqueta
Dado que la etiqueta no se usa esta vez, no se establece.
Una vez ingresado, seleccione Siguiente: Revisar y crear > a continuación.
Revisar y crear
Si no hay problemas con el contenido de la entrada, se muestra "Validación correcta". Si hay un problema, se mostrará un mensaje de error, así que regrese y configúrelo nuevamente.
Si no hay ningún problema con el contenido de entrada, haga clic en el botón "Crear". A continuación, comenzará la implementación.
Después de un tiempo, la implementación se completa y se muestra la siguiente pantalla. El nombre de la implementación es largo, pero no necesita preocuparse por ello porque es temporal en la implementación.
Puede hacer clic en el botón Ir a recurso para comprobar que se ha creado el servicio de voz.
Generación y recuperación de claves
Se requiere una clave de autenticación para acceder a este servicio de voz desde el cliente. Dado que solo es accesible por el programa que tiene esta clave, es necesario evitar que esta clave sea robada por un tercero.
"Cliente" aquí se refiere a todos los programas que usan Microsoft Azure, como aplicaciones de escritorio, aplicaciones de teléfonos inteligentes y aplicaciones web.
Para obtener la clave, vaya al servicio de voz que creó. Se puede acceder a él desde paneles, grupos de recursos, etc.
Cuando se abra la página Servicios de voz, seleccione Claves y puntos de conexión en el menú de la izquierda.
Luego, se abrirá la página "Clave y punto final" y se mostrarán los elementos "Clave 1", "Clave 2", "Ubicación / Región" y "Punto final".
Ambos elementos son necesarios, pero "Key 2" es un marco de repuesto, por lo que no se usa en la mayoría de los casos.
Toma nota de cada valor. Como se mencionó en la descripción, no comparta la clave con las partes en el desarrollo inesperadamente.
Si se filtra la clave, haga clic en "Regenerar clave 1" arriba para emitir una nueva clave. Por supuesto, tenga en cuenta que en este caso, la clave anterior ya no será utilizable.
Usar un servicio de voz de un programa para extraer texto de voz
A partir de ahora, el uso del servicio de voz cambiará en función del programa utilizado. Esta vez, accederé a él desde una aplicación de escritorio .NET, pero si está usando otro marco, intente usarlo en Internet. El sitio web oficial también tiene instrucciones sobre cómo usarlo en varios idiomas.
Esta vez, estamos creando una aplicación de escritorio WPF en Visual Studio 2022. En el caso de Visual Studio Code, es un poco problemático porque no hay diseñador, pero si extrae solo la parte del programa, es posible usarlo en una aplicación de consola o una aplicación web.
Crear proyecto
Inicie Visual Studio 2022.
Seleccione Crear nuevo proyecto.
Seleccione Aplicación WPF.
El nombre y la ubicación del proyecto son arbitrarios. Una vez introducido, seleccione Siguiente.
La versión se llama ". NETO 6.0". Una vez configurado, haga clic en el botón "Crear".
Configuración de NuGet
Puede crear acceso a la API de Microsoft Azure desde cero, pero es más fácil usarla porque ya tiene una biblioteca oficial.
Haga clic con el botón secundario en Dependencias de la solución y seleccione Administrar paquetes nuGet.
Seleccione la pestaña "Examinar", ingrese "Microsoft.CognitiveServices.Speech" en el campo de entrada de búsqueda y se mostrará una lista, así que seleccione "Microsoft.CognitiveServices.Speech" y haga clic en el botón Instalar.
Haga clic en el botón Aceptar.
Seleccione Acepto.
Cuando haya terminado, se agregará al paquete.
Creación de la interfaz de usuario
Esta vez, especificaremos un archivo WAV que contenga audio y extraeremos el contenido de la conversación en texto con la API de voz y haremos que se muestre. Por el momento, deje el entorno dependiente del campo de entrada para que pueda usar el código copiando y pegando.
La pantalla debería verse así: Dado que solo se incluye la cantidad mínima, si desea agregar un botón de referencia de archivo, por ejemplo, impleméntelo usted mismo.
MainWindow.xaml
es el siguiente:
<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>
Creación de un proceso
El ExecuteButton_Click
programa está envuelto en métodos. Si desea usarlo en otros marcos, vuelva a escribir 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("処理が終了しました。");
}
}
}
Dado que la explicación está casi escrita en el código, no lo explicaré en detalle, pero si planteas la parte importante, será la siguiente.
SpeechConfig
Configuración de servicios de voz enAudioConfig
Configuración de datos de voz enSpeechRecognizer
Generar clase de procesamiento en- Los datos de voz se analizan uno por uno, y el texto
SpeechRecognizer.Recognized
completado se pasa en el evento de vez en cuando. - Si el procesamiento finaliza por algún motivo,
SpeechRecognizer.Canceled
se llama a un evento - El inicio del procesamiento se
SpeechRecognizer.StartContinuousRecognitionAsync
denomina método y la finalización del procesamiento seSpeechRecognizer.StopContinuousRecognitionAsync
denomina método.
Comprobación del funcionamiento
Después de crear el programa, ejecútelo, ingrese los elementos necesarios y presione el botón ejecutar. Si ha especificado el archivo de audio correcto, el audio debe reproducirse y el texto debe extraerse uno por uno mediante el servicio de voz de Microsoft Azure entre bastidores.
El sistema de extracción no es perfecto porque depende del servicio de voz de Microsoft Azure, Si la voz es silenciosa y habla con claridad, creo que se extraerá con considerable precisión. Dado que es un servicio en la nube, incluso si la precisión no es tan alta ahora, puede estar mejorando antes de que te des cuenta, por lo que es fácil no hacer nada en esa área.