Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Important
Interfejsy API rozpoznawania mowy i środowiska uruchomieniowego uczenia maszynowego Windows ML są obecnie eksperymentalne i nie są obsługiwane do użycia w środowiskach produkcyjnych. Aplikacje, które wypróbują te interfejsy API, nie powinny być publikowane w sklepie Microsoft Store.
Important
Interfejsy API rozpoznawania mowy i środowiska uruchomieniowego Windows ML są obecnie dostępne w językach C++ i Python; język C# nie jest obecnie obsługiwany. Daj nam znać, jeśli interesuje Cię używanie tych interfejsów API z języka C#, publikując zgłoszenie w repozytorium GitHub projektu Windows ML!
Interfejs API Windows ML Speech Recognition upraszcza uruchamianie automatycznego rozpoznawania mowy (ASR) we własnym modelu Whisper. Komponuje potok kodera Whisper, potok dekodera i tokenizator, a następnie obsługuje pętlę transkrypcji autoregresywnej, dane wyjściowe przesyłania strumieniowego i anulowanie, na podstawie Windows ML Runtime API. Windows nie dostarcza modelu dla tego interfejsu API; wybierasz, pakujesz i dystrybuujesz model Whisper — koder i pliki dekodera, a także tokenizator — wraz z aplikacją.
Wskazówka
Jeśli nie potrzebujesz określonego modelu Whisper ani wdrożenia niestandardowego i potrzebujesz tylko na urządzeniu zamiany mowy na tekst za pomocą modelu zarządzanego przez firmę Microsoft, użyj gotowego do użycia interfejsu API rozpoznawania mowy.
Nadal tworzysz podstawowe obiekty Runtime — modele kodera i dekodera, cel wykonywania i potoki — i przekazujesz je do sesji. Interfejs API nie ukrywa rozmieszczenia sprzętu; usuwa tylko konieczność zapisania własnej pętli dekodowania.
Obsługiwane modele
Interfejs API rozpoznawania mowy jest przeznaczony specjalnie dla architektury kodera/dekodera Whisper — nie jest to ogólny interfejs API usługi ASR. Dostarczasz:
- Modele kodera ONNX i dekodera (
encoder_model.onnxidecoder_model.onnx) są uruchamiane za pośrednictwem ONNX Runtime
Plik tokenizatora towarzyszy parze kodera/dekodera. Tensor wejściowy zawiera monofoniczne zmiennoprzecinkowe próbki PCM oraz metadane dotyczące częstotliwości próbkowania i prawidłowej długości.
Transkrypcja dźwięku
Podaj tensor Runtime zawierający próbki przebiegu. Załaduj enkoder modelu Whisper i modele dekodera, skompiluj potok dla każdego z nich i połącz je z tokenizatorem w sesję:
// 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));
Wywołaj metodę TranscribeWaveform , aby uruchomić operację przesyłania strumieniowego, a następnie ściągnąć fragmenty ze zwracanego strumienia, dopóki nie zgłosi ukończenia:
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 i waveformMetadata pochodzą z własnego kodu ładowania audio: tensor Runtime zawierający monofoniczne próbki PCM zmiennoprzecinkowe, a także częstotliwość próbkowania i metadane prawidłowej długości, które go opisują.
Ukończony wynik zgłasza pełną transkrypcję i przyczynę zakończenia, taką jak token zakończenia transkrypcji, anulowanie lub błąd.
C++ i Python
Natywny interfejs API jest udostępniany przez WinMLTasks.h, a typowanych pomocników C++ — w obszarze winml/tasks/speech/asr/WhisperAutomaticSpeechRecognition.hpp. Aplikacje Python używają projekcji windowsml.tasks razem z windowsml.runtime.
Przykłady Windows ML obejmują przykład transkrypcji Whisper w językach C++ i Python. Ta próbka przedstawia pełną konfigurację środowiska uruchomieniowego obok konfiguracji rozpoznawania mowy, aby pokazać, gdzie zaczyna się abstrakcja i jak dostosować bazowy przepływ pracy.
Informacje dodatkowe
- Rozpoznawanie mowy za pomocą Windows AI APIs (gotowy do użycia, model zarządzany przez Microsoft)
- Omówienie interfejsu API środowiska uruchomieniowego usługi Windows ML
- Pojęcia dotyczące interfejsu API środowiska uruchomieniowego Windows ML
- Generowanie tekstu przy użyciu interfejsu API generowania tekstu Windows ML
- Przykłady uczenia maszynowego systemu Windows