Spraak herkennen

Speech naar tekst REST API-referentie | Speech naar tekst REST API voor korte audio | Aanvullende voorbeelden op GitHub

In deze handleiding leert u hoe u Azure Speech in Foundry Tools gebruikt voor realtime spraak-naar-tekstconversie. Realtime spraakherkenning is ideaal voor toepassingen die directe transcriptie vereisen, zoals dicteren, hulp bij het callcenter en bijschriften voor livevergaderingen.

Zie quickstart: Spraak herkennen en converteren naar tekst voor meer informatie over het instellen van de omgeving voor een voorbeeldtoepassing.

Spraak naar tekst converteren

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

  • Uw API-sleutel voor de Speech-resource
  • Uw spraakserviceregio
  • Het pad voor het invoeraudiobestand
curl --location --request POST 'https://YourResourceName.cognitiveservices.azure.com/stt/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 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.

Referentiedocumentatie | Package (PyPi) | Aanvullende voorbeelden op GitHub

In deze handleiding leert u hoe u Azure Speech in Foundry Tools gebruikt voor realtime spraak-naar-tekstconversie. Realtime spraakherkenning is ideaal voor toepassingen die directe transcriptie vereisen, zoals dicteren, hulp bij het callcenter en bijschriften voor livevergaderingen.

Zie quickstart: Spraak herkennen en converteren naar tekst voor meer informatie over het instellen van de omgeving voor een voorbeeldtoepassing.

Een spraakconfiguratie-exemplaar 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 Spraak-resource, zoals uw spraaksleutel en de bijbehorende regio, het eindpunt, de host of het autorisatietoken.

  1. Maak een Foundry-resource voor Spraak in de Azure-portal. Haal de spraakresourcesleutel en -regio op.
  2. Maak een SpeechConfig exemplaar met behulp van de volgende code. Vervang YourSpeechKey en YourSpeechRegion door uw Spraak-resourcesleutel en -regio.
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.

Opmerking

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

Spraak herkennen vanaf een microfoon

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

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.")
    speech_recognition_result = speech_recognizer.recognize_once_async().get()
    print(speech_recognition_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 SpeechRecognizer de audio_config constructor. Zie Een audio-invoerapparaat selecteren met de Speech SDK voor meer informatie over het ophalen van de apparaat-id.

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)

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

from_file()

Fouten verwerken

In de vorige voorbeelden wordt alleen de herkende tekst opgehaald uit de speech_recognition_result.text eigenschap. Als u fouten en andere antwoorden wilt afhandelen, moet u code schrijven om het resultaat af te handelen. De volgende code evalueert de speech_recognition_result.reason eigenschap 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 speech_recognition_result.reason == speechsdk.ResultReason.RecognizedSpeech:
    print("Recognized: {}".format(speech_recognition_result.text))
elif speech_recognition_result.reason == speechsdk.ResultReason.NoMatch:
    print("No speech could be recognized: {}".format(speech_recognition_result.no_match_details))
elif speech_recognition_result.reason == speechsdk.ResultReason.Canceled:
    cancellation_details = speech_recognition_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 eenmalige herkenning gebruikt, waarmee één uiting wordt herkend. Het einde van één uiting wordt bepaald door te luisteren naar stilte aan het einde of totdat een maximum van 15 seconden audio wordt verwerkt.

Daarentegen gebruikt u continue herkenning wanneer u wilt bepalen wanneer u wilt stoppen met herkennen. Hiervoor moet u verbinding maken met EventSignal om de herkenningsresultaten op te halen. Als u de herkenning wilt stoppen, moet u stop_continuous_recognition() of stop_continuous_recognition_async()aanroepen. Hier volgt een voorbeeld van hoe continue 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 wordt ontvangen. Houd rekening met deze punten:

  • Wanneer evt wordt ontvangen, wordt het evt-bericht afgedrukt.
  • Nadat evt is ontvangen, wordt stop_continuous_recognition() aangeroepen om de herkenning te stoppen.
  • De herkenningsstatus wordt gewijzigd in True.
def stop_cb(evt):
    print('CLOSING on {}'.format(evt))
    speech_recognizer.stop_continuous_recognition()
    global 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 geconfigureerd, kunt u start_continuous_recognition():

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

De brontaal wijzigen

Een veelvoorkomende taak voor spraakherkenning is het opgeven van de invoertaal (of brontaal). 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 voor een lijst met ondersteunde talen de Taal- en spraakondersteuning voor de Speech-service.

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="YourSpeechResoureKey", region="YourServiceRegion")
speech_config.endpoint_id = "YourEndpointId"
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config)

Een container draaien 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.

Semantische segmentatie

Semantische segmentatie is een segmentatiestrategie voor spraakherkenning die is ontworpen om problemen met segmentatie op basis van stilte te beperken:

  • Ondersegmentatie: wanneer gebruikers lange tijd spreken zonder pauzes, kunnen ze een lange reeks tekst zien zonder onderbrekingen ('muur van tekst'), waardoor hun leesbaarheid ernstig wordt verminderd.
  • Oversegmentatie: wanneer een gebruiker korte tijd pauzeert, kan het stiltedetectiemechanisme onjuist segmenteren.

In plaats van alleen te vertrouwen op stiltemeldingen, segmenteert semantische segmentatie meestal en retourneert het definitieve resultaten als leestekens aan het einde van de zin worden gedetecteerd (zoals '.' of '?'). Dit verbetert de gebruikerservaring met hoogwaardige, semantisch volledige segmenten en voorkomt lange tussenliggende resultaten.

Om semantische segmentatie te gebruiken, moet u de volgende eigenschap instellen op de SpeechConfig instantie die wordt gebruikt om een SpeechRecognizer te maken:

speech_config.set_property(speechsdk.PropertyId.Speech_SegmentationStrategy, "Semantic") 

Enkele van de beperkingen van semantische segmentatie zijn als volgt:

  • U hebt de Speech SDK versie 1.41 of hoger nodig om semantische segmentatie te gebruiken.
  • Semantische segmentatie is alleen bedoeld voor gebruik in continue herkenning. Dit omvat scenario's zoals dicteren en ondertiteling. Deze mag niet worden gebruikt in de modus voor eenmalige herkenning of interactieve scenario's.
  • Semantische segmentatie is niet beschikbaar voor alle talen en landinstellingen.
  • Semantische segmentatie biedt nog geen ondersteuning voor betrouwbaarheidsscores en NBest-lijsten. Daarom raden we semantische segmentatie niet aan als u betrouwbaarheidsscores of NBest-lijsten gebruikt.

Verfijning na het streamen

Verfijning na de stream levert u nauwkeurigere eindresultaten op voor realtime transcriptie, zonder invloed op de latentie van het eerste token. Er wordt parallel aan realtime streaming een tweede herkenningsronde uitgevoerd, zodat tussenliggende en voorlopige resultaten een lage latentie behouden. Alleen het uiteindelijke resultaat wordt vervangen door een nauwkeurigere versie die gebruikmaakt van bredere audiocontext.

