Spraak herkennen

Referentiedocumentatiepakket (NuGet) | Aanvullende voorbeelden op GitHub |

In deze handleiding leert u hoe u spraak in realtime kunt herkennen en transcriberen naar tekst.

Een spraakconfiguratie maken

Als u de Speech-service wilt aanroepen met behulp van de Speech SDK, moet u een SpeechConfig exemplaar maken. Deze klasse bevat informatie over uw abonnement, zoals uw sleutel en de bijbehorende locatie/regio, eindpunt, host of autorisatietoken.

  1. Maak een SpeechConfig exemplaar met behulp van uw sleutel en locatie/regio.
  2. Maak een spraakresource in Azure Portal. Zie Een multiserviceresource maken voor meer informatie.
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;

class Program 
{
    async static Task Main(string[] args)
    {
        var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
    }
}

U kunt op een aantal andere manieren initialiseren SpeechConfig :

  • Gebruik een eindpunt en geef een Speech-service-eindpunt door. Een sleutel of autorisatietoken is optioneel.
  • Gebruik een host en geef een hostadres door. Een sleutel of autorisatietoken is optioneel.
  • Gebruik een autorisatietoken met de bijbehorende regio/locatie.

Notitie

Ongeacht of u spraakherkenning, spraaksynthese, vertaling of intentieherkenning uitvoert, maakt u altijd een configuratie.

Spraak herkennen met een microfoon

Als u spraak wilt herkennen met behulp van de microfoon van uw apparaat, maakt u een AudioConfig exemplaar met behulp van de FromDefaultMicrophoneInput() methode. Initialiseer vervolgens het SpeechRecognizer object door door te geven speechConfig en audioConfig.

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;

class Program 
{
    async static Task FromMic(SpeechConfig speechConfig)
    {
        using var audioConfig = AudioConfig.FromDefaultMicrophoneInput();
        using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);

        Console.WriteLine("Speak into your microphone.");
        var result = await speechRecognizer.RecognizeOnceAsync();
        Console.WriteLine($"RECOGNIZED: Text={result.Text}");
    }

    async static Task Main(string[] args)
    {
        var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
        await FromMic(speechConfig);
    }
}

Als u een specifiek audio-invoerapparaat wilt gebruiken, moet u de apparaat-id opgeven in AudioConfig. Meer informatie over het ophalen van de apparaat-id voor het audio-invoerapparaat.

Spraak herkennen uit een bestand

Als u spraak uit een audiobestand wilt herkennen in plaats van een microfoon, moet u nog steeds een AudioConfig exemplaar maken. Maar voor dit geval bel FromDefaultMicrophoneInput()je niet. U belt FromWavFileInput() en geeft het bestandspad door:

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;

class Program 
{
    async static Task FromFile(SpeechConfig speechConfig)
    {
        using var audioConfig = AudioConfig.FromWavFileInput("PathToFile.wav");
        using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);

        var result = await speechRecognizer.RecognizeOnceAsync();
        Console.WriteLine($"RECOGNIZED: Text={result.Text}");
    }

    async static Task Main(string[] args)
    {
        var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
        await FromFile(speechConfig);
    }
}

Spraak herkennen vanuit een stroom in het geheugen

Voor veel gebruiksscenario's is het waarschijnlijk dat uw audiogegevens afkomstig zijn van Azure Blob Storage, of dat deze al in het geheugen aanwezig zijn als een byte[] exemplaar of een vergelijkbare onbewerkte gegevensstructuur. In het volgende voorbeeld wordt gebruikgemaakt PushAudioInputStream van spraakherkenning. Dit is in feite een abstracte geheugenstroom. De voorbeeldcode voert de volgende acties uit:

  • Schrijft onbewerkte audiogegevens (PCM) naar PushAudioInputStream met behulp van de Write() functie, die een byte[] exemplaar accepteert.
  • Leest een .wav-bestand met behulp van FileReader voor demonstratiedoeleinden. Als u al audiogegevens in een byte[] exemplaar hebt, kunt u rechtstreeks doorgaan met het schrijven van de inhoud naar de invoerstroom.
  • De standaardindeling is 16-bits, 16-KHz monopulscodemodulatiegegevens (PCM). Als u de indeling wilt aanpassen, kunt u een AudioStreamFormat object CreatePushStream() doorgeven met behulp van de statische functie AudioStreamFormat.GetWaveFormatPCM(sampleRate, (byte)bitRate, (byte)channels).
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;

class Program 
{
    async static Task FromStream(SpeechConfig speechConfig)
    {
        var reader = new BinaryReader(File.OpenRead("PathToFile.wav"));
        using var audioConfigStream = AudioInputStream.CreatePushStream();
        using var audioConfig = AudioConfig.FromStreamInput(audioConfigStream);
        using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);

        byte[] readBytes;
        do
        {
            readBytes = reader.ReadBytes(1024);
            audioConfigStream.Write(readBytes, readBytes.Length);
        } while (readBytes.Length > 0);

        var result = await speechRecognizer.RecognizeOnceAsync();
        Console.WriteLine($"RECOGNIZED: Text={result.Text}");
    }

    async static Task Main(string[] args)
    {
        var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
        await FromStream(speechConfig);
    }
}

Als u een pushstream als invoer gebruikt, wordt ervan uitgegaan dat de audiogegevens een onbewerkte PCM zijn en eventuele headers overslaat. De API werkt nog steeds in bepaalde gevallen als de header niet is overgeslagen. Voor de beste resultaten kunt u overwegen om logica te implementeren om de headers af te lezen, zodat deze byte[] begint aan het begin van de audiogegevens.

Afhandeling van fouten

In de vorige voorbeelden wordt alleen de herkende tekst opgehaald uit de result.Text eigenschap. Als u fouten en andere antwoorden wilt afhandelen, moet u code schrijven om het resultaat af te handelen. Met de volgende code wordt de result.Reason-eigenschap geëvalueerd en:

  • Hiermee wordt het herkenningsresultaat afgedrukt: ResultReason.RecognizedSpeech.
  • Als er geen herkenningsmatch is, informeert deze de gebruiker: ResultReason.NoMatch.
  • Als er een fout optreedt, wordt het foutbericht afgedrukt: ResultReason.Canceled.
switch (result.Reason)
{
    case ResultReason.RecognizedSpeech:
        Console.WriteLine($"RECOGNIZED: Text={result.Text}");
        break;
    case ResultReason.NoMatch:
        Console.WriteLine($"NOMATCH: Speech could not be recognized.");
        break;
    case ResultReason.Canceled:
        var cancellation = CancellationDetails.FromResult(result);
        Console.WriteLine($"CANCELED: Reason={cancellation.Reason}");

        if (cancellation.Reason == CancellationReason.Error)
        {
            Console.WriteLine($"CANCELED: ErrorCode={cancellation.ErrorCode}");
            Console.WriteLine($"CANCELED: ErrorDetails={cancellation.ErrorDetails}");
            Console.WriteLine($"CANCELED: Did you set the speech resource key and region values?");
        }
        break;
}

Continue herkenning gebruiken

In de vorige voorbeelden wordt een eenmalige herkenning gebruikt, die één uiting herkent. Het einde van één uiting wordt bepaald door te luisteren naar stilte aan het einde of tot een maximum van 15 seconden audio is verwerkt.

Daarentegen gebruikt u continue herkenning wanneer u wilt bepalen wanneer u wilt stoppen met herkennen. U moet zich abonneren op de gebeurtenissen Recognizing, Recognizeden Canceled om de herkenningsresultaten op te halen. Als u de herkenning wilt stoppen, moet u StopContinuousRecognitionAsyncaanroepen. Hier volgt een voorbeeld van hoe doorlopende herkenning wordt uitgevoerd op een audio-invoerbestand.

Begin met het definiëren van de invoer en initialiseren SpeechRecognizer:

using var audioConfig = AudioConfig.FromWavFileInput("YourAudioFile.wav");
using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);

Maak vervolgens een TaskCompletionSource<int> exemplaar om de status van spraakherkenning te beheren:

var stopRecognition = new TaskCompletionSource<int>();

Abonneer u vervolgens op de gebeurtenissen die SpeechRecognizer worden verzonden:

  • Recognizing: Signaal voor gebeurtenissen die tussenliggende herkenningsresultaten bevatten.
  • Recognized: Signaal voor gebeurtenissen die uiteindelijke herkenningsresultaten bevatten, die duiden op een geslaagde herkenningspoging.
  • SessionStopped: Signaal voor gebeurtenissen die het einde van een herkenningssessie (bewerking) aangeven.
  • Canceled: Signaal voor gebeurtenissen die geannuleerde herkenningsresultaten bevatten. Deze resultaten geven een herkenningspoging aan die is geannuleerd als gevolg van een directe annuleringsaanvraag. Ze geven ook een transport- of protocolfout aan.
speechRecognizer.Recognizing += (s, e) =>
{
    Console.WriteLine($"RECOGNIZING: Text={e.Result.Text}");
};

