Idioma
Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Importante
As APIs de reconhecimento de fala e runtime de Windows ML atualmente são experimentais e não têm suporte para uso em ambientes de produção. Os aplicativos que testam essas APIs não devem ser publicados na Microsoft Store.
Importante
As APIs de Reconhecimento de Fala e runtime do Windows ML estão disponíveis no momento em C++ e Python; Atualmente, não há suporte para C#. Informe-nos se você está interessado em usar essas APIs do C# postando um problema no repositório GitHub do Windows ML!
A API de Reconhecimento de Fala do Windows ML simplifica a execução do ASR (reconhecimento automático de fala) com seu próprio modelo Whisper. Ele compõe um pipeline do codificador Whisper, um pipeline de decodificador e um tokenizador e manipula o loop de transcrição autoregressiva, a saída de streaming e o cancelamento para você, além da API do Windows ML Runtime. Windows não inclui um modelo para essa API; você escolhe, empacota e distribui o modelo Whisper — codificador e arquivos de decodificador, além de um tokenizador — com seu aplicativo.
Dica
Se você não precisar de um modelo específico do Whisper ou implantação personalizada e quiser apenas conversão de fala em texto no dispositivo com um modelo gerenciado pela Microsoft, use a API de Reconhecimento de Fala pronta para uso.
Você ainda cria os objetos de Runtime subjacentes – os modelos de codificador e decodificador, o destino de execução e os pipelines – e os passa para a sessão. A API não oculta o posicionamento de hardware; ela só remove a necessidade de escrever seu próprio loop de decodificação.
Modelos com suporte
A API de Reconhecimento de Fala foi criada especificamente para a arquitetura de codificador/decodificador Whisper – não é uma API ASR genérica. Você fornece:
- Modelos de codificador e decodificador ONNX (
encoder_model.onnxedecoder_model.onnx), executados por meio do ONNX Runtime
Um arquivo de tokenizer acompanha o par codificador/decodificador. O tensor de entrada contém amostras de PCM de ponto flutuante mono mais taxa de amostragem e metadados de comprimento válido.
Transcrever áudio
Forneça um tensor Runtime contendo amostras de forma de onda. Carregue os modelos de codificador e decodificador whisper, crie um pipeline para cada um e combine-os com um tokenizador em uma sessão:
// Create the runtime and an execution target (CPU here; GPU/NPU also available).
ComPtr<IWinMLRuntime> runtime;
THROW_IF_FAILED(WinMLCreateRuntime(IID_PPV_ARGS(runtime.GetAddressOf())));
ComPtr<IWinMLExecutionTarget> target;
THROW_IF_FAILED(runtime->CreateCpuExecutionTarget(target.GetAddressOf()));
// Load the Whisper encoder as its own single-stage pipeline.
ComPtr<IWinMLModel> encoderModel;
THROW_IF_FAILED(runtime->LoadModelFromFile(
L"C:\\models\\whisper\\encoder_model.onnx", nullptr, encoderModel.GetAddressOf()));
ComPtr<IWinMLPipelineBuilder> encoderBuilder;
THROW_IF_FAILED(runtime->CreatePipelineBuilder(encoderBuilder.GetAddressOf()));
ComPtr<IWinMLStage> encoderStage;
THROW_IF_FAILED(encoderBuilder->AddModelStage(
encoderModel.Get(), target.Get(), L"whisper-encoder", encoderStage.GetAddressOf()));
ComPtr<IWinMLPipeline> encoderPipeline;
THROW_IF_FAILED(encoderBuilder->Build(encoderPipeline.GetAddressOf()));
// Load the Whisper decoder the same way.
ComPtr<IWinMLModel> decoderModel;
THROW_IF_FAILED(runtime->LoadModelFromFile(
L"C:\\models\\whisper\\decoder_model.onnx", nullptr, decoderModel.GetAddressOf()));
ComPtr<IWinMLPipelineBuilder> decoderBuilder;
THROW_IF_FAILED(runtime->CreatePipelineBuilder(decoderBuilder.GetAddressOf()));
ComPtr<IWinMLStage> decoderStage;
THROW_IF_FAILED(decoderBuilder->AddModelStage(
decoderModel.Get(), target.Get(), L"whisper-decoder", decoderStage.GetAddressOf()));
ComPtr<IWinMLPipeline> decoderPipeline;
THROW_IF_FAILED(decoderBuilder->Build(decoderPipeline.GetAddressOf()));
ComPtr<IWinMLTokenizer> tokenizer;
THROW_IF_FAILED(WinMLCreateTokenizerFromFile(
L"C:\\models\\whisper\\tokenizer.json", tokenizer.GetAddressOf()));
// Compose the encoder/decoder pipelines and tokenizer into a session.
const winml::tasks::speech::asr::AutomaticSpeechRecognitionArguments arguments{
runtime.Get(),
tokenizer.Get(),
{
encoderPipeline.Get(),
encoderStage.Get(),
decoderPipeline.Get(),
decoderStage.Get(),
target.Get(),
},
};
winml::tasks::speech::asr::AutomaticSpeechRecognition speechRecognition;
THROW_IF_FAILED(winml::tasks::speech::asr::BuildAutomaticSpeechRecognition(
arguments, speechRecognition));
Chame TranscribeWaveform para iniciar uma operação de streaming e, em seguida, efetue pull de fragmentos do fluxo retornado até que ele informe a conclusão:
ComPtr<IWinMLCancellationSource> cancellation;
THROW_IF_FAILED(speechRecognition.tasks->CreateCancellationSource(
cancellation.GetAddressOf()));
ComPtr<IWinMLAutomaticSpeechRecognitionPullStream> stream;
THROW_IF_FAILED(speechRecognition.session->TranscribeWaveform(
waveform.Get(),
&waveformMetadata,
cancellation.Get(),
stream.GetAddressOf()));
// Pull transcript text one fragment at a time until the stream completes.
WINML_AUTOMATIC_SPEECH_RECOGNITION_READ_STATUS status{};
LPCWSTR fragment = nullptr;
while (SUCCEEDED(stream->ReadNext(&status, &fragment)) &&
status == WINML_AUTOMATIC_SPEECH_RECOGNITION_READ_STATUS_UPDATE)
{
std::wprintf(L"%ls", fragment);
}
// The terminal result is the authoritative transcript and finish reason.
ComPtr<IWinMLAutomaticSpeechRecognitionResult> result;
THROW_IF_FAILED(stream->GetResult(result.GetAddressOf()));
waveform e waveformMetadata vêm do seu próprio código de carregamento de áudio: um tensor de runtime que contém exemplos de PCM mono em ponto flutuante, além da taxa de amostragem e dos metadados de comprimento válido que o descrevem.
O resultado final informa a transcrição completa e um motivo de término, como um token de fim de transcrição, cancelamento ou um erro.
C++ e Python
A API nativa é exposta por meio de WinMLTasks.h e os auxiliares tipados em C++ em winml/tasks/speech/asr/WhisperAutomaticSpeechRecognition.hpp. Aplicativos Python usam a windowsml.tasks projeção junto com windowsml.runtime.
Os exemplos do Windows ML incluem um exemplo de transcrição com Whisper em C++ e Python. O exemplo mostra a configuração completa do Runtime ao lado da configuração de reconhecimento de fala para que você possa ver onde a abstração começa e como personalizar o fluxo de trabalho subjacente.
Consulte também
- Reconhecimento de Fala com APIs de IA do Windows (modelo pronto para uso, gerenciado pela Microsoft)
- Visão geral da API de Runtime do Windows ML
- conceitos da API do runtime do Windows ML
- Gerar texto com a API de Geração de Texto do Windows ML
- Exemplos do Windows ML