Eentalige verfijning na de stream is algemeen beschikbaar. Meertalige verfijning na het streamen is beschikbaar als openbare preview.

Mogelijkheid Monolinguale post-streamverfijning Meertalige verfijning na de stream
Availability Algemeen beschikbaar Openbare proefversie
Taalbereik Eén geconfigureerde landinstelling per herkenningssessie Meerdere ondersteunde talen in één sessie, met inbegrip van taalwisseling
Taalconfiguratie Stel de landinstelling voor herkenning in Automatische taaldetectie van open bereik gebruiken zonder een lijst met kandidaattalen
Fraselijsten Supported Niet ondersteund tijdens openbare preview
Diarisatie Supported Supported

Om verfijning na-stream in te schakelen, stelt u de SpeechServiceResponse_PostProcessingOption eigenschap in op de SpeechConfig instantie.

speechConfig->SetProperty(PropertyId::SpeechServiceResponse_PostProcessingOption, "PostRefinement");
speechConfig.SetProperty(PropertyId.SpeechServiceResponse_PostProcessingOption, "PostRefinement");
speechConfig.setProperty(PropertyId.SpeechServiceResponse_PostProcessingOption, "PostRefinement");
speech_config.set_property(
    speechsdk.PropertyId.SpeechServiceResponse_PostProcessingOption,
    "PostRefinement"
)

Meertalige verfijning na streaming (preview)

Verfijning na de stream ondersteunt meertalige herkenning, zodat één audiostream meerdere talen kan omvatten, inclusief schakelen tussen talen tijdens een gesprek. Een enkel meertalige model herkent de talen rechtstreeks, zodat u geen taalidentificatiemodus instelt of een lijst met kandidaattalen opgeeft. Als u het meertalige pad wilt inschakelen, stelt u SpeechServiceResponse_PostProcessingOption in op PostRefinement en geeft u een AutoDetectSourceLanguageConfig door die is geconfigureerd voor automatische taaldetectie wanneer u de SpeechRecognizer maakt.

Meertalige verfijning na stream vereist Speech SDK versie 1.50 of hoger en is alleen beschikbaar via de Speech SDK.

Tijdens de openbare previewversie worden fraselijsten niet ondersteund in combinatie met meertalige verfijning na het streamen.

speechConfig->SetProperty(PropertyId::SpeechServiceResponse_PostProcessingOption, "PostRefinement");

auto autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig::FromOpenRange();

auto recognizer = SpeechRecognizer::FromConfig(speechConfig, autoDetectSourceLanguageConfig, audioConfig);
speechConfig.SetProperty(PropertyId.SpeechServiceResponse_PostProcessingOption, "PostRefinement");

var autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig.FromOpenRange();

var recognizer = new SpeechRecognizer(speechConfig, autoDetectSourceLanguageConfig, audioConfig);
speechConfig.setProperty(PropertyId.SpeechServiceResponse_PostProcessingOption, "PostRefinement");

AutoDetectSourceLanguageConfig autoDetectSourceLanguageConfig =
    AutoDetectSourceLanguageConfig.fromOpenRange();

SpeechRecognizer recognizer =
    new SpeechRecognizer(speechConfig, autoDetectSourceLanguageConfig, audioConfig);
speech_config.set_property(
    speechsdk.PropertyId.SpeechServiceResponse_PostProcessingOption,
    "PostRefinement"
)

auto_detect_source_language_config = speechsdk.languageconfig.AutoDetectSourceLanguageConfig()

recognizer = speechsdk.SpeechRecognizer(
    speech_config=speech_config,
    auto_detect_source_language_config=auto_detect_source_language_config,
    audio_config=audio_config)

Tijdens de openbare preview herkent meertalige nastroomverfijning 25 talen: Arabisch, Chinees, Tsjechisch, Deens, Nederlands, Engels, Fins, Frans, Duits, Grieks, Hebreeuws, Hindi, Hongaars, Indonesisch, Italiaans, Japans, Koreaans, Noors Bokmål, Pools, Portugees, Russisch, Spaans, Zweeds, Thai en Turks. Omdat de service de gesproken taal automatisch detecteert, configureert u geen landinstelling. Audio in een taal die niet wordt ondersteund, kan onverwachte resultaten opleveren. Zie Ondersteunde talen voor Speech to Text voor de specifieke landinstellingen die eentalige en meertalige verfijning na het streamen ondersteunen.

Enkele belangrijke overwegingen voor verfijning na de stroom:

  • Verfijning na de stream werkt het beste voor langere uitingen, zoals gesprekken, vergaderingen en dicteren. Voor zeer korte zinnen kan het verfijnde resultaat identiek zijn aan het standaardresultaat.
  • Post-streamverfijning en TrueText zijn afzonderlijke waarden van dezelfde SpeechServiceResponse_PostProcessingOption eigenschap. Er kan slechts één waarde tegelijk worden ingesteld.
  • Eentalige en meertalige verfijning na de stream hebben een verschillende beschikbaarheid in Azure-regio's.

Zie voor meer informatie over naverwerkingsoptiesHoe naverwerking te gebruiken.

Belangrijk

Bij meertalige nabewerking van streams laten sommige taalvarianten mogelijk geen significante kwaliteitsverbetering zien en kunnen de resultaten afwijken van wat u ziet bij standaardherkenning.

Referentiedocumentatie | Package (NuGet) | Aanvullende voorbeelden op GitHub

In deze handleiding leert u hoe u Azure Speech in Foundry Tools gebruikt voor realtime spraak-naar-tekstconversie. Realtime spraakherkenning is ideaal voor toepassingen die directe transcriptie vereisen, zoals dicteren, hulp bij het callcenter en bijschriften voor livevergaderingen.

Zie quickstart: Spraak herkennen en converteren naar tekst voor meer informatie over het instellen van de omgeving voor een voorbeeldtoepassing.

Een spraakconfiguratie-exemplaar 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 Spraak-resource, zoals uw sleutel en de bijbehorende regio, het eindpunt, de host of het autorisatietoken.

  1. Maak een Foundry-resource voor Spraak in de Azure-portal. Haal de spraakherkenningssleutel en het eindpunt op.
  2. Maak een SpeechConfig exemplaar met behulp van de volgende code. Vervang YourSpeechKey en YourSpeechEndpoint door uw Spraak-resourcesleutel en -eindpunt.
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.FromEndpoint(new Uri("YourSpeechEndpoint"), "YourSpeechKey");
    }
}

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.

Opmerking

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