speechRecognizer.Recognized += (s, e) =>
{
    if (e.Result.Reason == ResultReason.RecognizedSpeech)
    {
        Console.WriteLine($"RECOGNIZED: Text={e.Result.Text}");
    }
    else if (e.Result.Reason == ResultReason.NoMatch)
    {
        Console.WriteLine($"NOMATCH: Speech could not be recognized.");
    }
};

speechRecognizer.Canceled += (s, e) =>
{
    Console.WriteLine($"CANCELED: Reason={e.Reason}");

    if (e.Reason == CancellationReason.Error)
    {
        Console.WriteLine($"CANCELED: ErrorCode={e.ErrorCode}");
        Console.WriteLine($"CANCELED: ErrorDetails={e.ErrorDetails}");
        Console.WriteLine($"CANCELED: Did you set the speech resource key and region values?");
    }

    stopRecognition.TrySetResult(0);
};

speechRecognizer.SessionStopped += (s, e) =>
{
    Console.WriteLine("\n    Session stopped event.");
    stopRecognition.TrySetResult(0);
};

Als alles is ingesteld, roept u StartContinuousRecognitionAsync aan om te beginnen met herkennen:

await speechRecognizer.StartContinuousRecognitionAsync();

// Waits for completion. Use Task.WaitAny to keep the task rooted.
Task.WaitAny(new[] { stopRecognition.Task });

// Make the following call at some point to stop recognition:
// await speechRecognizer.StopContinuousRecognitionAsync();

De brontaal wijzigen

Een veelvoorkomende taak voor spraakherkenning is het opgeven van de invoer- (of bron)taal. In het volgende voorbeeld ziet u hoe u de invoertaal wijzigt in Italiaans. Zoek uw SpeechConfig exemplaar in uw code en voeg deze regel direct eronder toe:

speechConfig.SpeechRecognitionLanguage = "it-IT";

De eigenschap SpeechRecognitionLanguage verwacht een indelingstekenreeks voor taal-landinstellingen. Zie de lijst met ondersteunde landinstellingen voor spraak naar tekst voor meer informatie.

Taalidentificatie

U kunt taalidentificatie gebruiken met spraak-naar-tekstherkenning wanneer u de taal in een audiobron moet identificeren en deze vervolgens wilt transcriberen naar tekst.

Zie Taalidentificatie voor een volledig codevoorbeeld.

Een aangepast eindpunt gebruiken

Met aangepaste spraak kunt u uw eigen gegevens uploaden, een aangepast model testen en trainen, de nauwkeurigheid tussen modellen vergelijken en een model implementeren op een aangepast eindpunt. In het volgende voorbeeld ziet u hoe u een aangepast eindpunt instelt.

var speechConfig = SpeechConfig.FromSubscription("YourSubscriptionKey", "YourServiceRegion");
speechConfig.EndpointId = "YourEndpointId";
var speechRecognizer = new SpeechRecognizer(speechConfig);

Een container uitvoeren en gebruiken

Spraakcontainers bieden websocket-api's voor query-eindpunten die toegankelijk zijn via de Speech SDK en Speech CLI. De Speech SDK en Speech CLI maken standaard gebruik van de openbare Speech-service. Als u de container wilt gebruiken, moet u de initialisatiemethode wijzigen. Gebruik een containerhost-URL in plaats van sleutel en regio.

Zie Host-URL's in Speech-containers installeren en uitvoeren met Docker voor meer informatie over containers.

Wijzigen hoe stilte wordt verwerkt

Als een gebruiker naar verwachting sneller of langzamer spreekt dan normaal, resulteert het standaardgedrag voor niet-peech-stilte in invoeraudio mogelijk niet in wat u verwacht. Veelvoorkomende problemen met stilteafhandeling zijn onder andere:

  • Snelle spraak die veel zinnen combineert tot één herkenningsresultaat, in plaats van zinnen in afzonderlijke resultaten te breken.
  • Langzame spraak die delen van één zin in meerdere resultaten scheidt.
  • Een herkenning met één opname eindigt te snel terwijl wordt gewacht tot spraak begint.

Deze problemen kunnen worden opgelost door een van de twee time-outeigenschappen in te stellen op het SpeechConfig exemplaar dat wordt gebruikt om een SpeechRecognizer:

  • De time-out voor segmentatie-stilte past aan hoeveel niet-afspeech-audio is toegestaan binnen een woordgroep die momenteel wordt gesproken voordat deze woordgroep wordt beschouwd als 'gereed'.
    • Met hogere waarden worden de resultaten over het algemeen langer en worden langere pauzes van de luidspreker binnen een woordgroep toegestaan, maar duurt het langer om resultaten te bereiken. Ze kunnen ook afzonderlijke woordgroepen samenvoegen tot één resultaat wanneer ze te hoog worden ingesteld.
    • Lagere waarden maken de resultaten over het algemeen korter en zorgen ervoor dat er meer prompt- en frequente onderbrekingen tussen woordgroepen worden veroorzaakt, maar kunnen ook leiden tot afzonderlijke zinnen in meerdere resultaten wanneer deze te laag zijn ingesteld.
    • Deze time-out kan worden ingesteld op gehele getallen tussen 100 en 5000, in milliseconden, met 500 standaardwaarden.
  • Met de initiële time-out voor stilte wordt aangepast hoeveel niet-peech-audio is toegestaan voordat een woordgroep wordt beëindigd voordat de herkenningspoging eindigt in het resultaat 'geen overeenkomst'.
    • Hogere waarden geven sprekers meer tijd om te reageren en te beginnen met spreken, maar kunnen ook leiden tot trage reactiesnelheid wanneer er niets wordt gesproken.
    • Lagere waarden zorgen voor een prompt 'geen overeenkomst' voor snellere gebruikerservaring en meer gecontroleerde audioafhandeling, maar kan een luidspreker te snel uitschakelen wanneer deze te laag is ingesteld.
    • Omdat continue herkenning veel resultaten genereert, bepaalt deze waarde hoe vaak 'geen overeenkomst'-resultaten binnenkomen, maar anders niet van invloed is op de inhoud van herkenningsresultaten.
    • Deze time-out kan worden ingesteld op een niet-negatief geheel getal, in milliseconden of op 0 om deze volledig uit te schakelen. 5000 is een typische standaardinstelling voor herkenning met één opname, terwijl 15000 een standaardwaarde is voor continue herkenning.

Aangezien er compromissen zijn bij het wijzigen van deze time-outs, moet u alleen de instellingen wijzigen wanneer u een probleem ondervindt met betrekking tot de verwerking van stiltes. Standaardwaarden verwerken de meeste gesproken audio optimaal en alleen ongebruikelijke scenario's moeten problemen ondervinden.

Voorbeeld: Gebruikers die een serienummer zoals ABC-123-4567 spreken, kunnen een onderbreking tussen tekengroepen lang genoeg onderbreken om het serienummer in meerdere resultaten te verdelen. Probeer in dit geval een hogere waarde zoals 2000 ms voor de time-out voor segmentatie-stilte:

speechConfig.SetProperty(PropertyId.Speech_SegmentationSilenceTimeoutMs, "2000");

Voorbeeld: De spraak van een opgenomen presentator kan snel genoeg zijn dat meerdere zinnen in een rij worden gecombineerd, waarbij grote herkenningsresultaten slechts één of twee keer per minuut binnenkomen. In dit geval stelt u de time-out voor segmentatie-stilte in op een lagere waarde, zoals 300 ms:

speechConfig.SetProperty(PropertyId.Speech_SegmentationSilenceTimeoutMs, "300");

Voorbeeld: Een herkenning met één opname waarin een spreker wordt gevraagd een serienummer te snel te vinden en te lezen terwijl het nummer wordt gevonden. Probeer in dit geval een langere time-out voor stilte, zoals 10.000 ms:

speechConfig.SetProperty(PropertyId.SpeechServiceConnection_InitialSilenceTimeoutMs, "10000");

Referentiedocumentatiepakket (NuGet) | Aanvullende voorbeelden op GitHub |

In deze handleiding leert u hoe u spraak in realtime kunt herkennen en transcriberen naar tekst.

Een spraakconfiguratie maken

Als u de Speech-service wilt aanroepen met behulp van de Speech SDK, moet u een SpeechConfig exemplaar maken. Deze klasse bevat informatie over uw abonnement, zoals uw sleutel en de bijbehorende locatie/regio, eindpunt, host of autorisatietoken.

  1. Maak een SpeechConfig exemplaar met behulp van uw sleutel en regio.
  2. Maak een spraakresource in Azure Portal. Zie Een multiserviceresource maken voor meer informatie.
using namespace std;
using namespace Microsoft::CognitiveServices::Speech;

auto speechConfig = SpeechConfig::FromSubscription("YourSpeechKey", "YourSpeechRegion");

U kunt op een aantal andere manieren initialiseren SpeechConfig :

  • Gebruik een eindpunt en geef een Speech-service-eindpunt door. Een sleutel of autorisatietoken is optioneel.
  • Gebruik een host en geef een hostadres door. Een sleutel of autorisatietoken is optioneel.
  • Gebruik een autorisatietoken met de bijbehorende regio/locatie.

