Taal
Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Important
De Windows ML Runtime- en Speech Recognition-API's zijn momenteel experimenteel en worden niet ondersteund voor gebruik in productieomgevingen. Apps die deze API's proberen, mogen niet worden gepubliceerd naar de Microsoft Store.
Important
De Windows ML Runtime- en Speech Recognition-API's zijn momenteel beschikbaar in C++ en Python; C# wordt momenteel niet ondersteund. Laat het ons weten als u geïnteresseerd bent deze API's vanuit C# te gebruiken door een issue te plaatsen in de Windows ML GitHub repo!
De Windows ML Speech Recognition-API vereenvoudigt het uitvoeren van automatische spraakherkenning (ASR) via uw eigen Whisper-model. Het bevat een Whisper-encoderpijplijn, een decoderpijplijn en een tokenizer, en verwerkt vervolgens de autoregressieve transcriptielus, streaming-uitvoer en annulering voor u, boven op de Windows ML Runtime-API. Windows levert geen model voor deze API mee; u kiest, verpakt en distribueert het Whisper-model—encoder- en decoderbestanden, plus een tokenizer—met uw app.
Tip
Als u geen specifiek Whisper-model of aangepaste implementatie nodig hebt en alleen spraak-naar-tekst op het apparaat wilt met een model dat Microsoft beheert, gebruikt u in plaats daarvan de kant-en-klare Spraakherkennings-API.
U maakt nog steeds de onderliggende Runtime-objecten, de encoder- en decodermodellen, het uitvoeringsdoel en de pijplijnen, en geeft deze door aan de sessie. De API verbergt hardwareplaatsing niet; hiermee vervalt alleen de noodzaak om uw eigen decode-lus te schrijven.
Ondersteunde modellen
De Spraakherkennings-API is speciaal gebouwd voor de Whisper encoder-/decoderarchitectuur. Het is geen algemene ASR-API. U levert:
-
ONNX-encoder- en decodermodellen (
encoder_model.onnxendecoder_model.onnx), uitgevoerd via ONNX Runtime
Een tokenizer-bestand begeleidt het encoder-/decoderpaar. De invoertensor bevat mono drijvendekomma PCM-samples plus samplefrequentie en geldige lengtemetagegevens.
Transcriberen van audio
Geef een Runtime-tensor die golfvormmonsters vasthoudt. Laad de Whisper encoder- en decodermodellen, bouw een pijplijn voor elk model en stel deze samen met een tokenizer in een sessie:
// 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));
Roep TranscribeWaveform aan om een streamingbewerking te starten en haal vervolgens fragmenten op uit de geretourneerde stream totdat de stream aangeeft dat deze is voltooid:
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 en waveformMetadata komen uit uw eigen code voor het laden van audio: een Runtime-tensor met mono drijvendekomma PCM-voorbeelden, plus de samplefrequentie en geldige lengtemetagegevens die deze beschrijven.
Het voltooide resultaat rapporteert de volledige transcriptie en een reden van voltooiing, zoals een end-of-transcripttoken, annulering of een fout.
C++ en Python
De systeemeigen API wordt ontsloten via WinMLTasks.h en de getypte C++-helpers onder winml/tasks/speech/asr/WhisperAutomaticSpeechRecognition.hpp. Python toepassingen gebruiken de windowsml.tasks projectie samen met windowsml.runtime.
De Windows ML-voorbeelden bevatten een C++- en Python-Whisper-transcriptievoorbeeld. In het voorbeeld ziet u de volledige runtime-configuratie naast de configuratie voor spraakherkenning, zodat u kunt zien waar de abstractie begint en hoe u de onderliggende werkstroom aanpast.