Spraak herkennen vanaf 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 speechRecognitionResult = await speechRecognizer.RecognizeOnceAsync();
        Console.WriteLine($"RECOGNIZED: Text={speechRecognitionResult.Text}");
    }

    async static Task Main(string[] args)
    {
        var speechConfig = SpeechConfig.FromEndpoint(new Uri("YourSpeechEndpoint"), "YourSpeechKey");
        await FromMic(speechConfig);
    }
}

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.

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. U belt echter niet FromDefaultMicrophoneInput(). 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 speechRecognitionResult = await speechRecognizer.RecognizeOnceAsync();
        Console.WriteLine($"RECOGNIZED: Text={speechRecognitionResult.Text}");
    }

    async static Task Main(string[] args)
    {
        var speechConfig = SpeechConfig.FromEndpoint(new Uri("YourSpeechEndpoint"), "YourSpeechKey");
        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 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 speechRecognitionResult = await speechRecognizer.RecognizeOnceAsync();
        Console.WriteLine($"RECOGNIZED: Text={speechRecognitionResult.Text}");
    }

    async static Task Main(string[] args)
    {
        var speechConfig = SpeechConfig.FromEndpoint(new Uri("YourSpeechEndpoint"), "YourSpeechKey");
        await FromStream(speechConfig);
    }
}

Als u een pushstream als invoer gebruikt, wordt ervan uitgegaan dat de audiogegevens onbewerkte PCM zijn en eventuele headers overslaat. De API werkt nog steeds in bepaalde gevallen als de header niet wordt 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.

Fouten verwerken

In de vorige voorbeelden wordt alleen de herkende tekst opgehaald uit de speechRecognitionResult.Text eigenschap. Als u fouten en andere antwoorden wilt afhandelen, moet u code schrijven om het resultaat af te handelen. De volgende code evalueert de speechRecognitionResult.Reason eigenschap 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 (speechRecognitionResult.Reason)
{
    case ResultReason.RecognizedSpeech:
        Console.WriteLine($"RECOGNIZED: Text={speechRecognitionResult.Text}");
        break;
    case ResultReason.NoMatch:
        Console.WriteLine($"NOMATCH: Speech could not be recognized.");
        break;
    case ResultReason.Canceled:
        var cancellation = CancellationDetails.FromResult(speechRecognitionResult);
        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 endpoint values?");
        }
        break;
}

Continue herkenning gebruiken

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

Daarentegen gebruikt u continue herkenning wanneer u wilt bepalen wanneer u wilt stoppen met herkennen. Hiervoor moet u zich abonneren op de Recognizing, Recognizeden Canceled gebeurtenissen om de herkenningsresultaten op te halen. Als u de herkenning wilt stoppen, moet u bellen StopContinuousRecognitionAsync. Hier volgt een voorbeeld van hoe continue 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 verzendt:

  • 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 endpoint 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 invoertaal (of brontaal). 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 SpeechRecognitionLanguage eigenschap verwacht een tekenreeks in het taal-landformaat. Zie voor een lijst met ondersteunde talen de Taal- en spraakondersteuning voor de Speech-service.

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.FromEndpoint(new Uri("YourSpeechEndpoint"), "YourSpeechKey");
speechConfig.EndpointId = "YourEndpointId";
var speechRecognizer = new SpeechRecognizer(speechConfig);

Een container draaien 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 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 aan elkaar koppelt in één herkenningsresultaat, in plaats van zinnen in afzonderlijke resultaten te breken.
  • Langzame spraak die delen van een enkele zin uiteenhaalt in meerdere resultaten.
  • Een enkele spraakherkenning die te snel eindigt terwijl op de start van spraak wordt gewacht.

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

  • De time-out voor segmentatie-stilte past aan hoeveel niet-spraakaudio is toegestaan binnen een uitdrukking die momenteel wordt gesproken voordat deze uitdrukking als 'gereed' wordt beschouwd.
    • Hogere waarden zorgen er over het algemeen voor dat de resultaten langer zijn en dat langere pauzes van de spreker binnen een zin worden toegestaan, maar het duurt langer voordat de resultaten binnenkomen. Ze kunnen ook afzonderlijke woordgroepen combineren in één resultaat wanneer ze te hoog zijn ingesteld.
    • Lagere waarden maken de resultaten over het algemeen korter en zorgen voor meer snelle en frequente onderbrekingen tussen frasen, maar kunnen er ook toe leiden dat één zin uiteenvalt 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 initiale stiltegeltijd wordt aangepast hoeveel niet-spraakgeluid is toegestaan voordat een zin wordt herkend en de poging 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" uitspreken, kunnen mogelijk pauzeren tussen tekengroepen, waardoor het serienummer in meerdere resultaten wordt onderverdeeld. Probeer in dit geval een hogere waarde, zoals 2000 milliseconden 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 waarbij een spreker wordt gevraagd een serienummer te zoeken en te lezen, eindigt te snel terwijl het nummer nog wordt gezocht. Probeer in dit geval een langere time-out voor stilte, zoals 10.000 ms:

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

Semantische segmentatie

Semantische segmentatie is een segmentatiestrategie voor spraakherkenning die is ontworpen om problemen met segmentatie op basis van stilte te beperken:

  • Ondersegmentatie: wanneer gebruikers lange tijd spreken zonder pauzes, kunnen ze een lange reeks tekst zien zonder onderbrekingen ('muur van tekst'), waardoor hun leesbaarheid ernstig wordt verminderd.
  • Oversegmentatie: wanneer een gebruiker korte tijd pauzeert, kan het stiltedetectiemechanisme onjuist segmenteren.

In plaats van alleen te vertrouwen op stiltemeldingen, segmenteert semantische segmentatie meestal en retourneert het definitieve resultaten als leestekens aan het einde van de zin worden gedetecteerd (zoals '.' of '?'). Dit verbetert de gebruikerservaring met hoogwaardige, semantisch volledige segmenten en voorkomt lange tussenliggende resultaten.

Om semantische segmentatie te gebruiken, moet u de volgende eigenschap instellen op de SpeechConfig instantie die wordt gebruikt om een SpeechRecognizer te maken:

speechConfig.SetProperty(PropertyId.Speech_SegmentationStrategy, "Semantic");

Enkele van de beperkingen van semantische segmentatie zijn als volgt:

  • U hebt de Speech SDK versie 1.41 of hoger nodig om semantische segmentatie te gebruiken.
  • Semantische segmentatie is alleen bedoeld voor gebruik in continue herkenning. Dit omvat scenario's zoals dicteren en ondertiteling. Deze mag niet worden gebruikt in de modus voor eenmalige herkenning of interactieve scenario's.
  • Semantische segmentatie is niet beschikbaar voor alle talen en landinstellingen.
  • Semantische segmentatie biedt nog geen ondersteuning voor betrouwbaarheidsscores en NBest-lijsten. Daarom raden we semantische segmentatie niet aan als u betrouwbaarheidsscores of NBest-lijsten gebruikt.

Verfijning na het streamen

Verfijning na de stream levert u nauwkeurigere eindresultaten op voor realtime transcriptie, zonder invloed op de latentie van het eerste token. Er wordt parallel aan realtime streaming een tweede herkenningsronde uitgevoerd, zodat tussenliggende en voorlopige resultaten een lage latentie behouden. Alleen het uiteindelijke resultaat wordt vervangen door een nauwkeurigere versie die gebruikmaakt van bredere audiocontext.

Eentalige verfijning na de stream is algemeen beschikbaar. Meertalige verfijning na het streamen is beschikbaar als openbare preview.