Notitie

Ongeacht of u spraakherkenning, spraaksynthese, vertaling of intentieherkenning uitvoert, maakt u altijd een configuratie.

Spraak herkennen met een microfoon

Als u spraak wilt herkennen met behulp van de microfoon van uw apparaat, maakt u een AudioConfig exemplaar met behulp van de FromDefaultMicrophoneInput() lidfunctie. Initialiseer vervolgens hetSpeechRecognizer object door door te geven audioConfig en config.

using namespace Microsoft::CognitiveServices::Speech::Audio;

auto audioConfig = AudioConfig::FromDefaultMicrophoneInput();
auto speechRecognizer = SpeechRecognizer::FromConfig(config, audioConfig);

cout << "Speak into your microphone." << std::endl;
auto result = speechRecognizer->RecognizeOnceAsync().get();
cout << "RECOGNIZED: Text=" << result->Text << std::endl;

Als u een specifiek audio-invoerapparaat wilt gebruiken, moet u de apparaat-id opgeven in AudioConfig. Zie Een audio-invoerapparaat selecteren met de Speech SDK voor meer informatie over het ophalen van de apparaat-id voor uw audio-invoerapparaat

Spraak herkennen uit een bestand

Als u spraak uit een audiobestand wilt herkennen in plaats van een microfoon te gebruiken, moet u nog steeds een AudioConfig exemplaar maken. Maar voor dit geval bel FromDefaultMicrophoneInput()je niet. U belt FromWavFileInput() en geeft het bestandspad door:

using namespace Microsoft::CognitiveServices::Speech::Audio;

auto audioConfig = AudioConfig::FromWavFileInput("YourAudioFile.wav");
auto speechRecognizer = SpeechRecognizer::FromConfig(config, audioConfig);

auto result = speechRecognizer->RecognizeOnceAsync().get();
cout << "RECOGNIZED: Text=" << result->Text << std::endl;

Spraak herkennen met behulp van de klasse Recognizer

De Recognizer-klasse voor de Speech SDK voor C++ maakt een aantal methoden beschikbaar die u voor spraakherkenning kunt gebruiken.

Eenmalige herkenning

Met eenmalige herkenning herkent u asynchroon één uiting. Het einde van één uiting wordt bepaald door te luisteren naar stilte aan het einde of tot een maximum van 15 seconden audio is verwerkt. Hier volgt een voorbeeld van asynchrone herkenning met één opname via RecognizeOnceAsync:

auto result = speechRecognizer->RecognizeOnceAsync().get();

U moet code schrijven om het resultaat af te handelen. Dit voorbeeld evalueert result->Reason en:

  • Hiermee wordt het herkenningsresultaat afgedrukt: ResultReason::RecognizedSpeech.
  • Als er geen herkenningsmatch is, informeert deze de gebruiker: ResultReason::NoMatch.
  • Als er een fout optreedt, wordt het foutbericht afgedrukt: ResultReason::Canceled.
switch (result->Reason)
{
    case ResultReason::RecognizedSpeech:
        cout << "We recognized: " << result->Text << std::endl;
        break;
    case ResultReason::NoMatch:
        cout << "NOMATCH: Speech could not be recognized." << std::endl;
        break;
    case ResultReason::Canceled:
        {
            auto cancellation = CancellationDetails::FromResult(result);
            cout << "CANCELED: Reason=" << (int)cancellation->Reason << std::endl;
    
            if (cancellation->Reason == CancellationReason::Error) {
                cout << "CANCELED: ErrorCode= " << (int)cancellation->ErrorCode << std::endl;
                cout << "CANCELED: ErrorDetails=" << cancellation->ErrorDetails << std::endl;
                cout << "CANCELED: Did you set the speech resource key and region values?" << std::endl;
            }
        }
        break;
    default:
        break;
}

Continue herkenning

Continue herkenning is wat ingewikkelder dan eenmalige herkenning. U moet zich abonneren op de gebeurtenissen Recognizing, Recognizeden Canceled om de herkenningsresultaten op te halen. Als u de herkenning wilt stoppen, moet u StopContinuousRecognitionAsync aanroepen. Hier volgt een voorbeeld van hoe doorlopende herkenning wordt uitgevoerd op een audio-invoerbestand.

Begin met het definiëren van de invoer en initialiseren SpeechRecognizer:

auto audioConfig = AudioConfig::FromWavFileInput("YourAudioFile.wav");
auto speechRecognizer = SpeechRecognizer::FromConfig(config, audioConfig);

Maak vervolgens een variabele om de status van spraakherkenning te beheren. Declareer promise<void> omdat u aan het begin van de herkenning veilig kunt aannemen dat deze niet is voltooid:

promise<void> recognitionEnd;

Abonneer u vervolgens op de gebeurtenissen die SpeechRecognizer worden verzonden:

  • Recognizing: Signaal voor gebeurtenissen die tussenliggende herkenningsresultaten bevatten.
  • Recognized: Signaal voor gebeurtenissen die uiteindelijke herkenningsresultaten bevatten, die duiden op een geslaagde herkenningspoging.
  • SessionStopped: Signaal voor gebeurtenissen die het einde van een herkenningssessie (bewerking) aangeven.
  • Canceled: Signaal voor gebeurtenissen die geannuleerde herkenningsresultaten bevatten. Deze resultaten geven een herkenningspoging aan die is geannuleerd als gevolg van een directe annuleringsaanvraag. Ze geven ook een transport- of protocolfout aan.
speechRecognizer->Recognizing.Connect([](const SpeechRecognitionEventArgs& e)
    {
        cout << "Recognizing:" << e.Result->Text << std::endl;
    });

speechRecognizer->Recognized.Connect([](const SpeechRecognitionEventArgs& e)
    {
        if (e.Result->Reason == ResultReason::RecognizedSpeech)
        {
            cout << "RECOGNIZED: Text=" << e.Result->Text 
                 << " (text could not be translated)" << std::endl;
        }
        else if (e.Result->Reason == ResultReason::NoMatch)
        {
            cout << "NOMATCH: Speech could not be recognized." << std::endl;
        }
    });

speechRecognizer->Canceled.Connect([&recognitionEnd](const SpeechRecognitionCanceledEventArgs& e)
    {
        cout << "CANCELED: Reason=" << (int)e.Reason << std::endl;
        if (e.Reason == CancellationReason::Error)
        {
            cout << "CANCELED: ErrorCode=" << (int)e.ErrorCode << "\n"
                 << "CANCELED: ErrorDetails=" << e.ErrorDetails << "\n"
                 << "CANCELED: Did you set the speech resource key and region values?" << std::endl;

            recognitionEnd.set_value(); // Notify to stop recognition.
        }
    });

speechRecognizer->SessionStopped.Connect([&recognitionEnd](const SessionEventArgs& e)
    {
        cout << "Session stopped.";
        recognitionEnd.set_value(); // Notify to stop recognition.
    });

Als alles is ingesteld, roept u StopContinuousRecognitionAsync aan om te beginnen met herkennen:

// Starts continuous recognition. Uses StopContinuousRecognitionAsync() to stop recognition.
speechRecognizer->StartContinuousRecognitionAsync().get();

// Waits for recognition end.
recognitionEnd.get_future().get();

// Stops recognition.
speechRecognizer->StopContinuousRecognitionAsync().get();

De brontaal wijzigen

Een veelvoorkomende taak voor spraakherkenning is het opgeven van de invoer- (of bron)taal. In het volgende voorbeeld ziet u hoe u de invoertaal wijzigt in het Duits. Zoek uw SpeechConfig exemplaar in uw code en voeg deze regel direct eronder toe:

speechConfig->SetSpeechRecognitionLanguage("de-DE");

SetSpeechRecognitionLanguage is een parameter die een tekenreeks als argument gebruikt. Zie de lijst met ondersteunde landinstellingen voor spraak naar tekst voor meer informatie.

Taalidentificatie

U kunt taalidentificatie gebruiken met spraak-naar-tekstherkenning wanneer u de taal in een audiobron moet identificeren en deze vervolgens wilt transcriberen naar tekst.

Zie Taalidentificatie voor een volledig codevoorbeeld.

Een aangepast eindpunt gebruiken

Met aangepaste spraak kunt u uw eigen gegevens uploaden, een aangepast model testen en trainen, de nauwkeurigheid tussen modellen vergelijken en een model implementeren op een aangepast eindpunt. In het volgende voorbeeld ziet u hoe u een aangepast eindpunt instelt.

auto speechConfig = SpeechConfig::FromSubscription("YourSubscriptionKey", "YourServiceRegion");
speechConfig->SetEndpointId("YourEndpointId");
auto speechRecognizer = SpeechRecognizer::FromConfig(speechConfig);

Een container uitvoeren en gebruiken

Spraakcontainers bieden websocket-api's voor query-eindpunten die toegankelijk zijn via de Speech SDK en Speech CLI. De Speech SDK en Speech CLI maken standaard gebruik van de openbare Speech-service. Als u de container wilt gebruiken, moet u de initialisatiemethode wijzigen. Gebruik een containerhost-URL in plaats van sleutel en regio.