Mogelijkheid Monolinguale post-streamverfijning Meertalige verfijning na de stream
Availability Algemeen beschikbaar Openbare proefversie
Taalbereik Eén geconfigureerde landinstelling per herkenningssessie Meerdere ondersteunde talen in één sessie, met inbegrip van taalwisseling
Taalconfiguratie Stel de landinstelling voor herkenning in Automatische taaldetectie van open bereik gebruiken zonder een lijst met kandidaattalen
Fraselijsten Supported Niet ondersteund tijdens openbare preview
Diarisatie Supported Supported

Om verfijning na-stream in te schakelen, stelt u de SpeechServiceResponse_PostProcessingOption eigenschap in op de SpeechConfig instantie.

speechConfig->SetProperty(PropertyId::SpeechServiceResponse_PostProcessingOption, "PostRefinement");
speechConfig.SetProperty(PropertyId.SpeechServiceResponse_PostProcessingOption, "PostRefinement");
speechConfig.setProperty(PropertyId.SpeechServiceResponse_PostProcessingOption, "PostRefinement");
speech_config.set_property(
    speechsdk.PropertyId.SpeechServiceResponse_PostProcessingOption,
    "PostRefinement"
)

Meertalige verfijning na streaming (preview)

Verfijning na de stream ondersteunt meertalige herkenning, zodat één audiostream meerdere talen kan omvatten, inclusief schakelen tussen talen tijdens een gesprek. Een enkel meertalige model herkent de talen rechtstreeks, zodat u geen taalidentificatiemodus instelt of een lijst met kandidaattalen opgeeft. Als u het meertalige pad wilt inschakelen, stelt u SpeechServiceResponse_PostProcessingOption in op PostRefinement en geeft u een AutoDetectSourceLanguageConfig door die is geconfigureerd voor automatische taaldetectie wanneer u de SpeechRecognizer maakt.

Meertalige verfijning na stream vereist Speech SDK versie 1.50 of hoger en is alleen beschikbaar via de Speech SDK.

Tijdens de openbare previewversie worden fraselijsten niet ondersteund in combinatie met meertalige verfijning na het streamen.

speechConfig->SetProperty(PropertyId::SpeechServiceResponse_PostProcessingOption, "PostRefinement");

auto autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig::FromOpenRange();

auto recognizer = SpeechRecognizer::FromConfig(speechConfig, autoDetectSourceLanguageConfig, audioConfig);
speechConfig.SetProperty(PropertyId.SpeechServiceResponse_PostProcessingOption, "PostRefinement");

var autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig.FromOpenRange();

var recognizer = new SpeechRecognizer(speechConfig, autoDetectSourceLanguageConfig, audioConfig);
speechConfig.setProperty(PropertyId.SpeechServiceResponse_PostProcessingOption, "PostRefinement");

AutoDetectSourceLanguageConfig autoDetectSourceLanguageConfig =
    AutoDetectSourceLanguageConfig.fromOpenRange();

SpeechRecognizer recognizer =
    new SpeechRecognizer(speechConfig, autoDetectSourceLanguageConfig, audioConfig);
speech_config.set_property(
    speechsdk.PropertyId.SpeechServiceResponse_PostProcessingOption,
    "PostRefinement"
)

auto_detect_source_language_config = speechsdk.languageconfig.AutoDetectSourceLanguageConfig()

recognizer = speechsdk.SpeechRecognizer(
    speech_config=speech_config,
    auto_detect_source_language_config=auto_detect_source_language_config,
    audio_config=audio_config)

Tijdens de openbare preview herkent meertalige nastroomverfijning 25 talen: Arabisch, Chinees, Tsjechisch, Deens, Nederlands, Engels, Fins, Frans, Duits, Grieks, Hebreeuws, Hindi, Hongaars, Indonesisch, Italiaans, Japans, Koreaans, Noors Bokmål, Pools, Portugees, Russisch, Spaans, Zweeds, Thai en Turks. Omdat de service de gesproken taal automatisch detecteert, configureert u geen landinstelling. Audio in een taal die niet wordt ondersteund, kan onverwachte resultaten opleveren. Zie Ondersteunde talen voor Speech to Text voor de specifieke landinstellingen die eentalige en meertalige verfijning na het streamen ondersteunen.

Enkele belangrijke overwegingen voor verfijning na de stroom:

  • Verfijning na de stream werkt het beste voor langere uitingen, zoals gesprekken, vergaderingen en dicteren. Voor zeer korte zinnen kan het verfijnde resultaat identiek zijn aan het standaardresultaat.
  • Post-streamverfijning en TrueText zijn afzonderlijke waarden van dezelfde SpeechServiceResponse_PostProcessingOption eigenschap. Er kan slechts één waarde tegelijk worden ingesteld.
  • Eentalige en meertalige verfijning na de stream hebben een verschillende beschikbaarheid in Azure-regio's.

Zie voor meer informatie over naverwerkingsoptiesHoe naverwerking te gebruiken.

Belangrijk

Bij meertalige nabewerking van streams laten sommige taalvarianten mogelijk geen significante kwaliteitsverbetering zien en kunnen de resultaten afwijken van wat u ziet bij standaardherkenning.

Referentiedocumentatie | Package (npm) | Aanvullende voorbeelden op GitHub | Library-broncode

In deze handleiding leert u hoe u Azure Speech in Foundry Tools gebruikt voor realtime spraak-naar-tekstconversie. Realtime spraakherkenning is ideaal voor toepassingen die directe transcriptie vereisen, zoals dicteren, hulp bij het callcenter en bijschriften voor livevergaderingen.

Zie quickstart: Spraak herkennen en converteren naar tekst voor meer informatie over het instellen van de omgeving voor een voorbeeldtoepassing.

Een spraakconfiguratie-exemplaar 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 Spraak-resource, zoals uw sleutel en de bijbehorende regio, het eindpunt, de host of het autorisatietoken.

  1. Maak een Foundry-resource voor Spraak in de Azure-portal. Haal de spraakherkenningssleutel en het eindpunt op.
  2. Maak een SpeechConfig exemplaar met behulp van de volgende code. Vervang YourSpeechEndpoint en YourSpeechKey door het eindpunt en de sleutel van uw Speech-resource.
const speechConfig = sdk.SpeechConfig.fromEndpoint(new URL("YourSpeechEndpoint"), "YourSpeechKey");

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.

Opmerking

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

Spraak herkennen vanaf 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 voorbeeld React 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.

Opmerking

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.

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.fromEndpoint("YourSpeechEndpoint", "YourSpeechKey");

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 al audiogegevens in de ArrayBuffer hebt, kunt 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.fromEndpoint("YourSpeechEndpoint", "YourSpeechKey");

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 onbewerkte PCM-gegevens (Pulse-Code Modulation) zijn die eventuele headers overslaan. De API werkt nog steeds in bepaalde gevallen als de header niet wordt 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.

Fouten verwerken

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. De volgende code evalueert de result.reason eigenschap 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 endpoint values?");
        }
        break;
    }

Continue herkenning gebruiken

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

U kunt daarentegen continue herkenning gebruiken wanneer u wilt bepalen wanneer u wilt stoppen met herkennen. Hiervoor moet u zich abonneren op de Recognizing, Recognizeden Canceled gebeurtenissen om de herkenningsresultaten op te halen. Als u de herkenning wilt stoppen, moet u [stopContinuousRecognitionAsync] (/javascript/api/microsoft-cognitiveservices-speech-sdk/speechrecognizer#microsoft-cognitiveservices-speech-sdk-speechrecognizer-stopcontinuousrecognitionasync) aanroepen. Hier volgt een voorbeeld van hoe continue 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 endpoint values?");
    }

    speechRecognizer.stopContinuousRecognitionAsync();
};

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

Wanneer alles is ingesteld, roep [startContinuousRecognitionAsync] (/javascript/api/microsoft-cognitiveservices-speech-sdk/speechrecognizer#microsoft-cognitiveservices-speech-sdk-speechrecognizer-startkeywordrecognitionasync) op 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 invoertaal (of brontaal). 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 speechRecognitionLanguage eigenschap verwacht een tekenreeks in het taal-landformaat. Zie voor een lijst met ondersteunde talen de Taal- en spraakondersteuning voor de Speech-service.

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("YourSpeechResoureKey", "YourServiceRegion");
speechConfig.endpointId = "YourEndpointId";
var speechRecognizer = new SpeechSDK.SpeechRecognizer(speechConfig);

Een container draaien 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 Azure Speech in Foundry Tools gebruikt voor realtime spraak-naar-tekstconversie. Realtime spraakherkenning is ideaal voor toepassingen die directe transcriptie vereisen, zoals dicteren, hulp bij het callcenter en bijschriften voor livevergaderingen.

Zie quickstart: Spraak herkennen en converteren naar tekst voor meer informatie over het instellen van de omgeving voor een voorbeeldtoepassing.

Een spraakconfiguratie-exemplaar 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 Spraak-resource, zoals uw sleutel en de bijbehorende regio, het eindpunt, de host of het autorisatietoken.

  1. Maak een Foundry-resource voor Spraak in de Azure-portal. Haal de spraakresourcesleutel en -regio op.
  2. Maak een SpeechConfig exemplaar met behulp van uw Spraaksleutel en -regio.
import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.AudioConfig;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;

public class Program {
    public static void main(String[] args) throws InterruptedException, ExecutionException, URISyntaxException {
        SpeechConfig speechConfig = SpeechConfig.fromEndpoint(new URI("<paste-your-speech-endpoint>"), "<paste-your-speech-key>");
    }
}

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.

Opmerking

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

Spraak herkennen vanaf 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.net.URI;
import java.net.URISyntaxException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;

public class Program {
    public static void main(String[] args) throws InterruptedException, ExecutionException, URISyntaxException {
        SpeechConfig speechConfig = SpeechConfig.fromEndpoint(new URI("<paste-your-speech-endpoint>"), "<paste-your-speech-key>");
        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 speechRecognitionResult = task.get();
        System.out.println("RECOGNIZED: Text=" + speechRecognitionResult.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.

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. U belt echter niet FromDefaultMicrophoneInput(). U belt fromWavFileInput() en geeft het bestandspad door:

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

public class Program {
    public static void main(String[] args) throws InterruptedException, ExecutionException, URISyntaxException {
        SpeechConfig speechConfig = SpeechConfig.fromEndpoint(new URI("<paste-your-speech-endpoint>"), "<paste-your-speech-key>");
        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 speechRecognitionResult = task.get();
        System.out.println("RECOGNIZED: Text=" + speechRecognitionResult.getText());
    }
}

Fouten verwerken

In de vorige voorbeelden wordt alleen de herkende tekst weergegeven met behulp van speechRecognitionResult.getText(). Als u fouten en andere antwoorden wilt afhandelen, moet u code schrijven om het resultaat af te handelen. Het volgende voorbeeld evalueert speechRecognitionResult.getReason() 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 (speechRecognitionResult.getReason()) {
    case ResultReason.RecognizedSpeech:
        System.out.println("We recognized: " + speechRecognitionResult.getText());
        exitCode = 0;
        break;
    case ResultReason.NoMatch:
        System.out.println("NOMATCH: Speech could not be recognized.");
        break;
    case ResultReason.Canceled: {
            CancellationDetails cancellation = CancellationDetails.fromResult(speechRecognitionResult);
            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 eenmalige herkenning gebruikt, waarmee één uiting wordt herkend. Het einde van één uiting wordt bepaald door te luisteren naar stilte aan het einde of totdat een maximum van 15 seconden audio wordt verwerkt.

Daarentegen gebruikt u continue herkenning wanneer u wilt bepalen wanneer u wilt stoppen met herkennen. Hiervoor moet u zich abonneren op de recognizing, recognizeden canceled gebeurtenissen om de herkenningsresultaten op te halen. Als u de herkenning wilt stoppen, moet u bellen stopContinuousRecognitionAsync. 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 instantie op het klasseniveau:

private static Semaphore stopTranslationWithFileSemaphore;

Abonneer u vervolgens op de gebeurtenissen die SpeechRecognizer verzendt:

  • 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 invoertaal (of brontaal). 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 spraak-naar-tekstinstellingen.

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("YourSpeechKey", "YourServiceRegion");
speechConfig.setEndpointId("YourEndpointId");
SpeechRecognizer speechRecognizer = new SpeechRecognizer(speechConfig);

Een container draaien 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.

Semantische segmentatie

Semantische segmentatie is een segmentatiestrategie voor spraakherkenning die is ontworpen om problemen met segmentatie op basis van stilte te beperken:

  • Ondersegmentatie: wanneer gebruikers lange tijd spreken zonder pauzes, kunnen ze een lange reeks tekst zien zonder onderbrekingen ('muur van tekst'), waardoor hun leesbaarheid ernstig wordt verminderd.
  • Oversegmentatie: wanneer een gebruiker korte tijd pauzeert, kan het stiltedetectiemechanisme onjuist segmenteren.

In plaats van alleen te vertrouwen op stiltemeldingen, segmenteert semantische segmentatie meestal en retourneert het definitieve resultaten als leestekens aan het einde van de zin worden gedetecteerd (zoals '.' of '?'). Dit verbetert de gebruikerservaring met hoogwaardige, semantisch volledige segmenten en voorkomt lange tussenliggende resultaten.

Om semantische segmentatie te gebruiken, moet u de volgende eigenschap instellen op de SpeechConfig instantie die wordt gebruikt om een SpeechRecognizer te maken:

speechConfig.SetProperty(PropertyId.Speech_SegmentationStrategy, "Semantic");

Enkele van de beperkingen van semantische segmentatie zijn als volgt:

  • U hebt de Speech SDK versie 1.41 of hoger nodig om semantische segmentatie te gebruiken.
  • Semantische segmentatie is alleen bedoeld voor gebruik in continue herkenning. Dit omvat scenario's zoals dicteren en ondertiteling. Deze mag niet worden gebruikt in de modus voor eenmalige herkenning of interactieve scenario's.
  • Semantische segmentatie is niet beschikbaar voor alle talen en landinstellingen.
  • Semantische segmentatie biedt nog geen ondersteuning voor betrouwbaarheidsscores en NBest-lijsten. Daarom raden we semantische segmentatie niet aan als u betrouwbaarheidsscores of NBest-lijsten gebruikt.

Verfijning na het streamen

Verfijning na de stream levert u nauwkeurigere eindresultaten op voor realtime transcriptie, zonder invloed op de latentie van het eerste token. Er wordt parallel aan realtime streaming een tweede herkenningsronde uitgevoerd, zodat tussenliggende en voorlopige resultaten een lage latentie behouden. Alleen het uiteindelijke resultaat wordt vervangen door een nauwkeurigere versie die gebruikmaakt van bredere audiocontext.

Eentalige verfijning na de stream is algemeen beschikbaar. Meertalige verfijning na het streamen is beschikbaar als openbare preview.

Mogelijkheid Monolinguale post-streamverfijning Meertalige verfijning na de stream
Availability Algemeen beschikbaar Openbare proefversie
Taalbereik Eén geconfigureerde landinstelling per herkenningssessie Meerdere ondersteunde talen in één sessie, met inbegrip van taalwisseling
Taalconfiguratie Stel de landinstelling voor herkenning in Automatische taaldetectie van open bereik gebruiken zonder een lijst met kandidaattalen
Fraselijsten Supported Niet ondersteund tijdens openbare preview
Diarisatie Supported Supported

Om verfijning na-stream in te schakelen, stelt u de SpeechServiceResponse_PostProcessingOption eigenschap in op de SpeechConfig instantie.

speechConfig->SetProperty(PropertyId::SpeechServiceResponse_PostProcessingOption, "PostRefinement");
speechConfig.SetProperty(PropertyId.SpeechServiceResponse_PostProcessingOption, "PostRefinement");
speechConfig.setProperty(PropertyId.SpeechServiceResponse_PostProcessingOption, "PostRefinement");
speech_config.set_property(
    speechsdk.PropertyId.SpeechServiceResponse_PostProcessingOption,
    "PostRefinement"
)

Meertalige verfijning na streaming (preview)

Verfijning na de stream ondersteunt meertalige herkenning, zodat één audiostream meerdere talen kan omvatten, inclusief schakelen tussen talen tijdens een gesprek. Een enkel meertalige model herkent de talen rechtstreeks, zodat u geen taalidentificatiemodus instelt of een lijst met kandidaattalen opgeeft. Als u het meertalige pad wilt inschakelen, stelt u SpeechServiceResponse_PostProcessingOption in op PostRefinement en geeft u een AutoDetectSourceLanguageConfig door die is geconfigureerd voor automatische taaldetectie wanneer u de SpeechRecognizer maakt.

Meertalige verfijning na stream vereist Speech SDK versie 1.50 of hoger en is alleen beschikbaar via de Speech SDK.

Tijdens de openbare previewversie worden fraselijsten niet ondersteund in combinatie met meertalige verfijning na het streamen.

speechConfig->SetProperty(PropertyId::SpeechServiceResponse_PostProcessingOption, "PostRefinement");

auto autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig::FromOpenRange();

auto recognizer = SpeechRecognizer::FromConfig(speechConfig, autoDetectSourceLanguageConfig, audioConfig);
speechConfig.SetProperty(PropertyId.SpeechServiceResponse_PostProcessingOption, "PostRefinement");

var autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig.FromOpenRange();

var recognizer = new SpeechRecognizer(speechConfig, autoDetectSourceLanguageConfig, audioConfig);
speechConfig.setProperty(PropertyId.SpeechServiceResponse_PostProcessingOption, "PostRefinement");

AutoDetectSourceLanguageConfig autoDetectSourceLanguageConfig =
    AutoDetectSourceLanguageConfig.fromOpenRange();

SpeechRecognizer recognizer =
    new SpeechRecognizer(speechConfig, autoDetectSourceLanguageConfig, audioConfig);
speech_config.set_property(
    speechsdk.PropertyId.SpeechServiceResponse_PostProcessingOption,
    "PostRefinement"
)

auto_detect_source_language_config = speechsdk.languageconfig.AutoDetectSourceLanguageConfig()

recognizer = speechsdk.SpeechRecognizer(
    speech_config=speech_config,
    auto_detect_source_language_config=auto_detect_source_language_config,
    audio_config=audio_config)

Tijdens de openbare preview herkent meertalige nastroomverfijning 25 talen: Arabisch, Chinees, Tsjechisch, Deens, Nederlands, Engels, Fins, Frans, Duits, Grieks, Hebreeuws, Hindi, Hongaars, Indonesisch, Italiaans, Japans, Koreaans, Noors Bokmål, Pools, Portugees, Russisch, Spaans, Zweeds, Thai en Turks. Omdat de service de gesproken taal automatisch detecteert, configureert u geen landinstelling. Audio in een taal die niet wordt ondersteund, kan onverwachte resultaten opleveren. Zie Ondersteunde talen voor Speech to Text voor de specifieke landinstellingen die eentalige en meertalige verfijning na het streamen ondersteunen.

Enkele belangrijke overwegingen voor verfijning na de stroom:

  • Verfijning na de stream werkt het beste voor langere uitingen, zoals gesprekken, vergaderingen en dicteren. Voor zeer korte zinnen kan het verfijnde resultaat identiek zijn aan het standaardresultaat.
  • Post-streamverfijning en TrueText zijn afzonderlijke waarden van dezelfde SpeechServiceResponse_PostProcessingOption eigenschap. Er kan slechts één waarde tegelijk worden ingesteld.
  • Eentalige en meertalige verfijning na de stream hebben een verschillende beschikbaarheid in Azure-regio's.

Zie voor meer informatie over naverwerkingsoptiesHoe naverwerking te gebruiken.

Belangrijk

Bij meertalige nabewerking van streams laten sommige taalvarianten mogelijk geen significante kwaliteitsverbetering zien en kunnen de resultaten afwijken van wat u ziet bij standaardherkenning.

Referentiedocumentatie | Package (NuGet) | Aanvullende voorbeelden op GitHub

In deze handleiding leert u hoe u Azure Speech in Foundry Tools gebruikt voor realtime spraak-naar-tekstconversie. Realtime spraakherkenning is ideaal voor toepassingen die directe transcriptie vereisen, zoals dicteren, hulp bij het callcenter en bijschriften voor livevergaderingen.

Zie quickstart: Spraak herkennen en converteren naar tekst voor meer informatie over het instellen van de omgeving voor een voorbeeldtoepassing.

Een spraakconfiguratie-exemplaar 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 Spraak-resource, zoals uw sleutel en de bijbehorende regio, het eindpunt, de host of het autorisatietoken.

  1. Maak een Foundry-resource voor Spraak in de Azure-portal. Haal de spraakherkenningssleutel en het eindpunt op.
  2. Maak een SpeechConfig exemplaar met behulp van de volgende code. Vervang YourSpeechKey en YourSpeechEndpoint door uw Spraak-resourcesleutel en -eindpunt.
using namespace std;
using namespace Microsoft::CognitiveServices::Speech;

auto speechConfig = SpeechConfig::FromEndpoint("YourServiceEndpoint", "YourSpeechResourceKey");

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.

Opmerking

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

Spraak herkennen vanaf 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.

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. U belt echter niet FromDefaultMicrophoneInput(). 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 Klasse Recognizer voor de Speech SDK voor C++ bevat een aantal methoden die u kunt gebruiken voor spraakherkenning.

Herkenning met één opname

Herkenning in één keer herkent asynchroon een uiting. Het einde van één uiting wordt bepaald door te luisteren naar stilte aan het einde of totdat een maximum van 15 seconden audio wordt 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 endpoint values?" << std::endl;
            }
        }
        break;
    default:
        break;
}

Voortdurende herkenning

Continue herkennen is iets meer ingewikkeld dan eenmalige herkenning. Hiervoor moet u zich abonneren op de Recognizing, Recognizeden Canceled gebeurtenissen om de herkenningsresultaten op te halen. Als u de herkenning wilt stoppen, moet u StopContinuousRecognitionAsync aanroepen. Hier volgt een voorbeeld van continue herkenning die 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 verzendt:

  • 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 endpoint 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 StartContinuousRecognitionAsync 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 invoertaal (of brontaal). 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 voor een lijst met ondersteunde talen de Taal- en spraakondersteuning voor de Speech-service.

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::FromEndpoint("YourServiceEndpoint", "YourSpeechResourceKey");
speechConfig->SetEndpointId("YourEndpointId");
auto speechRecognizer = SpeechRecognizer::FromConfig(speechConfig);

Een container draaien 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 eindpunt.

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

Semantische segmentatie

Semantische segmentatie is een segmentatiestrategie voor spraakherkenning die is ontworpen om problemen met segmentatie op basis van stilte te beperken:

  • Ondersegmentatie: wanneer gebruikers lange tijd spreken zonder pauzes, kunnen ze een lange reeks tekst zien zonder onderbrekingen ('muur van tekst'), waardoor hun leesbaarheid ernstig wordt verminderd.
  • Oversegmentatie: wanneer een gebruiker korte tijd pauzeert, kan het stiltedetectiemechanisme onjuist segmenteren.

In plaats van alleen te vertrouwen op stiltemeldingen, segmenteert semantische segmentatie meestal en retourneert het definitieve resultaten als leestekens aan het einde van de zin worden gedetecteerd (zoals '.' of '?'). Dit verbetert de gebruikerservaring met hoogwaardige, semantisch volledige segmenten en voorkomt lange tussenliggende resultaten.

Om semantische segmentatie te gebruiken, moet u de volgende eigenschap instellen op de SpeechConfig instantie die wordt gebruikt om een SpeechRecognizer te maken:

speechConfig->SetProperty(PropertyId::Speech_SegmentationStrategy, "Semantic");

Enkele van de beperkingen van semantische segmentatie zijn als volgt:

  • U hebt de Speech SDK versie 1.41 of hoger nodig om semantische segmentatie te gebruiken.
  • Semantische segmentatie is alleen bedoeld voor gebruik in continue herkenning. Dit omvat scenario's zoals dicteren en ondertiteling. Deze mag niet worden gebruikt in de modus voor eenmalige herkenning of interactieve scenario's.
  • Semantische segmentatie is niet beschikbaar voor alle talen en landinstellingen.
  • Semantische segmentatie biedt nog geen ondersteuning voor betrouwbaarheidsscores en NBest-lijsten. Daarom raden we semantische segmentatie niet aan als u betrouwbaarheidsscores of NBest-lijsten gebruikt.

Verfijning na het streamen

Verfijning na de stream levert u nauwkeurigere eindresultaten op voor realtime transcriptie, zonder invloed op de latentie van het eerste token. Er wordt parallel aan realtime streaming een tweede herkenningsronde uitgevoerd, zodat tussenliggende en voorlopige resultaten een lage latentie behouden. Alleen het uiteindelijke resultaat wordt vervangen door een nauwkeurigere versie die gebruikmaakt van bredere audiocontext.

Eentalige verfijning na de stream is algemeen beschikbaar. Meertalige verfijning na het streamen is beschikbaar als openbare preview.

Mogelijkheid Monolinguale post-streamverfijning Meertalige verfijning na de stream
Availability Algemeen beschikbaar Openbare proefversie
Taalbereik Eén geconfigureerde landinstelling per herkenningssessie Meerdere ondersteunde talen in één sessie, met inbegrip van taalwisseling
Taalconfiguratie Stel de landinstelling voor herkenning in Automatische taaldetectie van open bereik gebruiken zonder een lijst met kandidaattalen
Fraselijsten Supported Niet ondersteund tijdens openbare preview
Diarisatie Supported Supported

Om verfijning na-stream in te schakelen, stelt u de SpeechServiceResponse_PostProcessingOption eigenschap in op de SpeechConfig instantie.

speechConfig->SetProperty(PropertyId::SpeechServiceResponse_PostProcessingOption, "PostRefinement");
speechConfig.SetProperty(PropertyId.SpeechServiceResponse_PostProcessingOption, "PostRefinement");
speechConfig.setProperty(PropertyId.SpeechServiceResponse_PostProcessingOption, "PostRefinement");
speech_config.set_property(
    speechsdk.PropertyId.SpeechServiceResponse_PostProcessingOption,
    "PostRefinement"
)

Meertalige verfijning na streaming (preview)

Verfijning na de stream ondersteunt meertalige herkenning, zodat één audiostream meerdere talen kan omvatten, inclusief schakelen tussen talen tijdens een gesprek. Een enkel meertalige model herkent de talen rechtstreeks, zodat u geen taalidentificatiemodus instelt of een lijst met kandidaattalen opgeeft. Als u het meertalige pad wilt inschakelen, stelt u SpeechServiceResponse_PostProcessingOption in op PostRefinement en geeft u een AutoDetectSourceLanguageConfig door die is geconfigureerd voor automatische taaldetectie wanneer u de SpeechRecognizer maakt.

Meertalige verfijning na stream vereist Speech SDK versie 1.50 of hoger en is alleen beschikbaar via de Speech SDK.

Tijdens de openbare previewversie worden fraselijsten niet ondersteund in combinatie met meertalige verfijning na het streamen.

speechConfig->SetProperty(PropertyId::SpeechServiceResponse_PostProcessingOption, "PostRefinement");

auto autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig::FromOpenRange();

auto recognizer = SpeechRecognizer::FromConfig(speechConfig, autoDetectSourceLanguageConfig, audioConfig);
speechConfig.SetProperty(PropertyId.SpeechServiceResponse_PostProcessingOption, "PostRefinement");

var autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig.FromOpenRange();

var recognizer = new SpeechRecognizer(speechConfig, autoDetectSourceLanguageConfig, audioConfig);
speechConfig.setProperty(PropertyId.SpeechServiceResponse_PostProcessingOption, "PostRefinement");

AutoDetectSourceLanguageConfig autoDetectSourceLanguageConfig =
    AutoDetectSourceLanguageConfig.fromOpenRange();

SpeechRecognizer recognizer =
    new SpeechRecognizer(speechConfig, autoDetectSourceLanguageConfig, audioConfig);
speech_config.set_property(
    speechsdk.PropertyId.SpeechServiceResponse_PostProcessingOption,
    "PostRefinement"
)

auto_detect_source_language_config = speechsdk.languageconfig.AutoDetectSourceLanguageConfig()

recognizer = speechsdk.SpeechRecognizer(
    speech_config=speech_config,
    auto_detect_source_language_config=auto_detect_source_language_config,
    audio_config=audio_config)

Tijdens de openbare preview herkent meertalige nastroomverfijning 25 talen: Arabisch, Chinees, Tsjechisch, Deens, Nederlands, Engels, Fins, Frans, Duits, Grieks, Hebreeuws, Hindi, Hongaars, Indonesisch, Italiaans, Japans, Koreaans, Noors Bokmål, Pools, Portugees, Russisch, Spaans, Zweeds, Thai en Turks. Omdat de service de gesproken taal automatisch detecteert, configureert u geen landinstelling. Audio in een taal die niet wordt ondersteund, kan onverwachte resultaten opleveren. Zie Ondersteunde talen voor Speech to Text voor de specifieke landinstellingen die eentalige en meertalige verfijning na het streamen ondersteunen.

Enkele belangrijke overwegingen voor verfijning na de stroom:

  • Verfijning na de stream werkt het beste voor langere uitingen, zoals gesprekken, vergaderingen en dicteren. Voor zeer korte zinnen kan het verfijnde resultaat identiek zijn aan het standaardresultaat.
  • Post-streamverfijning en TrueText zijn afzonderlijke waarden van dezelfde SpeechServiceResponse_PostProcessingOption eigenschap. Er kan slechts één waarde tegelijk worden ingesteld.
  • Eentalige en meertalige verfijning na de stream hebben een verschillende beschikbaarheid in Azure-regio's.

Zie voor meer informatie over naverwerkingsoptiesHoe naverwerking te gebruiken.

Belangrijk

Bij meertalige nabewerking van streams laten sommige taalvarianten mogelijk geen significante kwaliteitsverbetering zien en kunnen de resultaten afwijken van wat u ziet bij standaardherkenning.

Referentiedocumentatie | Package (Go) | Aanvullende voorbeelden op GitHub

In deze handleiding leert u hoe u Azure Speech in Foundry Tools gebruikt voor realtime spraak-naar-tekstconversie. Realtime spraakherkenning is ideaal voor toepassingen die directe transcriptie vereisen, zoals dicteren, hulp bij het callcenter en bijschriften voor livevergaderingen.

Zie quickstart: Spraak herkennen en converteren naar tekst voor meer informatie over het instellen van de omgeving voor een voorbeeldtoepassing.

Spraak naar tekst herkennen vanuit een microfoon

  1. Maak een Foundry-resource voor Spraak in de Azure-portal. Haal de spraakresourcesleutel en -regio op.
  2. Gebruik het volgende codevoorbeeld om spraakherkenning uit te voeren vanaf uw standaardapparaatmicrofoon. Vervang YourSpeechKey en YourSpeechRegion door uw Spraak-resourcesleutel en -regio. 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 bestand go.mod 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 SpeechRecognizer klasse voor gedetailleerde informatie.

Spraak naar tekst herkennen vanuit een audiobestand

Gebruik het volgende voorbeeld om spraakherkenning uit te voeren vanuit een audiobestand. Vervang YourSpeechKey en YourSpeechRegion door uw Spraak-resourcesleutel en -regio. 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 bestand go.mod 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 SpeechRecognizer klasse voor gedetailleerde informatie.

Een container draaien 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 | Package (download) | Aanvullende voorbeelden op GitHub

In deze handleiding leert u hoe u Azure Speech in Foundry Tools gebruikt voor realtime spraak-naar-tekstconversie. Realtime spraakherkenning is ideaal voor toepassingen die directe transcriptie vereisen, zoals dicteren, hulp bij het callcenter en bijschriften voor livevergaderingen.

Zie quickstart: Spraak herkennen en converteren naar tekst voor meer informatie over het instellen van de omgeving voor een voorbeeldtoepassing.

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 details.

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:"YourSpeechResoureKey" region:"YourServiceRegion"];
speechConfig.endpointId = "YourEndpointId";
SPXSpeechRecognizer* speechRecognizer = [[SPXSpeechRecognizer alloc] init:speechConfig];

Een container draaien 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.

In deze handleiding leert u hoe u Azure Speech in Foundry Tools gebruikt voor realtime spraak-naar-tekstconversie. Realtime spraakherkenning is ideaal voor toepassingen die directe transcriptie vereisen, zoals dicteren, hulp bij het callcenter en bijschriften voor livevergaderingen.

Zie quickstart: Spraak herkennen en converteren naar tekst voor meer informatie over het instellen van de omgeving voor een voorbeeldtoepassing.

Spraak herkennen vanaf 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.

U bent nu klaar om de Speech CLI uit te voeren om spraak te herkennen vanuit uw microfoon. Ga via de opdrachtregel naar de directory die het binaire Speech CLI-bestand bevat. Voer vervolgens de volgende opdracht uit:

spx recognize --microphone

Opmerking

De Speech CLI is standaard ingesteld op Engels. U kunt een andere taal kiezen uit de spraak naar tekst tabel. Voeg bijvoorbeeld toe --source de-DE 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 in 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 bestand whatstheweatherlike.wav 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

Opmerking

De Speech CLI is standaard ingesteld op Engels. U kunt een andere taal kiezen uit de spraak naar tekst tabel. Voeg bijvoorbeeld toe --source de-DE om Duitse spraak te herkennen.

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

Een container draaien 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 | Package (download) | Aanvullende voorbeelden op GitHub

In deze handleiding leert u hoe u Azure Speech in Foundry Tools gebruikt voor realtime spraak-naar-tekstconversie. Realtime spraakherkenning is ideaal voor toepassingen die directe transcriptie vereisen, zoals dicteren, hulp bij het callcenter en bijschriften voor livevergaderingen.

Zie quickstart: Spraak herkennen en converteren naar tekst voor meer informatie over het instellen van de omgeving voor een voorbeeldtoepassing.

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 Speech SDK voor Objective-C naslaginformatie voor meer details.

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: "YourSpeechResoureKey", region: "YourServiceRegion");
speechConfig.endpointId = "YourEndpointId";
let speechRecognizer = SPXSpeechRecognizer(speechConfiguration: speechConfig);

Een container draaien 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.