Zie Host-URL's in Speech-containers installeren en uitvoeren met Docker voor meer informatie over containers.

Referentiedocumentatiepakket (Go) | Aanvullende voorbeelden op GitHub |

In deze handleiding leert u hoe u spraak in realtime kunt herkennen en transcriberen naar tekst.

Spraak naar tekst herkennen vanuit een microfoon

Gebruik het volgende codevoorbeeld om spraakherkenning uit te voeren met de standaardmicrofoon van het apparaat. Vervang de variabelen subscription en region door respectievelijk uw spraaksleutel en locatie/regio. Maak een spraakresource in Azure Portal. Zie Een multiserviceresource maken voor meer informatie. Als u het script uitvoert, wordt een herkenningssessie gestart op uw standaardmicrofoon en uitvoertekst:

package main

import (
	"bufio"
	"fmt"
	"os"

	"github.com/Microsoft/cognitive-services-speech-sdk-go/audio"
	"github.com/Microsoft/cognitive-services-speech-sdk-go/speech"
)

func sessionStartedHandler(event speech.SessionEventArgs) {
	defer event.Close()
	fmt.Println("Session Started (ID=", event.SessionID, ")")
}

func sessionStoppedHandler(event speech.SessionEventArgs) {
	defer event.Close()
	fmt.Println("Session Stopped (ID=", event.SessionID, ")")
}

func recognizingHandler(event speech.SpeechRecognitionEventArgs) {
	defer event.Close()
	fmt.Println("Recognizing:", event.Result.Text)
}

func recognizedHandler(event speech.SpeechRecognitionEventArgs) {
	defer event.Close()
	fmt.Println("Recognized:", event.Result.Text)
}

func cancelledHandler(event speech.SpeechRecognitionCanceledEventArgs) {
	defer event.Close()
	fmt.Println("Received a cancellation: ", event.ErrorDetails)
	fmt.Println("Did you set the speech resource key and region values?")
}

func main() {
    subscription :=  "YourSpeechKey"
    region := "YourSpeechRegion"

	audioConfig, err := audio.NewAudioConfigFromDefaultMicrophoneInput()
	if err != nil {
		fmt.Println("Got an error: ", err)
		return
	}
	defer audioConfig.Close()
	config, err := speech.NewSpeechConfigFromSubscription(subscription, region)
	if err != nil {
		fmt.Println("Got an error: ", err)
		return
	}
	defer config.Close()
	speechRecognizer, err := speech.NewSpeechRecognizerFromConfig(config, audioConfig)
	if err != nil {
		fmt.Println("Got an error: ", err)
		return
	}
	defer speechRecognizer.Close()
	speechRecognizer.SessionStarted(sessionStartedHandler)
	speechRecognizer.SessionStopped(sessionStoppedHandler)
	speechRecognizer.Recognizing(recognizingHandler)
	speechRecognizer.Recognized(recognizedHandler)
	speechRecognizer.Canceled(cancelledHandler)
	speechRecognizer.StartContinuousRecognitionAsync()
	defer speechRecognizer.StopContinuousRecognitionAsync()
	bufio.NewReader(os.Stdin).ReadBytes('\n')
}

Voer de volgende opdrachten uit om een go.mod-bestand te maken dat is gekoppeld aan onderdelen die worden gehost op GitHub:

go mod init quickstart
go get github.com/Microsoft/cognitive-services-speech-sdk-go

Bouw nu de code en voer deze uit:

go build
go run quickstart

Zie de referentie-inhoud voor de SpeechConfig klasse en de referentie-inhoud voor de SpeechRecognizer klasse voor gedetailleerde informatie.

Spraak naar tekst herkennen vanuit een audiobestand

Gebruik het volgende voorbeeld om spraakherkenning uit te voeren met een audiobestand. Vervang de variabelen subscription en region door respectievelijk uw spraaksleutel en locatie/regio. Maak een spraakresource in Azure Portal. Zie Een multiserviceresource maken voor meer informatie. Vervang de variabele file bovendien door een pad naar een .wav-bestand . Wanneer u het script uitvoert, herkent het spraak uit het bestand en voert het tekstresultaat uit:

package main

import (
	"fmt"
	"time"

	"github.com/Microsoft/cognitive-services-speech-sdk-go/audio"
	"github.com/Microsoft/cognitive-services-speech-sdk-go/speech"
)

func main() {
    subscription :=  "YourSpeechKey"
    region := "YourSpeechRegion"
    file := "path/to/file.wav"

	audioConfig, err := audio.NewAudioConfigFromWavFileInput(file)
	if err != nil {
		fmt.Println("Got an error: ", err)
		return
	}
	defer audioConfig.Close()
	config, err := speech.NewSpeechConfigFromSubscription(subscription, region)
	if err != nil {
		fmt.Println("Got an error: ", err)
		return
	}
	defer config.Close()
	speechRecognizer, err := speech.NewSpeechRecognizerFromConfig(config, audioConfig)
	if err != nil {
		fmt.Println("Got an error: ", err)
		return
	}
	defer speechRecognizer.Close()
	speechRecognizer.SessionStarted(func(event speech.SessionEventArgs) {
		defer event.Close()
		fmt.Println("Session Started (ID=", event.SessionID, ")")
	})
	speechRecognizer.SessionStopped(func(event speech.SessionEventArgs) {
		defer event.Close()
		fmt.Println("Session Stopped (ID=", event.SessionID, ")")
	})

	task := speechRecognizer.RecognizeOnceAsync()
	var outcome speech.SpeechRecognitionOutcome
	select {
	case outcome = <-task:
	case <-time.After(5 * time.Second):
		fmt.Println("Timed out")
		return
	}
	defer outcome.Close()
	if outcome.Error != nil {
		fmt.Println("Got an error: ", outcome.Error)
	}
	fmt.Println("Got a recognition!")
	fmt.Println(outcome.Result.Text)
}

Voer de volgende opdrachten uit om een go.mod-bestand te maken dat is gekoppeld aan onderdelen die worden gehost op GitHub:

go mod init quickstart
go get github.com/Microsoft/cognitive-services-speech-sdk-go

Bouw nu de code en voer deze uit:

go build
go run quickstart

Zie de referentie-inhoud voor de SpeechConfig klasse en de referentie-inhoud voor de SpeechRecognizer klasse voor gedetailleerde informatie.

Een container uitvoeren en gebruiken

Spraakcontainers bieden websocket-api's voor query-eindpunten die toegankelijk zijn via de Speech SDK en Speech CLI. De Speech SDK en Speech CLI maken standaard gebruik van de openbare Speech-service. Als u de container wilt gebruiken, moet u de initialisatiemethode wijzigen. Gebruik een containerhost-URL in plaats van sleutel en regio.

Zie Host-URL's in Speech-containers installeren en uitvoeren met Docker voor meer informatie over containers.

Referentiedocumentatie | Aanvullende voorbeelden op GitHub

In deze handleiding leert u hoe u spraak in realtime kunt herkennen en transcriberen naar tekst.

Een spraakconfiguratie maken

Als u de Speech-service wilt aanroepen met behulp van de Speech SDK, moet u een SpeechConfig-exemplaar maken. Deze klasse bevat informatie over uw abonnement, zoals uw sleutel en de bijbehorende locatie/regio, eindpunt, host of autorisatietoken.

  1. Maak een SpeechConfig exemplaar met behulp van uw sleutel en locatie/regio.
  2. Maak een spraakresource in Azure Portal. Zie Een multiserviceresource maken voor meer informatie.
import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.AudioConfig;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;

public class Program {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        SpeechConfig speechConfig = SpeechConfig.fromSubscription("<paste-your-subscription-key>", "<paste-your-region>");
    }
}

U kunt op een aantal andere manieren initialiseren SpeechConfig :

  • Gebruik een eindpunt en geef een Speech-service-eindpunt door. Een sleutel of autorisatietoken is optioneel.
  • Gebruik een host en geef een hostadres door. Een sleutel of autorisatietoken is optioneel.
  • Gebruik een autorisatietoken met de bijbehorende regio/locatie.

Notitie

Ongeacht of u spraakherkenning, spraaksynthese, vertaling of intentieherkenning uitvoert, u maakt altijd een configuratie.

Spraak herkennen met een microfoon

Als u spraak wilt herkennen met behulp van de microfoon van uw apparaat, maakt u een AudioConfig exemplaar met behulp van de fromDefaultMicrophoneInput() methode. Initialiseer vervolgens het SpeechRecognizer object door door te geven audioConfig en config.

import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.AudioConfig;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;

public class Program {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        SpeechConfig speechConfig = SpeechConfig.fromSubscription("<paste-your-subscription-key>", "<paste-your-region>");
        fromMic(speechConfig);
    }

    public static void fromMic(SpeechConfig speechConfig) throws InterruptedException, ExecutionException {
        AudioConfig audioConfig = AudioConfig.fromDefaultMicrophoneInput();
        SpeechRecognizer speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);

        System.out.println("Speak into your microphone.");
        Future<SpeechRecognitionResult> task = speechRecognizer.recognizeOnceAsync();
        SpeechRecognitionResult result = task.get();
        System.out.println("RECOGNIZED: Text=" + result.getText());
    }
}

Als u een specifiek audio-invoerapparaat wilt gebruiken, moet u de apparaat-id opgeven in AudioConfig. Zie Een audio-invoerapparaat selecteren met de Speech SDK voor meer informatie over het ophalen van de apparaat-id voor uw audio-invoerapparaat.

Spraak herkennen uit een bestand

Als u spraak uit een audiobestand wilt herkennen in plaats van een microfoon te gebruiken, moet u nog steeds een AudioConfig exemplaar maken. Maar voor dit geval bel FromDefaultMicrophoneInput()je niet. U belt fromWavFileInput() en geeft het bestandspad door:

import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.AudioConfig;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;

public class Program {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        SpeechConfig speechConfig = SpeechConfig.fromSubscription("<paste-your-subscription-key>", "<paste-your-region>");
        fromFile(speechConfig);
    }

    public static void fromFile(SpeechConfig speechConfig) throws InterruptedException, ExecutionException {
        AudioConfig audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
        SpeechRecognizer speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
        
        Future<SpeechRecognitionResult> task = speechRecognizer.recognizeOnceAsync();
        SpeechRecognitionResult result = task.get();
        System.out.println("RECOGNIZED: Text=" + result.getText());
    }
}

Afhandeling van fouten

In de vorige voorbeelden wordt alleen de herkende tekst weergegeven met behulp van result.getText(). Als u fouten en andere antwoorden wilt afhandelen, moet u code schrijven om het resultaat af te handelen. In het volgende voorbeeld wordt de eigenschap result.getReason() geëvalueerd en:

  • Hiermee wordt het herkenningsresultaat afgedrukt: ResultReason.RecognizedSpeech.
  • Als er geen herkenningsmatch is, informeert deze de gebruiker: ResultReason.NoMatch.
  • Als er een fout optreedt, wordt het foutbericht afgedrukt: ResultReason.Canceled.
switch (result.getReason()) {
    case ResultReason.RecognizedSpeech:
        System.out.println("We recognized: " + result.getText());
        exitCode = 0;
        break;
    case ResultReason.NoMatch:
        System.out.println("NOMATCH: Speech could not be recognized.");
        break;
    case ResultReason.Canceled: {
            CancellationDetails cancellation = CancellationDetails.fromResult(result);
            System.out.println("CANCELED: Reason=" + cancellation.getReason());

            if (cancellation.getReason() == CancellationReason.Error) {
                System.out.println("CANCELED: ErrorCode=" + cancellation.getErrorCode());
                System.out.println("CANCELED: ErrorDetails=" + cancellation.getErrorDetails());
                System.out.println("CANCELED: Did you set the speech resource key and region values?");
            }
        }
        break;
}

Continue herkenning gebruiken

In de vorige voorbeelden wordt een eenmalige herkenning gebruikt, die één uiting herkent. Het einde van één uiting wordt bepaald door te luisteren naar stilte aan het einde of tot een maximum van 15 seconden audio is verwerkt.

Daarentegen gebruikt u continue herkenning wanneer u wilt bepalen wanneer u wilt stoppen met herkennen. U moet zich abonneren op de gebeurtenissen recognizing, recognizeden canceled om de herkenningsresultaten op te halen. Als u de herkenning wilt stoppen, moet u stopContinuousRecognitionAsyncaanroepen. Hier volgt een voorbeeld van hoe u continue herkenning kunt uitvoeren op een audio-invoerbestand.

Begin met het definiëren van de invoer en initialiseren SpeechRecognizer:

AudioConfig audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
SpeechRecognizer speechRecognizer = new SpeechRecognizer(config, audioConfig);

Maak vervolgens een variabele om de status van spraakherkenning te beheren. Declareer een Semaphore exemplaar in het klassebereik:

private static Semaphore stopTranslationWithFileSemaphore;

Abonneer u vervolgens op de gebeurtenissen die SpeechRecognizer worden verzonden:

  • recognizing: Signaal voor gebeurtenissen die tussenliggende herkenningsresultaten bevatten.
  • recognized: Signaal voor gebeurtenissen die uiteindelijke herkenningsresultaten bevatten, die duiden op een geslaagde herkenningspoging.
  • sessionStopped: Signaal voor gebeurtenissen die het einde van een herkenningssessie (bewerking) aangeven.
  • canceled: Signaal voor gebeurtenissen die geannuleerde herkenningsresultaten bevatten. Deze resultaten geven een herkenningspoging aan die is geannuleerd als gevolg van een directe annuleringsaanvraag. Ze geven ook een transport- of protocolfout aan.
// First initialize the semaphore.
stopTranslationWithFileSemaphore = new Semaphore(0);

speechRecognizer.recognizing.addEventListener((s, e) -> {
    System.out.println("RECOGNIZING: Text=" + e.getResult().getText());
});

speechRecognizer.recognized.addEventListener((s, e) -> {
    if (e.getResult().getReason() == ResultReason.RecognizedSpeech) {
        System.out.println("RECOGNIZED: Text=" + e.getResult().getText());
    }
    else if (e.getResult().getReason() == ResultReason.NoMatch) {
        System.out.println("NOMATCH: Speech could not be recognized.");
    }
});

speechRecognizer.canceled.addEventListener((s, e) -> {
    System.out.println("CANCELED: Reason=" + e.getReason());

    if (e.getReason() == CancellationReason.Error) {
        System.out.println("CANCELED: ErrorCode=" + e.getErrorCode());
        System.out.println("CANCELED: ErrorDetails=" + e.getErrorDetails());
        System.out.println("CANCELED: Did you set the speech resource key and region values?");
    }

    stopTranslationWithFileSemaphore.release();
});

speechRecognizer.sessionStopped.addEventListener((s, e) -> {
    System.out.println("\n    Session stopped event.");
    stopTranslationWithFileSemaphore.release();
});

Als alles is ingesteld, roept u startContinuousRecognitionAsync aan om te beginnen met herkennen:

// Starts continuous recognition. Uses StopContinuousRecognitionAsync() to stop recognition.
speechRecognizer.startContinuousRecognitionAsync().get();

// Waits for completion.
stopTranslationWithFileSemaphore.acquire();

// Stops recognition.
speechRecognizer.stopContinuousRecognitionAsync().get();

De brontaal wijzigen

Een veelvoorkomende taak voor spraakherkenning is het opgeven van de invoer- (of bron)taal. In het volgende voorbeeld ziet u hoe u de invoertaal wijzigt in het Frans. Zoek uw SpeechConfig exemplaar in uw code en voeg deze regel direct eronder toe:

config.setSpeechRecognitionLanguage("fr-FR");

setSpeechRecognitionLanguage is een parameter die een tekenreeks als argument gebruikt. Raadpleeg de lijst met ondersteunde taalinstellingen voor spraak naar tekst.

Taalidentificatie

U kunt taalidentificatie gebruiken met spraak-naar-tekstherkenning wanneer u de taal in een audiobron moet identificeren en deze vervolgens wilt transcriberen naar tekst.

Zie Taalidentificatie voor een volledig codevoorbeeld.

Een aangepast eindpunt gebruiken

Met aangepaste spraak kunt u uw eigen gegevens uploaden, een aangepast model testen en trainen, de nauwkeurigheid tussen modellen vergelijken en een model implementeren op een aangepast eindpunt. In het volgende voorbeeld ziet u hoe u een aangepast eindpunt instelt:

SpeechConfig speechConfig = SpeechConfig.FromSubscription("YourSubscriptionKey", "YourServiceRegion");
speechConfig.setEndpointId("YourEndpointId");
SpeechRecognizer speechRecognizer = new SpeechRecognizer(speechConfig);

Een container uitvoeren en gebruiken

Spraakcontainers bieden websocket-api's voor query-eindpunten die toegankelijk zijn via de Speech SDK en Speech CLI. De Speech SDK en Speech CLI maken standaard gebruik van de openbare Speech-service. Als u de container wilt gebruiken, moet u de initialisatiemethode wijzigen. Gebruik een containerhost-URL in plaats van sleutel en regio.

Zie Host-URL's in Speech-containers installeren en uitvoeren met Docker voor meer informatie over containers.

Referentiedocumentatiepakket (npm) | Aanvullende voorbeelden op GitHub | Library-broncode |

In deze handleiding leert u hoe u spraak in realtime kunt herkennen en transcriberen naar tekst.

Een spraakconfiguratie maken

Als u de Speech-service wilt aanroepen met behulp van de Speech SDK, moet u een SpeechConfig exemplaar maken. Deze klasse bevat informatie over uw abonnement, zoals uw sleutel en de bijbehorende locatie/regio, eindpunt, host of autorisatietoken.

  1. Maak een SpeechConfig exemplaar met behulp van uw sleutel en locatie/regio.
  2. Maak een spraakresource in Azure Portal. Zie Een multiserviceresource maken voor meer informatie.
const speechConfig = sdk.SpeechConfig.fromSubscription("YourSpeechKey", "YourSpeechRegion");

U kunt op een aantal andere manieren initialiseren SpeechConfig :

  • Gebruik een eindpunt en geef een Speech-service-eindpunt door. Een sleutel of autorisatietoken is optioneel.
  • Gebruik een host en geef een hostadres door. Een sleutel of autorisatietoken is optioneel.
  • Gebruik een autorisatietoken met de bijbehorende regio/locatie.

Notitie

Ongeacht of u spraakherkenning, spraaksynthese, vertaling of intentieherkenning uitvoert, maakt u altijd een configuratie.

Spraak herkennen met een microfoon

Spraak herkennen vanaf een microfoon wordt niet ondersteund in Node.js. Dit wordt alleen ondersteund in een javaScript-omgeving in een browser. Zie het React-voorbeeld en de implementatie van spraak naar tekst vanuit een microfoon op GitHub voor meer informatie. Het React-voorbeeld toont ontwerppatronen voor de uitwisseling en het beheer van verificatietokens. Ook wordt de opname van audio van een microfoon of bestand voor spraak-naar-tekstconversies weergegeven.

Notitie

Als u een specifiek audio-invoerapparaat wilt gebruiken, moet u de apparaat-id in het AudioConfig object opgeven. Zie Een audio-invoerapparaat selecteren met de Speech SDK voor meer informatie.

Spraak herkennen uit een bestand

Als u spraak uit een audiobestand wilt herkennen, maakt u een AudioConfig exemplaar met behulp van de fromWavFileInput() methode, die een Buffer object accepteert. Initialiseer SpeechRecognizer vervolgens door door te geven audioConfig en speechConfig.

const fs = require('fs');
const sdk = require("microsoft-cognitiveservices-speech-sdk");
const speechConfig = sdk.SpeechConfig.fromSubscription("YourSpeechKey", "YourSpeechRegion");

function fromFile() {
    let audioConfig = sdk.AudioConfig.fromWavFileInput(fs.readFileSync("YourAudioFile.wav"));
    let speechRecognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);

    speechRecognizer.recognizeOnceAsync(result => {
        console.log(`RECOGNIZED: Text=${result.text}`);
        speechRecognizer.close();
    });
}
fromFile();

Spraak herkennen vanuit een stroom in het geheugen

Voor veel gebruiksvoorbeelden zijn uw audiogegevens waarschijnlijk afkomstig van Azure Blob Storage. Of het bevindt zich al in het geheugen als een ArrayBuffer of een vergelijkbare onbewerkte gegevensstructuur. De volgende code:

  • Hiermee maakt u een pushstream met behulp van createPushStream().
  • Leest een .wav-bestand met behulp van fs.createReadStream voor demonstratiedoeleinden. Als u al audiogegevens hebt, ArrayBufferkunt u rechtstreeks doorgaan naar het schrijven van de inhoud naar de invoerstroom.
  • Hiermee maakt u een audioconfiguratie met behulp van de pushstream.
const fs = require('fs');
const sdk = require("microsoft-cognitiveservices-speech-sdk");
const speechConfig = sdk.SpeechConfig.fromSubscription("YourSpeechKey", "YourSpeechRegion");

function fromStream() {
    let pushStream = sdk.AudioInputStream.createPushStream();

    fs.createReadStream("YourAudioFile.wav").on('data', function(arrayBuffer) {
        pushStream.write(arrayBuffer.slice());
    }).on('end', function() {
        pushStream.close();
    });
 
    let audioConfig = sdk.AudioConfig.fromStreamInput(pushStream);
    let speechRecognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);
    speechRecognizer.recognizeOnceAsync(result => {
        console.log(`RECOGNIZED: Text=${result.text}`);
        speechRecognizer.close();
    });
}
fromStream();

Als u een pushstream als invoer gebruikt, wordt ervan uitgegaan dat de audiogegevens een onbewerkte PCM-gegevens (pulse-code modulation) zijn waarmee eventuele headers worden overgeslagen. De API werkt nog steeds in bepaalde gevallen als de header niet is overgeslagen. Voor de beste resultaten kunt u overwegen om logica te implementeren om de headers af te lezen, zodat deze fs begint aan het begin van de audiogegevens.

Afhandeling van fouten

In de vorige voorbeelden wordt alleen de herkende tekst opgehaald uit de result.text eigenschap. Als u fouten en andere antwoorden wilt afhandelen, moet u code schrijven om het resultaat af te handelen. Met de volgende code wordt de result.reason-eigenschap geëvalueerd en:

  • Hiermee wordt het herkenningsresultaat afgedrukt: ResultReason.RecognizedSpeech.
  • Als er geen herkenningsmatch is, informeert deze de gebruiker: ResultReason.NoMatch.
  • Als er een fout optreedt, wordt het foutbericht afgedrukt: ResultReason.Canceled.
switch (result.reason) {
    case sdk.ResultReason.RecognizedSpeech:
        console.log(`RECOGNIZED: Text=${result.text}`);
        break;
    case sdk.ResultReason.NoMatch:
        console.log("NOMATCH: Speech could not be recognized.");
        break;
    case sdk.ResultReason.Canceled:
        const cancellation = sdk.CancellationDetails.fromResult(result);
        console.log(`CANCELED: Reason=${cancellation.reason}`);

        if (cancellation.reason == sdk.CancellationReason.Error) {
            console.log(`CANCELED: ErrorCode=${cancellation.ErrorCode}`);
            console.log(`CANCELED: ErrorDetails=${cancellation.errorDetails}`);
            console.log("CANCELED: Did you set the speech resource key and region values?");
        }
        break;
    }

Continue herkenning gebruiken

In de vorige voorbeelden wordt een eenmalige herkenning gebruikt, die één uiting herkent. Het einde van één uiting wordt bepaald door te luisteren naar stilte aan het einde of tot een maximum van 15 seconden audio is verwerkt.

U kunt daarentegen continue herkenning gebruiken wanneer u wilt bepalen wanneer u wilt stoppen met herkennen. U moet zich abonneren op de gebeurtenissen Recognizing, Recognizeden Canceled om de herkenningsresultaten op te halen. Als u de herkenning wilt stoppen, moet u stopContinuousRecognitionAsyncaanroepen. Hier volgt een voorbeeld van hoe doorlopende herkenning wordt uitgevoerd op een audio-invoerbestand.

Begin met het definiëren van de invoer en initialiseren SpeechRecognizer:

const speechRecognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);

Abonneer u vervolgens op de gebeurtenissen die zijn verzonden vanaf SpeechRecognizer:

  • recognizing: Signaal voor gebeurtenissen die tussenliggende herkenningsresultaten bevatten.
  • recognized: Signaal voor gebeurtenissen die uiteindelijke herkenningsresultaten bevatten, die duiden op een geslaagde herkenningspoging.
  • sessionStopped: Signaal voor gebeurtenissen die het einde van een herkenningssessie (bewerking) aangeven.
  • canceled: Signaal voor gebeurtenissen die geannuleerde herkenningsresultaten bevatten. Deze resultaten geven een herkenningspoging aan die is geannuleerd als gevolg van een directe annuleringsaanvraag. Ze geven ook een transport- of protocolfout aan.
speechRecognizer.recognizing = (s, e) => {
    console.log(`RECOGNIZING: Text=${e.result.text}`);
};

speechRecognizer.recognized = (s, e) => {
    if (e.result.reason == sdk.ResultReason.RecognizedSpeech) {
        console.log(`RECOGNIZED: Text=${e.result.text}`);
    }
    else if (e.result.reason == sdk.ResultReason.NoMatch) {
        console.log("NOMATCH: Speech could not be recognized.");
    }
};

speechRecognizer.canceled = (s, e) => {
    console.log(`CANCELED: Reason=${e.reason}`);

    if (e.reason == sdk.CancellationReason.Error) {
        console.log(`"CANCELED: ErrorCode=${e.errorCode}`);
        console.log(`"CANCELED: ErrorDetails=${e.errorDetails}`);
        console.log("CANCELED: Did you set the speech resource key and region values?");
    }

    speechRecognizer.stopContinuousRecognitionAsync();
};

speechRecognizer.sessionStopped = (s, e) => {
    console.log("\n    Session stopped event.");
    speechRecognizer.stopContinuousRecognitionAsync();
};

Als alles is ingesteld, roept u startContinuousRecognitionAsync aan om te beginnen met herkennen:

speechRecognizer.startContinuousRecognitionAsync();

// Make the following call at some point to stop recognition:
// speechRecognizer.stopContinuousRecognitionAsync();

De brontaal wijzigen

Een veelvoorkomende taak voor spraakherkenning is het opgeven van de invoer- (of bron)taal. In het volgende voorbeeld ziet u hoe u de invoertaal wijzigt in Italiaans. Zoek uw SpeechConfig exemplaar in uw code en voeg deze regel direct eronder toe:

speechConfig.speechRecognitionLanguage = "it-IT";

De eigenschap speechRecognitionLanguage verwacht een indelingstekenreeks voor taal-landinstellingen. Zie de lijst met ondersteunde landinstellingen voor spraak naar tekst voor meer informatie.

Taalidentificatie

U kunt taalidentificatie gebruiken met spraak-naar-tekstherkenning wanneer u de taal in een audiobron moet identificeren en deze vervolgens wilt transcriberen naar tekst.

Zie Taalidentificatie voor een volledig codevoorbeeld.

Een aangepast eindpunt gebruiken

Met aangepaste spraak kunt u uw eigen gegevens uploaden, een aangepast model testen en trainen, de nauwkeurigheid tussen modellen vergelijken en een model implementeren op een aangepast eindpunt. In het volgende voorbeeld ziet u hoe u een aangepast eindpunt instelt.

var speechConfig = SpeechSDK.SpeechConfig.fromSubscription("YourSubscriptionKey", "YourServiceRegion");
speechConfig.endpointId = "YourEndpointId";
var speechRecognizer = new SpeechSDK.SpeechRecognizer(speechConfig);

Een container uitvoeren en gebruiken

Spraakcontainers bieden websocket-api's voor query-eindpunten die toegankelijk zijn via de Speech SDK en Speech CLI. De Speech SDK en Speech CLI maken standaard gebruik van de openbare Speech-service. Als u de container wilt gebruiken, moet u de initialisatiemethode wijzigen. Gebruik een containerhost-URL in plaats van sleutel en regio.

Zie Host-URL's in Speech-containers installeren en uitvoeren met Docker voor meer informatie over containers.

Referentiedocumentatiepakket (downloaden) | Aanvullende voorbeelden op GitHub |

In deze handleiding leert u hoe u spraak in realtime kunt herkennen en transcriberen naar tekst.

Speech-SDK en -voorbeelden installeren

De opslagplaats Azure-Samples/cognitive-services-speech-sdk bevat voorbeelden die zijn geschreven in Objective-C voor iOS en Mac. Selecteer een koppeling om de installatie-instructies voor elk voorbeeld te bekijken:

Zie de Speech SDK voor Objective-C-naslaginformatie voor meer informatie.

Een aangepast eindpunt gebruiken

Met aangepaste spraak kunt u uw eigen gegevens uploaden, een aangepast model testen en trainen, de nauwkeurigheid tussen modellen vergelijken en een model implementeren op een aangepast eindpunt. In het volgende voorbeeld ziet u hoe u een aangepast eindpunt instelt:

SPXSpeechConfiguration *speechConfig = [[SPXSpeechConfiguration alloc] initWithSubscription:"YourSubscriptionKey" region:"YourServiceRegion"];
speechConfig.endpointId = "YourEndpointId";
SPXSpeechRecognizer* speechRecognizer = [[SPXSpeechRecognizer alloc] init:speechConfig];

Een container uitvoeren en gebruiken

Spraakcontainers bieden websocket-api's voor query-eindpunten die toegankelijk zijn via de Speech SDK en Speech CLI. De Speech SDK en Speech CLI maken standaard gebruik van de openbare Speech-service. Als u de container wilt gebruiken, moet u de initialisatiemethode wijzigen. Gebruik een containerhost-URL in plaats van sleutel en regio.

Zie Host-URL's in Speech-containers installeren en uitvoeren met Docker voor meer informatie over containers.

Referentiedocumentatiepakket (downloaden) | Aanvullende voorbeelden op GitHub |

In deze handleiding leert u hoe u spraak in realtime kunt herkennen en transcriberen naar tekst.

Speech-SDK en -voorbeelden installeren

De opslagplaats Azure-Samples/cognitive-services-speech-sdk bevat voorbeelden die zijn geschreven in Swift voor iOS en Mac. Selecteer een koppeling om de installatie-instructies voor elk voorbeeld te bekijken:

Zie de Naslaginformatie over de Speech SDK voor Swift voor meer informatie.

Een aangepast eindpunt gebruiken

Met aangepaste spraak kunt u uw eigen gegevens uploaden, een aangepast model testen en trainen, de nauwkeurigheid tussen modellen vergelijken en een model implementeren op een aangepast eindpunt. In het volgende voorbeeld ziet u hoe u een aangepast eindpunt instelt:

let speechConfig = SPXSpeechConfiguration(subscription: "YourSubscriptionKey", region: "YourServiceRegion");
speechConfig.endpointId = "YourEndpointId";
let speechRecognizer = SPXSpeechRecognizer(speechConfiguration: speechConfig);

Een container uitvoeren en gebruiken

Spraakcontainers bieden websocket-api's voor query-eindpunten die toegankelijk zijn via de Speech SDK en Speech CLI. De Speech SDK en Speech CLI maken standaard gebruik van de openbare Speech-service. Als u de container wilt gebruiken, moet u de initialisatiemethode wijzigen. Gebruik een containerhost-URL in plaats van sleutel en regio.

Zie Host-URL's in Speech-containers installeren en uitvoeren met Docker voor meer informatie over containers.

Referentiedocumentatiepakket (PyPi) | Aanvullende voorbeelden op GitHub |

In deze handleiding leert u hoe u spraak in realtime kunt herkennen en transcriberen naar tekst.

Een spraakconfiguratie maken

Als u de Speech-service wilt aanroepen met behulp van de Speech SDK, moet u een SpeechConfig exemplaar maken. Deze klasse bevat informatie over uw abonnement, zoals uw spraaksleutel en de bijbehorende locatie/regio, eindpunt, host of autorisatietoken.

  1. Maak een SpeechConfig exemplaar met behulp van uw spraaksleutel en locatie/regio.
  2. Maak een spraakresource in Azure Portal. Zie Een multiserviceresource maken voor meer informatie.
speech_config = speechsdk.SpeechConfig(subscription="YourSpeechKey", region="YourSpeechRegion")

U kunt op een aantal andere manieren initialiseren SpeechConfig :

  • Gebruik een eindpunt en geef een Speech-service-eindpunt door. Een spraaksleutel of autorisatietoken is optioneel.
  • Gebruik een host en geef een hostadres door. Een spraaksleutel of autorisatietoken is optioneel.
  • Gebruik een autorisatietoken met de bijbehorende regio/locatie.

Notitie

Ongeacht of u spraakherkenning, spraaksynthese, vertaling of intentieherkenning uitvoert, maakt u altijd een configuratie.

Spraak herkennen met een microfoon

Als u spraak wilt herkennen met behulp van de microfoon van uw apparaat, maakt u een SpeechRecognizer exemplaar zonder door te geven en geeft u speech_confighet volgende doorAudioConfig:

import azure.cognitiveservices.speech as speechsdk

def from_mic():
    speech_config = speechsdk.SpeechConfig(subscription="YourSpeechKey", region="YourSpeechRegion")
    speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config)

    print("Speak into your microphone.")
    result = speech_recognizer.recognize_once_async().get()
    print(result.text)

from_mic()

Als u een specifiek audio-invoerapparaat wilt gebruiken, moet u de apparaat-id opgeven en AudioConfigdeze doorgeven aan de parameter van audio_config de SpeechRecognizer constructor. Zie Een audio-invoerapparaat selecteren met de Speech SDK voor meer informatie over het ophalen van de apparaat-id voor uw audio-invoerapparaat

Spraak herkennen uit een bestand

Als u spraak uit een audiobestand wilt herkennen in plaats van een microfoon te gebruiken, maakt u een AudioConfig exemplaar en gebruikt u de filename parameter:

import azure.cognitiveservices.speech as speechsdk

def from_file():
    speech_config = speechsdk.SpeechConfig(subscription="YourSpeechKey", region="YourSpeechRegion")
    audio_config = speechsdk.AudioConfig(filename="your_file_name.wav")
    speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_config)

    result = speech_recognizer.recognize_once_async().get()
    print(result.text)

from_file()

Afhandeling van fouten

In de vorige voorbeelden wordt alleen de herkende tekst opgehaald uit de result.text eigenschap. Als u fouten en andere antwoorden wilt afhandelen, moet u code schrijven om het resultaat af te handelen. Met de volgende code wordt de result.reason-eigenschap geëvalueerd en:

  • Hiermee wordt het herkenningsresultaat afgedrukt: speechsdk.ResultReason.RecognizedSpeech.
  • Als er geen herkenningsmatch is, informeert deze de gebruiker: speechsdk.ResultReason.NoMatch.
  • Als er een fout optreedt, wordt het foutbericht afgedrukt: speechsdk.ResultReason.Canceled.
if result.reason == speechsdk.ResultReason.RecognizedSpeech:
    print("Recognized: {}".format(result.text))
elif result.reason == speechsdk.ResultReason.NoMatch:
    print("No speech could be recognized: {}".format(result.no_match_details))
elif result.reason == speechsdk.ResultReason.Canceled:
    cancellation_details = result.cancellation_details
    print("Speech Recognition canceled: {}".format(cancellation_details.reason))
    if cancellation_details.reason == speechsdk.CancellationReason.Error:
        print("Error details: {}".format(cancellation_details.error_details))
        print("Did you set the speech resource key and region values?")

Continue herkenning gebruiken

In de vorige voorbeelden wordt een eenmalige herkenning gebruikt, die één uiting herkent. Het einde van één uiting wordt bepaald door te luisteren naar stilte aan het einde of tot een maximum van 15 seconden audio is verwerkt.

Daarentegen gebruikt u continue herkenning wanneer u wilt bepalen wanneer u wilt stoppen met herkennen. Hiervoor moet u verbinding maken om EventSignal de herkenningsresultaten op te halen. Als u de herkenning wilt stoppen, moet u stop_continuous_recognition() of stop_continuous_recognition()aanroepen. Hier volgt een voorbeeld van hoe doorlopende herkenning wordt uitgevoerd op een audio-invoerbestand.

Begin met het definiëren van de invoer en initialiseren SpeechRecognizer:

audio_config = speechsdk.audio.AudioConfig(filename=weatherfilename)
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_config)

Maak vervolgens een variabele om de status van spraakherkenning te beheren. Stel de variabele in op False omdat u aan het begin van de herkenning veilig kunt aannemen dat deze niet is voltooid:

done = False

Maak nu een callback om continue herkenning te stoppen wanneer evt deze wordt ontvangen. Houd de volgende punten in gedachten:

  • Wanneer evt het bericht wordt ontvangen, wordt het evt afgedrukt.
  • Nadat evt deze is ontvangen, wordt stop_continuous_recognition() aangeroepen om de herkenning te stoppen.
  • De herkenningsstatus is gewijzigd in True.
def stop_cb(evt):
    print('CLOSING on {}'.format(evt))
    speech_recognizer.stop_continuous_recognition()
    nonlocal done
    done = True

In het volgende codevoorbeeld ziet u hoe u callbacks koppelt aan gebeurtenissen die vanuit SpeechRecognizerworden verzonden. De gebeurtenissen zijn:

  • recognizing: Signaal voor gebeurtenissen die tussenliggende herkenningsresultaten bevatten.
  • recognized: Signaal voor gebeurtenissen die uiteindelijke herkenningsresultaten bevatten, die duiden op een geslaagde herkenningspoging.
  • session_started: Signaal voor gebeurtenissen die het begin van een herkenningssessie (bewerking) aangeven.
  • session_stopped: Signaal voor gebeurtenissen die het einde van een herkenningssessie (bewerking) aangeven.
  • canceled: Signaal voor gebeurtenissen die geannuleerde herkenningsresultaten bevatten. Deze resultaten geven een herkenningspoging aan die is geannuleerd als gevolg van een directe annuleringsaanvraag. Ze geven ook een transport- of protocolfout aan.
speech_recognizer.recognizing.connect(lambda evt: print('RECOGNIZING: {}'.format(evt)))
speech_recognizer.recognized.connect(lambda evt: print('RECOGNIZED: {}'.format(evt)))
speech_recognizer.session_started.connect(lambda evt: print('SESSION STARTED: {}'.format(evt)))
speech_recognizer.session_stopped.connect(lambda evt: print('SESSION STOPPED {}'.format(evt)))
speech_recognizer.canceled.connect(lambda evt: print('CANCELED {}'.format(evt)))

speech_recognizer.session_stopped.connect(stop_cb)
speech_recognizer.canceled.connect(stop_cb)

Als alles is ingesteld, kunt u start_continuous_recognition()aanroepen:

speech_recognizer.start_continuous_recognition()
while not done:
    time.sleep(.5)

De brontaal wijzigen

Een veelvoorkomende taak voor spraakherkenning is het opgeven van de invoer- (of bron)taal. In het volgende voorbeeld ziet u hoe u de invoertaal wijzigt in het Duits. Zoek uw SpeechConfig exemplaar in uw code en voeg deze regel direct eronder toe:

speech_config.speech_recognition_language="de-DE"

speech_recognition_language is een parameter die een tekenreeks als argument gebruikt. Zie de lijst met ondersteunde landinstellingen voor spraak naar tekst voor meer informatie.

Taalidentificatie

U kunt taalidentificatie met Spraak gebruiken voor tekstherkenning wanneer u de taal in een audiobron moet identificeren en deze vervolgens wilt transcriberen naar tekst.

Zie Taalidentificatie voor een volledig codevoorbeeld.

Een aangepast eindpunt gebruiken

Met aangepaste spraak kunt u uw eigen gegevens uploaden, een aangepast model testen en trainen, de nauwkeurigheid tussen modellen vergelijken en een model implementeren op een aangepast eindpunt. In het volgende voorbeeld ziet u hoe u een aangepast eindpunt instelt.

speech_config = speechsdk.SpeechConfig(subscription="YourSubscriptionKey", region="YourServiceRegion")
speech_config.endpoint_id = "YourEndpointId"
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config)

Een container uitvoeren en gebruiken

Spraakcontainers bieden websocket-api's voor query-eindpunten die toegankelijk zijn via de Speech SDK en Speech CLI. De Speech SDK en Speech CLI maken standaard gebruik van de openbare Speech-service. Als u de container wilt gebruiken, moet u de initialisatiemethode wijzigen. Gebruik een containerhost-URL in plaats van sleutel en regio.

Zie Host-URL's in Speech-containers installeren en uitvoeren met Docker voor meer informatie over containers.

Spraak-naar-tekst-REST API-verwijzing Speech naar text REST API voor korte audioverwijzing | Aanvullende voorbeelden op GitHub |

In deze handleiding leert u hoe u spraak in realtime kunt herkennen en transcriberen naar tekst.

Spraak naar tekst converteren

Voer de volgende opdracht uit bij een opdrachtprompt: Voeg de volgende waarden in de opdracht in:

  • Uw abonnementssleutel voor de Speech-service.
  • De regio voor de Speech-service.
  • Het pad voor invoeraudiobestanden. U kunt audiobestanden genereren met behulp van tekst naar spraak.
curl --location --request POST 'https://INSERT_REGION_HERE.stt.speech.microsoft.com/speech/recognition/conversation/cognitiveservices/v1?language=en-US' \
--header 'Ocp-Apim-Subscription-Key: INSERT_SUBSCRIPTION_KEY_HERE' \
--header 'Content-Type: audio/wav' \
--data-binary @'INSERT_AUDIO_FILE_PATH_HERE'

U ontvangt een antwoord met een JSON-hoofdtekst, zoals in het volgende voorbeeld:

{
    "RecognitionStatus": "Success",
    "DisplayText": "My voice is my passport, verify me.",
    "Offset": 6600000,
    "Duration": 32100000
}

Zie de naslaginformatie over de REST API voor spraak naar tekst voor meer informatie.

In deze handleiding leert u hoe u spraak in realtime kunt herkennen en transcriberen naar tekst.

Spraak herkennen met een microfoon

Sluit uw pc-microfoon aan en schakel deze in. Schakel alle apps uit die mogelijk ook gebruikmaken van de microfoon. Sommige computers hebben een ingebouwde microfoon, terwijl andere een Bluetooth-apparaat moeten configureren.

Nu bent u klaar om de Speech-CLI uit te voeren om tekst te herkennen uit uw microfoon. Gebruik de opdrachtregel om de map waarin het binair Speech CLI-bestand zich bevindt te veranderen. Voer vervolgens de volgende opdracht uit:

spx recognize --microphone

Notitie

De Speech-CLI wordt standaard ingesteld op Engels. U kunt een andere taal kiezen dan de spraak-naar-teksttabel. Voeg bijvoorbeeld --source de-DE toe om Duitse spraak te herkennen.

Spreek in de microfoon en u kunt transcriptie van uw woorden in realtime in tekst zien. De Speech CLI stopt na een stilteperiode of wanneer u Ctrl+C selecteert.

Spraak herkennen uit een bestand

De Speech-CLI kan spraak herkennen uit veel bestandsindelingen en natuurlijke talen. In dit voorbeeld kunt u elk .wav-bestand (16 KHz of 8 KHz, 16-bits en mono-PCM) gebruiken dat Engelse spraak bevat. Of als u een snel voorbeeld wilt, downloadt u het whatstheweatherlike.wav bestand en kopieert u het naar dezelfde map als het binaire Speech CLI-bestand.

Gebruik de volgende opdracht om de Speech CLI uit te voeren om spraak in het audiobestand te herkennen:

spx recognize --file whatstheweatherlike.wav

Notitie

De Speech-CLI wordt standaard ingesteld op Engels. U kunt een andere taal kiezen dan de spraak-naar-teksttabel. Voeg bijvoorbeeld --source de-DE toe om Duitse spraak te herkennen.

De Speech CLI toont een teksttranscriptie van de spraak op het scherm.

Een container uitvoeren en gebruiken

Spraakcontainers bieden websocket-api's voor query-eindpunten die toegankelijk zijn via de Speech SDK en Speech CLI. De Speech SDK en Speech CLI maken standaard gebruik van de openbare Speech-service. Als u de container wilt gebruiken, moet u de initialisatiemethode wijzigen. Gebruik een containerhost-URL in plaats van sleutel en regio.

Zie Host-URL's in Speech-containers installeren en uitvoeren met Docker voor meer informatie over containers.

Volgende stappen