Spraak herkennen
Referentiedocumentatiepakket (NuGet) | Aanvullende voorbeelden op GitHub |
In deze handleiding leert u hoe u Azure AI Speech 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 abonnement, zoals uw sleutel en de bijbehorende regio, het eindpunt, de host of het autorisatietoken.
- Maak een spraakresource in Azure Portal. Haal de spraakresourcesleutel en -regio op.
- Maak een
SpeechConfig
exemplaar met behulp van de volgende code. VervangYourSpeechKey
enYourSpeechRegion
door uw Spraak-resourcesleutel en -regio.
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;
class Program
{
async static Task Main(string[] args)
{
var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
}
}
U kunt op een aantal andere manieren initialiseren SpeechConfig
:
- Gebruik een eindpunt en geef een Speech-service-eindpunt door. Een sleutel of autorisatietoken is optioneel.
- Gebruik een host en geef een hostadres door. Een sleutel of autorisatietoken is optioneel.
- Gebruik een autorisatietoken met de bijbehorende regio/locatie.
Notitie
Ongeacht of u spraakherkenning, spraaksynthese, vertaling of intentieherkenning uitvoert, maakt u altijd een configuratie.
Spraak herkennen met een microfoon
Als u spraak wilt herkennen met behulp van de microfoon van uw apparaat, maakt u een AudioConfig
exemplaar met behulp van de FromDefaultMicrophoneInput()
methode. Initialiseer vervolgens het SpeechRecognizer
object door door te geven speechConfig
en audioConfig
.
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;
class Program
{
async static Task FromMic(SpeechConfig speechConfig)
{
using var audioConfig = AudioConfig.FromDefaultMicrophoneInput();
using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
Console.WriteLine("Speak into your microphone.");
var speechRecognitionResult = await speechRecognizer.RecognizeOnceAsync();
Console.WriteLine($"RECOGNIZED: Text={speechRecognitionResult.Text}");
}
async static Task Main(string[] args)
{
var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
await FromMic(speechConfig);
}
}
Als u een specifiek audio-invoerapparaat wilt gebruiken, moet u de apparaat-id opgeven in AudioConfig
. 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.FromSubscription("YourSpeechKey", "YourSpeechRegion");
await FromFile(speechConfig);
}
}
Spraak herkennen vanuit een stroom in het geheugen
Voor veel gebruiksscenario's is het waarschijnlijk dat uw audiogegevens afkomstig zijn van Azure Blob Storage, of dat deze al in het geheugen aanwezig zijn als een byte[]
exemplaar of een vergelijkbare onbewerkte gegevensstructuur. In het volgende voorbeeld wordt gebruikgemaakt PushAudioInputStream
van spraakherkenning. Dit is in feite een abstracte geheugenstroom. De voorbeeldcode voert de volgende acties uit:
- Schrijft onbewerkte audiogegevens naar
PushAudioInputStream
met behulp van deWrite()
functie, die eenbyte[]
exemplaar accepteert. - Leest een .wav-bestand met behulp van
FileReader
voor demonstratiedoeleinden. Als u al audiogegevens in eenbyte[]
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
objectCreatePushStream()
doorgeven met behulp van de statische functieAudioStreamFormat.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.FromSubscription("YourSpeechKey", "YourSpeechRegion");
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.
Afhandeling van fouten
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. Met de volgende code wordt de speechRecognitionResult.Reason
-eigenschap geëvalueerd en:
- Hiermee wordt het herkenningsresultaat afgedrukt:
ResultReason.RecognizedSpeech
. - Als er geen herkenningsmatch is, informeert deze de gebruiker:
ResultReason.NoMatch
. - Als er een fout optreedt, wordt het foutbericht afgedrukt:
ResultReason.Canceled
.
switch (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 region values?");
}
break;
}
Continue herkenning gebruiken
In de vorige voorbeelden wordt een eenmalige herkenning gebruikt, die één uiting herkent. Het einde van één uiting wordt bepaald door te luisteren naar stilte aan het einde of tot een maximum van 15 seconden audio is verwerkt.
Daarentegen gebruikt u continue herkenning wanneer u wilt bepalen wanneer u wilt stoppen met herkennen. U moet zich abonneren op de gebeurtenissen Recognizing
, Recognized
en Canceled
om de herkenningsresultaten op te halen. Als u de herkenning wilt stoppen, moet u StopContinuousRecognitionAsync
aanroepen. Hier volgt een voorbeeld van hoe doorlopende herkenning wordt uitgevoerd op een audio-invoerbestand.
Begin met het definiëren van de invoer en initialiseren SpeechRecognizer
:
using var audioConfig = AudioConfig.FromWavFileInput("YourAudioFile.wav");
using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
Maak vervolgens een TaskCompletionSource<int>
exemplaar om de status van spraakherkenning te beheren:
var stopRecognition = new TaskCompletionSource<int>();
Abonneer u vervolgens op de gebeurtenissen die SpeechRecognizer
worden verzonden:
Recognizing
: Signaal voor gebeurtenissen die tussenliggende herkenningsresultaten bevatten.Recognized
: Signaal voor gebeurtenissen die uiteindelijke herkenningsresultaten bevatten, die duiden op een geslaagde herkenningspoging.SessionStopped
: Signaal voor gebeurtenissen die het einde van een herkenningssessie (bewerking) aangeven.Canceled
: Signaal voor gebeurtenissen die geannuleerde herkenningsresultaten bevatten. Deze resultaten geven een herkenningspoging aan die is geannuleerd als gevolg van een directe annuleringsaanvraag. Ze geven ook een transport- of protocolfout aan.
speechRecognizer.Recognizing += (s, e) =>
{
Console.WriteLine($"RECOGNIZING: Text={e.Result.Text}");
};
speechRecognizer.Recognized += (s, e) =>
{
if (e.Result.Reason == ResultReason.RecognizedSpeech)
{
Console.WriteLine($"RECOGNIZED: Text={e.Result.Text}");
}
else if (e.Result.Reason == ResultReason.NoMatch)
{
Console.WriteLine($"NOMATCH: Speech could not be recognized.");
}
};
speechRecognizer.Canceled += (s, e) =>
{
Console.WriteLine($"CANCELED: Reason={e.Reason}");
if (e.Reason == CancellationReason.Error)
{
Console.WriteLine($"CANCELED: ErrorCode={e.ErrorCode}");
Console.WriteLine($"CANCELED: ErrorDetails={e.ErrorDetails}");
Console.WriteLine($"CANCELED: Did you set the speech resource key and region values?");
}
stopRecognition.TrySetResult(0);
};
speechRecognizer.SessionStopped += (s, e) =>
{
Console.WriteLine("\n Session stopped event.");
stopRecognition.TrySetResult(0);
};
Als alles is ingesteld, roept u StartContinuousRecognitionAsync
aan om te beginnen met herkennen:
await speechRecognizer.StartContinuousRecognitionAsync();
// Waits for completion. Use Task.WaitAny to keep the task rooted.
Task.WaitAny(new[] { stopRecognition.Task });
// Make the following call at some point to stop recognition:
// await speechRecognizer.StopContinuousRecognitionAsync();
De brontaal wijzigen
Een veelvoorkomende taak voor spraakherkenning is het opgeven van de invoer- (of bron)taal. In het volgende voorbeeld ziet u hoe u de invoertaal wijzigt in Italiaans. Zoek uw SpeechConfig
exemplaar in uw code en voeg deze regel direct eronder toe:
speechConfig.SpeechRecognitionLanguage = "it-IT";
De eigenschap SpeechRecognitionLanguage
verwacht een indelingstekenreeks voor taal-landinstellingen. Zie Taal- en spraakondersteuning voor de Speech-service voor een lijst met ondersteunde landinstellingen.
Taalidentificatie
U kunt taalidentificatie gebruiken met spraak-naar-tekstherkenning wanneer u de taal in een audiobron moet identificeren en deze vervolgens wilt transcriberen naar tekst.
Zie Taalidentificatie voor een volledig codevoorbeeld.
Een aangepast eindpunt gebruiken
Met aangepaste spraak kunt u uw eigen gegevens uploaden, een aangepast model testen en trainen, de nauwkeurigheid tussen modellen vergelijken en een model implementeren op een aangepast eindpunt. In het volgende voorbeeld ziet u hoe u een aangepast eindpunt instelt.
var speechConfig = SpeechConfig.FromSubscription("YourSubscriptionKey", "YourServiceRegion");
speechConfig.EndpointId = "YourEndpointId";
var speechRecognizer = new SpeechRecognizer(speechConfig);
Een container uitvoeren en gebruiken
Spraakcontainers bieden websocket-api's voor query-eindpunten die toegankelijk zijn via de Speech SDK en Speech CLI. De Speech SDK en Speech CLI maken standaard gebruik van de openbare Speech-service. Als u de container wilt gebruiken, moet u de initialisatiemethode wijzigen. Gebruik een containerhost-URL in plaats van sleutel en regio.
Zie Host-URL's in Speech-containers installeren en uitvoeren met Docker voor meer informatie over containers.
Wijzigen hoe stilte wordt verwerkt
Als een gebruiker 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 één zin scheidt in meerdere resultaten.
- Een enkele herkenning die te snel eindigt terwijl wordt gewacht tot spraak begint.
Deze problemen kunnen worden opgelost door een van de twee time-outeigenschappen in te stellen op het SpeechConfig
exemplaar dat wordt gebruikt om een SpeechRecognizer
:
- De time-out voor segmentatie-stilte past aan hoeveel niet-afspeech-audio is toegestaan binnen een woordgroep die momenteel wordt gesproken voordat deze woordgroep wordt beschouwd als 'gereed'.
- Met hogere waarden worden de resultaten over het algemeen langer en worden langere pauzes van de luidspreker binnen een woordgroep toegestaan, maar duurt het langer om resultaten te bereiken. Ze kunnen ook afzonderlijke woordgroepen combineren in één resultaat wanneer ze te hoog zijn ingesteld.
- Lagere waarden maken de resultaten over het algemeen korter en zorgen ervoor dat er meer prompt- en frequente onderbrekingen tussen woordgroepen worden veroorzaakt, maar kunnen ook leiden tot afzonderlijke zinnen in meerdere resultaten wanneer deze te laag zijn ingesteld.
- Deze time-out kan worden ingesteld op gehele getallen tussen 100 en 5000, in milliseconden, met 500 standaardwaarden.
- Met de initiële time-out voor stilte wordt aangepast hoeveel niet-peech-audio is toegestaan voordat een woordgroep wordt beëindigd voordat de herkenningspoging eindigt in het resultaat 'geen overeenkomst'.
- Hogere waarden geven sprekers meer tijd om te reageren en te beginnen met spreken, maar kunnen ook leiden tot trage reactiesnelheid wanneer er niets wordt gesproken.
- Lagere waarden zorgen voor een prompt 'geen overeenkomst' voor snellere gebruikerservaring en meer gecontroleerde audioafhandeling, maar kan een luidspreker te snel uitschakelen wanneer deze te laag is ingesteld.
- Omdat continue herkenning veel resultaten genereert, bepaalt deze waarde hoe vaak 'geen overeenkomst'-resultaten binnenkomen, maar anders niet van invloed is op de inhoud van herkenningsresultaten.
- Deze time-out kan worden ingesteld op een niet-negatief geheel getal, in milliseconden of op 0 om deze volledig uit te schakelen. 5000 is een typische standaardinstelling voor herkenning met één opname, terwijl 15000 een standaardwaarde is voor continue herkenning.
Aangezien er compromissen zijn bij het wijzigen van deze time-outs, moet u alleen de instellingen wijzigen wanneer u een probleem ondervindt met betrekking tot de verwerking van stiltes. Standaardwaarden verwerken de meeste gesproken audio optimaal en alleen ongebruikelijke scenario's moeten problemen ondervinden.
Voorbeeld: Gebruikers die een serienummer zoals ABC-123-4567 spreken, kunnen een onderbreking tussen tekengroepen lang genoeg onderbreken om het serienummer in meerdere resultaten te verdelen. Probeer in dit geval een hogere waarde, zoals 2000 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 waarin een spreker wordt gevraagd een serienummer te snel te vinden en te lezen terwijl het nummer wordt gevonden. Probeer in dit geval een langere time-out voor stilte, zoals 10.000 ms:
speechConfig.SetProperty(PropertyId.SpeechServiceConnection_InitialSilenceTimeoutMs, "10000");
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 te vertrouwen op time-outs voor stilte, semantische segmentatiesegmenten en eindresultaten worden geretourneerd wanneer leestekens (zoals '.' of '?') worden gedetecteerd. Dit verbetert de gebruikerservaring met hoogwaardige, semantisch volledige segmenten en voorkomt lange tussenliggende resultaten.
Als u semantische segmentatie wilt gebruiken, moet u de volgende eigenschap instellen op het SpeechConfig
exemplaar dat wordt gebruikt om een SpeechRecognizer
:
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 transcriptie en bijschriften. Deze mag niet worden gebruikt in de modus voor eenmalige herkenning en dicteren.
- Semantische segmentatie is niet beschikbaar voor alle talen en landinstellingen. Momenteel is semantische segmentatie alleen beschikbaar voor Engelse (en) landinstellingen zoals en-US, en-GB, en-IN en-AU.
- 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.
Referentiedocumentatiepakket (NuGet) | Aanvullende voorbeelden op GitHub |
In deze handleiding leert u hoe u Azure AI Speech 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 abonnement, zoals uw sleutel en de bijbehorende regio, het eindpunt, de host of het autorisatietoken.
- Maak een spraakresource in Azure Portal. Haal de spraakresourcesleutel en -regio op.
- Maak een
SpeechConfig
exemplaar met behulp van de volgende code. VervangYourSpeechKey
enYourSpeechRegion
door uw Spraak-resourcesleutel en -regio.
using namespace std;
using namespace Microsoft::CognitiveServices::Speech;
auto speechConfig = SpeechConfig::FromSubscription("YourSpeechKey", "YourSpeechRegion");
U kunt op een aantal andere manieren initialiseren SpeechConfig
:
- Gebruik een eindpunt en geef een Speech-service-eindpunt door. Een sleutel of autorisatietoken is optioneel.
- Gebruik een host en geef een hostadres door. Een sleutel of autorisatietoken is optioneel.
- Gebruik een autorisatietoken met de bijbehorende regio/locatie.
Notitie
Ongeacht of u spraakherkenning, spraaksynthese, vertaling of intentieherkenning uitvoert, maakt u altijd een configuratie.
Spraak herkennen met een microfoon
Als u spraak wilt herkennen met behulp van de microfoon van uw apparaat, maakt u een AudioConfig
exemplaar met behulp van de FromDefaultMicrophoneInput()
lidfunctie. Initialiseer vervolgens hetSpeechRecognizer
object door door te geven audioConfig
en config
.
using namespace Microsoft::CognitiveServices::Speech::Audio;
auto audioConfig = AudioConfig::FromDefaultMicrophoneInput();
auto speechRecognizer = SpeechRecognizer::FromConfig(config, audioConfig);
cout << "Speak into your microphone." << std::endl;
auto result = speechRecognizer->RecognizeOnceAsync().get();
cout << "RECOGNIZED: Text=" << result->Text << std::endl;
Als u een specifiek audio-invoerapparaat wilt gebruiken, moet u de apparaat-id opgeven in AudioConfig
. Zie Een audio-invoerapparaat selecteren met de Speech SDK voor meer informatie over het ophalen van de apparaat-id.
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 Recognizer-klasse voor de Speech SDK voor C++ maakt een aantal methoden beschikbaar die u voor spraakherkenning kunt gebruiken.
Eenmalige herkenning
Met eenmalige herkenning herkent u asynchroon één uiting. Het einde van één uiting wordt bepaald door te luisteren naar stilte aan het einde of tot een maximum van 15 seconden audio is verwerkt. Hier volgt een voorbeeld van asynchrone herkenning met één opname via RecognizeOnceAsync
:
auto result = speechRecognizer->RecognizeOnceAsync().get();
U moet code schrijven om het resultaat af te handelen. Dit voorbeeld evalueert result->Reason
en:
- Hiermee wordt het herkenningsresultaat afgedrukt:
ResultReason::RecognizedSpeech
. - Als er geen herkenningsmatch is, informeert deze de gebruiker:
ResultReason::NoMatch
. - Als er een fout optreedt, wordt het foutbericht afgedrukt:
ResultReason::Canceled
.
switch (result->Reason)
{
case ResultReason::RecognizedSpeech:
cout << "We recognized: " << result->Text << std::endl;
break;
case ResultReason::NoMatch:
cout << "NOMATCH: Speech could not be recognized." << std::endl;
break;
case ResultReason::Canceled:
{
auto cancellation = CancellationDetails::FromResult(result);
cout << "CANCELED: Reason=" << (int)cancellation->Reason << std::endl;
if (cancellation->Reason == CancellationReason::Error) {
cout << "CANCELED: ErrorCode= " << (int)cancellation->ErrorCode << std::endl;
cout << "CANCELED: ErrorDetails=" << cancellation->ErrorDetails << std::endl;
cout << "CANCELED: Did you set the speech resource key and region values?" << std::endl;
}
}
break;
default:
break;
}
Continue herkenning
Continue herkenning is wat ingewikkelder dan eenmalige herkenning. U moet zich abonneren op de gebeurtenissen Recognizing
, Recognized
en Canceled
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
worden verzonden:
Recognizing
: Signaal voor gebeurtenissen die tussenliggende herkenningsresultaten bevatten.Recognized
: Signaal voor gebeurtenissen die uiteindelijke herkenningsresultaten bevatten, die duiden op een geslaagde herkenningspoging.SessionStopped
: Signaal voor gebeurtenissen die het einde van een herkenningssessie (bewerking) aangeven.Canceled
: Signaal voor gebeurtenissen die geannuleerde herkenningsresultaten bevatten. Deze resultaten geven een herkenningspoging aan die is geannuleerd als gevolg van een directe annuleringsaanvraag. Ze geven ook een transport- of protocolfout aan.
speechRecognizer->Recognizing.Connect([](const SpeechRecognitionEventArgs& e)
{
cout << "Recognizing:" << e.Result->Text << std::endl;
});
speechRecognizer->Recognized.Connect([](const SpeechRecognitionEventArgs& e)
{
if (e.Result->Reason == ResultReason::RecognizedSpeech)
{
cout << "RECOGNIZED: Text=" << e.Result->Text
<< " (text could not be translated)" << std::endl;
}
else if (e.Result->Reason == ResultReason::NoMatch)
{
cout << "NOMATCH: Speech could not be recognized." << std::endl;
}
});
speechRecognizer->Canceled.Connect([&recognitionEnd](const SpeechRecognitionCanceledEventArgs& e)
{
cout << "CANCELED: Reason=" << (int)e.Reason << std::endl;
if (e.Reason == CancellationReason::Error)
{
cout << "CANCELED: ErrorCode=" << (int)e.ErrorCode << "\n"
<< "CANCELED: ErrorDetails=" << e.ErrorDetails << "\n"
<< "CANCELED: Did you set the speech resource key and region values?" << std::endl;
recognitionEnd.set_value(); // Notify to stop recognition.
}
});
speechRecognizer->SessionStopped.Connect([&recognitionEnd](const SessionEventArgs& e)
{
cout << "Session stopped.";
recognitionEnd.set_value(); // Notify to stop recognition.
});
Als alles is ingesteld, roept u 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 invoer- (of bron)taal. In het volgende voorbeeld ziet u hoe u de invoertaal wijzigt in het Duits. Zoek uw SpeechConfig
exemplaar in uw code en voeg deze regel direct eronder toe:
speechConfig->SetSpeechRecognitionLanguage("de-DE");
SetSpeechRecognitionLanguage
is een parameter die een tekenreeks als argument gebruikt. Zie Taal- en spraakondersteuning voor de Speech-service voor een lijst met ondersteunde landinstellingen.
Taalidentificatie
U kunt taalidentificatie gebruiken met spraak-naar-tekstherkenning wanneer u de taal in een audiobron moet identificeren en deze vervolgens wilt transcriberen naar tekst.
Zie Taalidentificatie voor een volledig codevoorbeeld.
Een aangepast eindpunt gebruiken
Met aangepaste spraak kunt u uw eigen gegevens uploaden, een aangepast model testen en trainen, de nauwkeurigheid tussen modellen vergelijken en een model implementeren op een aangepast eindpunt. In het volgende voorbeeld ziet u hoe u een aangepast eindpunt instelt.
auto speechConfig = SpeechConfig::FromSubscription("YourSubscriptionKey", "YourServiceRegion");
speechConfig->SetEndpointId("YourEndpointId");
auto speechRecognizer = SpeechRecognizer::FromConfig(speechConfig);
Een container uitvoeren en gebruiken
Spraakcontainers bieden websocket-api's voor query-eindpunten die toegankelijk zijn via de Speech SDK en Speech CLI. De Speech SDK en Speech CLI maken standaard gebruik van de openbare Speech-service. Als u de container wilt gebruiken, moet u de initialisatiemethode wijzigen. Gebruik een containerhost-URL in plaats van sleutel en regio.
Zie Host-URL's in Speech-containers installeren en uitvoeren met Docker voor meer informatie over containers.
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 te vertrouwen op time-outs voor stilte, semantische segmentatiesegmenten en eindresultaten worden geretourneerd wanneer leestekens (zoals '.' of '?') worden gedetecteerd. Dit verbetert de gebruikerservaring met hoogwaardige, semantisch volledige segmenten en voorkomt lange tussenliggende resultaten.
Als u semantische segmentatie wilt gebruiken, moet u de volgende eigenschap instellen op het SpeechConfig
exemplaar dat wordt gebruikt om een SpeechRecognizer
:
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 transcriptie en bijschriften. Deze mag niet worden gebruikt in de modus voor eenmalige herkenning en dicteren.
- Semantische segmentatie is niet beschikbaar voor alle talen en landinstellingen. Momenteel is semantische segmentatie alleen beschikbaar voor Engelse (en) landinstellingen zoals en-US, en-GB, en-IN en-AU.
- 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.
Referentiedocumentatiepakket (Go) | Aanvullende voorbeelden op GitHub |
In deze handleiding leert u hoe u Azure AI Speech 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
- Maak een spraakresource in Azure Portal. Haal de spraakresourcesleutel en -regio op.
- Gebruik het volgende codevoorbeeld om spraakherkenning uit te voeren met de standaardmicrofoon van het apparaat. Vervang
YourSpeechKey
enYourSpeechRegion
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 go.mod-bestand te maken dat is gekoppeld aan onderdelen die worden gehost op GitHub:
go mod init quickstart
go get github.com/Microsoft/cognitive-services-speech-sdk-go
Bouw nu de code en voer deze uit:
go build
go run quickstart
Zie de referentie-inhoud voor de SpeechConfig
klasse en de SpeechRecognizer
klasse voor gedetailleerde informatie.
Spraak naar tekst herkennen vanuit een audiobestand
Gebruik het volgende voorbeeld om spraakherkenning uit te voeren met een audiobestand. Vervang 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 go.mod-bestand te maken dat is gekoppeld aan onderdelen die worden gehost op GitHub:
go mod init quickstart
go get github.com/Microsoft/cognitive-services-speech-sdk-go
Bouw nu de code en voer deze uit:
go build
go run quickstart
Zie de referentie-inhoud voor de SpeechConfig
klasse en de SpeechRecognizer
klasse voor gedetailleerde informatie.
Een container uitvoeren en gebruiken
Spraakcontainers bieden websocket-api's voor query-eindpunten die toegankelijk zijn via de Speech SDK en Speech CLI. De Speech SDK en Speech CLI maken standaard gebruik van de openbare Speech-service. Als u de container wilt gebruiken, moet u de initialisatiemethode wijzigen. Gebruik een containerhost-URL in plaats van sleutel en regio.
Zie Host-URL's in Speech-containers installeren en uitvoeren met Docker voor meer informatie over containers.
Referentiedocumentatie | Aanvullende voorbeelden op GitHub
In deze handleiding leert u hoe u Azure AI Speech 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 abonnement, zoals uw sleutel en de bijbehorende regio, het eindpunt, de host of het autorisatietoken.
- Maak een spraakresource in Azure Portal. Haal de spraakresourcesleutel en -regio op.
- 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.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
public class Program {
public static void main(String[] args) throws InterruptedException, ExecutionException {
SpeechConfig speechConfig = SpeechConfig.fromSubscription("<paste-your-speech-key>", "<paste-your-region>");
}
}
U kunt op een aantal andere manieren initialiseren SpeechConfig
:
- Gebruik een eindpunt en geef een Speech-service-eindpunt door. Een sleutel of autorisatietoken is optioneel.
- Gebruik een host en geef een hostadres door. Een sleutel of autorisatietoken is optioneel.
- Gebruik een autorisatietoken met de bijbehorende regio/locatie.
Notitie
Ongeacht of u spraakherkenning, spraaksynthese, vertaling of intentieherkenning uitvoert, u maakt altijd een configuratie.
Spraak herkennen met een microfoon
Als u spraak wilt herkennen met behulp van de microfoon van uw apparaat, maakt u een AudioConfig
exemplaar met behulp van de fromDefaultMicrophoneInput()
methode. Initialiseer vervolgens het SpeechRecognizer
object door door te geven audioConfig
en config
.
import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.AudioConfig;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
public class Program {
public static void main(String[] args) throws InterruptedException, ExecutionException {
SpeechConfig speechConfig = SpeechConfig.fromSubscription("<paste-your-speech-key>", "<paste-your-region>");
fromMic(speechConfig);
}
public static void fromMic(SpeechConfig speechConfig) throws InterruptedException, ExecutionException {
AudioConfig audioConfig = AudioConfig.fromDefaultMicrophoneInput();
SpeechRecognizer speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
System.out.println("Speak into your microphone.");
Future<SpeechRecognitionResult> task = speechRecognizer.recognizeOnceAsync();
SpeechRecognitionResult 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.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
public class Program {
public static void main(String[] args) throws InterruptedException, ExecutionException {
SpeechConfig speechConfig = SpeechConfig.fromSubscription("<paste-your-speech-key>", "<paste-your-region>");
fromFile(speechConfig);
}
public static void fromFile(SpeechConfig speechConfig) throws InterruptedException, ExecutionException {
AudioConfig audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
SpeechRecognizer speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
Future<SpeechRecognitionResult> task = speechRecognizer.recognizeOnceAsync();
SpeechRecognitionResult speechRecognitionResult = task.get();
System.out.println("RECOGNIZED: Text=" + speechRecognitionResult.getText());
}
}
Afhandeling van fouten
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. In het volgende voorbeeld wordt de eigenschap speechRecognitionResult.getReason()
geëvalueerd en:
- Hiermee wordt het herkenningsresultaat afgedrukt:
ResultReason.RecognizedSpeech
. - Als er geen herkenningsmatch is, informeert deze de gebruiker:
ResultReason.NoMatch
. - Als er een fout optreedt, wordt het foutbericht afgedrukt:
ResultReason.Canceled
.
switch (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 een eenmalige herkenning gebruikt, die één uiting herkent. Het einde van één uiting wordt bepaald door te luisteren naar stilte aan het einde of tot een maximum van 15 seconden audio is verwerkt.
Daarentegen gebruikt u continue herkenning wanneer u wilt bepalen wanneer u wilt stoppen met herkennen. U moet zich abonneren op de gebeurtenissen recognizing
, recognized
en canceled
om de herkenningsresultaten op te halen. Als u de herkenning wilt stoppen, moet u stopContinuousRecognitionAsync
aanroepen. Hier volgt een voorbeeld van hoe u continue herkenning kunt uitvoeren op een audio-invoerbestand.
Begin met het definiëren van de invoer en initialiseren SpeechRecognizer
:
AudioConfig audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
SpeechRecognizer speechRecognizer = new SpeechRecognizer(config, audioConfig);
Maak vervolgens een variabele om de status van spraakherkenning te beheren. Declareer een Semaphore
exemplaar in het klassebereik:
private static Semaphore stopTranslationWithFileSemaphore;
Abonneer u vervolgens op de gebeurtenissen die SpeechRecognizer
worden verzonden:
recognizing
: Signaal voor gebeurtenissen die tussenliggende herkenningsresultaten bevatten.recognized
: Signaal voor gebeurtenissen die uiteindelijke herkenningsresultaten bevatten, die duiden op een geslaagde herkenningspoging.sessionStopped
: Signaal voor gebeurtenissen die het einde van een herkenningssessie (bewerking) aangeven.canceled
: Signaal voor gebeurtenissen die geannuleerde herkenningsresultaten bevatten. Deze resultaten geven een herkenningspoging aan die is geannuleerd als gevolg van een directe annuleringsaanvraag. Ze geven ook een transport- of protocolfout aan.
// First initialize the semaphore.
stopTranslationWithFileSemaphore = new Semaphore(0);
speechRecognizer.recognizing.addEventListener((s, e) -> {
System.out.println("RECOGNIZING: Text=" + e.getResult().getText());
});
speechRecognizer.recognized.addEventListener((s, e) -> {
if (e.getResult().getReason() == ResultReason.RecognizedSpeech) {
System.out.println("RECOGNIZED: Text=" + e.getResult().getText());
}
else if (e.getResult().getReason() == ResultReason.NoMatch) {
System.out.println("NOMATCH: Speech could not be recognized.");
}
});
speechRecognizer.canceled.addEventListener((s, e) -> {
System.out.println("CANCELED: Reason=" + e.getReason());
if (e.getReason() == CancellationReason.Error) {
System.out.println("CANCELED: ErrorCode=" + e.getErrorCode());
System.out.println("CANCELED: ErrorDetails=" + e.getErrorDetails());
System.out.println("CANCELED: Did you set the speech resource key and region values?");
}
stopTranslationWithFileSemaphore.release();
});
speechRecognizer.sessionStopped.addEventListener((s, e) -> {
System.out.println("\n Session stopped event.");
stopTranslationWithFileSemaphore.release();
});
Als alles is ingesteld, roept u startContinuousRecognitionAsync
aan om te beginnen met herkennen:
// Starts continuous recognition. Uses StopContinuousRecognitionAsync() to stop recognition.
speechRecognizer.startContinuousRecognitionAsync().get();
// Waits for completion.
stopTranslationWithFileSemaphore.acquire();
// Stops recognition.
speechRecognizer.stopContinuousRecognitionAsync().get();
De brontaal wijzigen
Een veelvoorkomende taak voor spraakherkenning is het opgeven van de invoer- (of bron)taal. In het volgende voorbeeld ziet u hoe u de invoertaal wijzigt in het Frans. Zoek uw SpeechConfig
exemplaar in uw code en voeg deze regel direct eronder toe:
config.setSpeechRecognitionLanguage("fr-FR");
setSpeechRecognitionLanguage
is een parameter die een tekenreeks als argument gebruikt. Raadpleeg de lijst met ondersteunde taalinstellingen voor spraak naar tekst.
Taalidentificatie
U kunt taalidentificatie gebruiken met spraak-naar-tekstherkenning wanneer u de taal in een audiobron moet identificeren en deze vervolgens wilt transcriberen naar tekst.
Zie Taalidentificatie voor een volledig codevoorbeeld.
Een aangepast eindpunt gebruiken
Met aangepaste spraak kunt u uw eigen gegevens uploaden, een aangepast model testen en trainen, de nauwkeurigheid tussen modellen vergelijken en een model implementeren op een aangepast eindpunt. In het volgende voorbeeld ziet u hoe u een aangepast eindpunt instelt:
SpeechConfig speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourServiceRegion");
speechConfig.setEndpointId("YourEndpointId");
SpeechRecognizer speechRecognizer = new SpeechRecognizer(speechConfig);
Een container uitvoeren en gebruiken
Spraakcontainers bieden websocket-api's voor query-eindpunten die toegankelijk zijn via de Speech SDK en Speech CLI. De Speech SDK en Speech CLI maken standaard gebruik van de openbare Speech-service. Als u de container wilt gebruiken, moet u de initialisatiemethode wijzigen. Gebruik een containerhost-URL in plaats van sleutel en regio.
Zie Host-URL's in Speech-containers installeren en uitvoeren met Docker voor meer informatie over containers.
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 te vertrouwen op time-outs voor stilte, semantische segmentatiesegmenten en eindresultaten worden geretourneerd wanneer leestekens (zoals '.' of '?') worden gedetecteerd. Dit verbetert de gebruikerservaring met hoogwaardige, semantisch volledige segmenten en voorkomt lange tussenliggende resultaten.
Als u semantische segmentatie wilt gebruiken, moet u de volgende eigenschap instellen op het SpeechConfig
exemplaar dat wordt gebruikt om een SpeechRecognizer
:
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 transcriptie en bijschriften. Deze mag niet worden gebruikt in de modus voor eenmalige herkenning en dicteren.
- Semantische segmentatie is niet beschikbaar voor alle talen en landinstellingen. Momenteel is semantische segmentatie alleen beschikbaar voor Engelse (en) landinstellingen zoals en-US, en-GB, en-IN en-AU.
- 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.
Referentiedocumentatiepakket (npm) | Aanvullende voorbeelden in broncode van GitHub Library | |
In deze handleiding leert u hoe u Azure AI Speech 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 abonnement, zoals uw sleutel en de bijbehorende regio, het eindpunt, de host of het autorisatietoken.
- Maak een spraakresource in Azure Portal. Haal de spraakresourcesleutel en -regio op.
- Maak een
SpeechConfig
exemplaar met behulp van de volgende code. VervangYourSpeechKey
enYourSpeechRegion
door uw Spraak-resourcesleutel en -regio.
const speechConfig = sdk.SpeechConfig.fromSubscription("YourSpeechKey", "YourSpeechRegion");
U kunt op een aantal andere manieren initialiseren SpeechConfig
:
- Gebruik een eindpunt en geef een Speech-service-eindpunt door. Een sleutel of autorisatietoken is optioneel.
- Gebruik een host en geef een hostadres door. Een sleutel of autorisatietoken is optioneel.
- Gebruik een autorisatietoken met de bijbehorende regio/locatie.
Notitie
Ongeacht of u spraakherkenning, spraaksynthese, vertaling of intentieherkenning uitvoert, maakt u altijd een configuratie.
Spraak herkennen met een microfoon
Spraak herkennen vanaf een microfoon wordt niet ondersteund in Node.js. Dit wordt alleen ondersteund in een javaScript-omgeving in een browser. Zie het React-voorbeeld en de implementatie van spraak naar tekst vanuit een microfoon op GitHub voor meer informatie. Het React-voorbeeld toont ontwerppatronen voor de uitwisseling en het beheer van verificatietokens. Ook wordt de opname van audio van een microfoon of bestand voor spraak-naar-tekstconversies weergegeven.
Notitie
Als u een specifiek audio-invoerapparaat wilt gebruiken, moet u de apparaat-id 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.fromSubscription("YourSpeechKey", "YourSpeechRegion");
function fromFile() {
let audioConfig = sdk.AudioConfig.fromWavFileInput(fs.readFileSync("YourAudioFile.wav"));
let speechRecognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);
speechRecognizer.recognizeOnceAsync(result => {
console.log(`RECOGNIZED: Text=${result.text}`);
speechRecognizer.close();
});
}
fromFile();
Spraak herkennen vanuit een stroom in het geheugen
Voor veel gebruiksvoorbeelden zijn uw audiogegevens waarschijnlijk afkomstig van Azure Blob Storage. Of het bevindt zich al in het geheugen als een ArrayBuffer
of een vergelijkbare onbewerkte gegevensstructuur. De volgende code:
- Hiermee maakt u een pushstream met behulp van
createPushStream()
. - Leest een .wav-bestand met behulp van
fs.createReadStream
voor demonstratiedoeleinden. Als u al audiogegevens hebt,ArrayBuffer
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.fromSubscription("YourSpeechKey", "YourSpeechRegion");
function fromStream() {
let pushStream = sdk.AudioInputStream.createPushStream();
fs.createReadStream("YourAudioFile.wav").on('data', function(arrayBuffer) {
pushStream.write(arrayBuffer.slice());
}).on('end', function() {
pushStream.close();
});
let audioConfig = sdk.AudioConfig.fromStreamInput(pushStream);
let speechRecognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);
speechRecognizer.recognizeOnceAsync(result => {
console.log(`RECOGNIZED: Text=${result.text}`);
speechRecognizer.close();
});
}
fromStream();
Als u een pushstream als invoer gebruikt, wordt ervan uitgegaan dat de audiogegevens 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.
Afhandeling van fouten
In de vorige voorbeelden wordt alleen de herkende tekst opgehaald uit de result.text
eigenschap. Als u fouten en andere antwoorden wilt afhandelen, moet u code schrijven om het resultaat af te handelen. Met de volgende code wordt de result.reason
-eigenschap geëvalueerd en:
- Hiermee wordt het herkenningsresultaat afgedrukt:
ResultReason.RecognizedSpeech
. - Als er geen herkenningsmatch is, informeert deze de gebruiker:
ResultReason.NoMatch
. - Als er een fout optreedt, wordt het foutbericht afgedrukt:
ResultReason.Canceled
.
switch (result.reason) {
case sdk.ResultReason.RecognizedSpeech:
console.log(`RECOGNIZED: Text=${result.text}`);
break;
case sdk.ResultReason.NoMatch:
console.log("NOMATCH: Speech could not be recognized.");
break;
case sdk.ResultReason.Canceled:
const cancellation = sdk.CancellationDetails.fromResult(result);
console.log(`CANCELED: Reason=${cancellation.reason}`);
if (cancellation.reason == sdk.CancellationReason.Error) {
console.log(`CANCELED: ErrorCode=${cancellation.ErrorCode}`);
console.log(`CANCELED: ErrorDetails=${cancellation.errorDetails}`);
console.log("CANCELED: Did you set the speech resource key and region values?");
}
break;
}
Continue herkenning gebruiken
In de vorige voorbeelden wordt een eenmalige herkenning gebruikt, die één uiting herkent. Het einde van één uiting wordt bepaald door te luisteren naar stilte aan het einde of tot een maximum van 15 seconden audio is verwerkt.
U kunt daarentegen continue herkenning gebruiken wanneer u wilt bepalen wanneer u wilt stoppen met herkennen. U moet zich abonneren op de gebeurtenissen Recognizing
, Recognized
en Canceled
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 doorlopende herkenning wordt uitgevoerd op een audio-invoerbestand.
Begin met het definiëren van de invoer en initialiseren SpeechRecognizer
:
const speechRecognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);
Abonneer u vervolgens op de gebeurtenissen die zijn verzonden vanaf SpeechRecognizer
:
recognizing
: Signaal voor gebeurtenissen die tussenliggende herkenningsresultaten bevatten.recognized
: Signaal voor gebeurtenissen die uiteindelijke herkenningsresultaten bevatten, die duiden op een geslaagde herkenningspoging.sessionStopped
: Signaal voor gebeurtenissen die het einde van een herkenningssessie (bewerking) aangeven.canceled
: Signaal voor gebeurtenissen die geannuleerde herkenningsresultaten bevatten. Deze resultaten geven een herkenningspoging aan die is geannuleerd als gevolg van een directe annuleringsaanvraag. Ze geven ook een transport- of protocolfout aan.
speechRecognizer.recognizing = (s, e) => {
console.log(`RECOGNIZING: Text=${e.result.text}`);
};
speechRecognizer.recognized = (s, e) => {
if (e.result.reason == sdk.ResultReason.RecognizedSpeech) {
console.log(`RECOGNIZED: Text=${e.result.text}`);
}
else if (e.result.reason == sdk.ResultReason.NoMatch) {
console.log("NOMATCH: Speech could not be recognized.");
}
};
speechRecognizer.canceled = (s, e) => {
console.log(`CANCELED: Reason=${e.reason}`);
if (e.reason == sdk.CancellationReason.Error) {
console.log(`"CANCELED: ErrorCode=${e.errorCode}`);
console.log(`"CANCELED: ErrorDetails=${e.errorDetails}`);
console.log("CANCELED: Did you set the speech resource key and region values?");
}
speechRecognizer.stopContinuousRecognitionAsync();
};
speechRecognizer.sessionStopped = (s, e) => {
console.log("\n Session stopped event.");
speechRecognizer.stopContinuousRecognitionAsync();
};
Roep [startContinuousRecognitionAsync
] (/javascript/api/microsoft-cognitiveservices-speech-sdk/speechrecognizer#microsoft-cognitiveservices-speech-sdk-speechrecognizer-startkeywordrecognitionasync) aan om te beginnen met het herkennen van:
speechRecognizer.startContinuousRecognitionAsync();
// Make the following call at some point to stop recognition:
// speechRecognizer.stopContinuousRecognitionAsync();
De brontaal wijzigen
Een veelvoorkomende taak voor spraakherkenning is het opgeven van de invoer- (of bron)taal. In het volgende voorbeeld ziet u hoe u de invoertaal wijzigt in Italiaans. Zoek uw SpeechConfig
exemplaar in uw code en voeg deze regel direct eronder toe:
speechConfig.speechRecognitionLanguage = "it-IT";
De eigenschap speechRecognitionLanguage
verwacht een indelingstekenreeks voor taal-landinstellingen. Zie Taal- en spraakondersteuning voor de Speech-service voor een lijst met ondersteunde landinstellingen.
Taalidentificatie
U kunt taalidentificatie gebruiken met spraak-naar-tekstherkenning wanneer u de taal in een audiobron moet identificeren en deze vervolgens wilt transcriberen naar tekst.
Zie Taalidentificatie voor een volledig codevoorbeeld.
Een aangepast eindpunt gebruiken
Met aangepaste spraak kunt u uw eigen gegevens uploaden, een aangepast model testen en trainen, de nauwkeurigheid tussen modellen vergelijken en een model implementeren op een aangepast eindpunt. In het volgende voorbeeld ziet u hoe u een aangepast eindpunt instelt.
var speechConfig = SpeechSDK.SpeechConfig.fromSubscription("YourSubscriptionKey", "YourServiceRegion");
speechConfig.endpointId = "YourEndpointId";
var speechRecognizer = new SpeechSDK.SpeechRecognizer(speechConfig);
Een container uitvoeren en gebruiken
Spraakcontainers bieden websocket-api's voor query-eindpunten die toegankelijk zijn via de Speech SDK en Speech CLI. De Speech SDK en Speech CLI maken standaard gebruik van de openbare Speech-service. Als u de container wilt gebruiken, moet u de initialisatiemethode wijzigen. Gebruik een containerhost-URL in plaats van sleutel en regio.
Zie Host-URL's in Speech-containers installeren en uitvoeren met Docker voor meer informatie over containers.
Referentiedocumentatiepakket (download) | Aanvullende voorbeelden op GitHub |
In deze handleiding leert u hoe u Azure AI Speech 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:
- Spraak herkennen met een microfoon in Objective-C in macOS
- Spraak herkennen in Objective-C in iOS
- Meer voorbeelden voor Objective-C in iOS
Zie de Speech SDK voor Objective-C-naslaginformatie voor meer informatie.
Een aangepast eindpunt gebruiken
Met aangepaste spraak kunt u uw eigen gegevens uploaden, een aangepast model testen en trainen, de nauwkeurigheid tussen modellen vergelijken en een model implementeren op een aangepast eindpunt. In het volgende voorbeeld ziet u hoe u een aangepast eindpunt instelt:
SPXSpeechConfiguration *speechConfig = [[SPXSpeechConfiguration alloc] initWithSubscription:"YourSubscriptionKey" region:"YourServiceRegion"];
speechConfig.endpointId = "YourEndpointId";
SPXSpeechRecognizer* speechRecognizer = [[SPXSpeechRecognizer alloc] init:speechConfig];
Een container uitvoeren en gebruiken
Spraakcontainers bieden websocket-api's voor query-eindpunten die toegankelijk zijn via de Speech SDK en Speech CLI. De Speech SDK en Speech CLI maken standaard gebruik van de openbare Speech-service. Als u de container wilt gebruiken, moet u de initialisatiemethode wijzigen. Gebruik een containerhost-URL in plaats van sleutel en regio.
Zie Host-URL's in Speech-containers installeren en uitvoeren met Docker voor meer informatie over containers.
Referentiedocumentatiepakket (download) | Aanvullende voorbeelden op GitHub |
In deze handleiding leert u hoe u Azure AI Speech 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 informatie.
Een aangepast eindpunt gebruiken
Met aangepaste spraak kunt u uw eigen gegevens uploaden, een aangepast model testen en trainen, de nauwkeurigheid tussen modellen vergelijken en een model implementeren op een aangepast eindpunt. In het volgende voorbeeld ziet u hoe u een aangepast eindpunt instelt:
let speechConfig = SPXSpeechConfiguration(subscription: "YourSubscriptionKey", region: "YourServiceRegion");
speechConfig.endpointId = "YourEndpointId";
let speechRecognizer = SPXSpeechRecognizer(speechConfiguration: speechConfig);
Een container uitvoeren en gebruiken
Spraakcontainers bieden websocket-api's voor query-eindpunten die toegankelijk zijn via de Speech SDK en Speech CLI. De Speech SDK en Speech CLI maken standaard gebruik van de openbare Speech-service. Als u de container wilt gebruiken, moet u de initialisatiemethode wijzigen. Gebruik een containerhost-URL in plaats van sleutel en regio.
Zie Host-URL's in Speech-containers installeren en uitvoeren met Docker voor meer informatie over containers.
Referentiedocumentatiepakket (PyPi) | Aanvullende voorbeelden op GitHub |
In deze handleiding leert u hoe u Azure AI Speech 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 abonnement, zoals uw spraaksleutel en de bijbehorende regio, het eindpunt, de host of het autorisatietoken.
- Maak een spraakresource in Azure Portal. Haal de spraakresourcesleutel en -regio op.
- Maak een
SpeechConfig
exemplaar met behulp van de volgende code. VervangYourSpeechKey
enYourSpeechRegion
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.
Notitie
Ongeacht of u spraakherkenning, spraaksynthese, vertaling of intentieherkenning uitvoert, maakt u altijd een configuratie.
Spraak herkennen met een microfoon
Als u spraak wilt herkennen met behulp van de microfoon van uw apparaat, maakt u een SpeechRecognizer
exemplaar zonder door te geven en geeft u speech_config
het volgende doorAudioConfig
:
import azure.cognitiveservices.speech as speechsdk
def from_mic():
speech_config = speechsdk.SpeechConfig(subscription="YourSpeechKey", region="YourSpeechRegion")
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config)
print("Speak into your microphone.")
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 AudioConfig
deze doorgeven aan de parameter van audio_config
de SpeechRecognizer
constructor. Zie Een audio-invoerapparaat selecteren met de Speech SDK voor meer informatie over het ophalen van de apparaat-id.
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()
Afhandeling van fouten
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. Met de volgende code wordt de speech_recognition_result.reason
-eigenschap geëvalueerd en:
- Hiermee wordt het herkenningsresultaat afgedrukt:
speechsdk.ResultReason.RecognizedSpeech
. - Als er geen herkenningsmatch is, informeert deze de gebruiker:
speechsdk.ResultReason.NoMatch
. - Als er een fout optreedt, wordt het foutbericht afgedrukt:
speechsdk.ResultReason.Canceled
.
if 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 een eenmalige herkenning gebruikt, die één uiting herkent. Het einde van één uiting wordt bepaald door te luisteren naar stilte aan het einde of tot een maximum van 15 seconden audio is verwerkt.
Daarentegen gebruikt u continue herkenning wanneer u wilt bepalen wanneer u wilt stoppen met herkennen. Hiervoor moet u verbinding maken om EventSignal
de herkenningsresultaten op te halen. Als u de herkenning wilt stoppen, moet u stop_continuous_recognition() of stop_continuous_recognition_async() aanroepen. Hier volgt een voorbeeld van hoe doorlopende herkenning wordt uitgevoerd op een audio-invoerbestand.
Begin met het definiëren van de invoer en initialiseren SpeechRecognizer
:
audio_config = speechsdk.audio.AudioConfig(filename=weatherfilename)
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_config)
Maak vervolgens een variabele om de status van spraakherkenning te beheren. Stel de variabele in op False
omdat u aan het begin van de herkenning veilig kunt aannemen dat deze niet is voltooid:
done = False
Maak nu een callback om continue herkenning te stoppen wanneer evt
deze wordt ontvangen. Houd de volgende punten in gedachten:
- Wanneer
evt
het bericht wordt ontvangen, wordt hetevt
afgedrukt. - Nadat
evt
deze is ontvangen, wordt stop_continuous_recognition() aangeroepen om de herkenning te stoppen. - De herkenningsstatus is gewijzigd in
True
.
def stop_cb(evt):
print('CLOSING on {}'.format(evt))
speech_recognizer.stop_continuous_recognition()
nonlocal done
done = True
In het volgende codevoorbeeld ziet u hoe u callbacks koppelt aan gebeurtenissen die vanuit SpeechRecognizer
worden verzonden. De gebeurtenissen zijn:
recognizing
: Signaal voor gebeurtenissen die tussenliggende herkenningsresultaten bevatten.recognized
: Signaal voor gebeurtenissen die uiteindelijke herkenningsresultaten bevatten, die duiden op een geslaagde herkenningspoging.session_started
: Signaal voor gebeurtenissen die het begin van een herkenningssessie (bewerking) aangeven.session_stopped
: Signaal voor gebeurtenissen die het einde van een herkenningssessie (bewerking) aangeven.canceled
: Signaal voor gebeurtenissen die geannuleerde herkenningsresultaten bevatten. Deze resultaten geven een herkenningspoging aan die is geannuleerd als gevolg van een directe annuleringsaanvraag. Ze geven ook een transport- of protocolfout aan.
speech_recognizer.recognizing.connect(lambda evt: print('RECOGNIZING: {}'.format(evt)))
speech_recognizer.recognized.connect(lambda evt: print('RECOGNIZED: {}'.format(evt)))
speech_recognizer.session_started.connect(lambda evt: print('SESSION STARTED: {}'.format(evt)))
speech_recognizer.session_stopped.connect(lambda evt: print('SESSION STOPPED {}'.format(evt)))
speech_recognizer.canceled.connect(lambda evt: print('CANCELED {}'.format(evt)))
speech_recognizer.session_stopped.connect(stop_cb)
speech_recognizer.canceled.connect(stop_cb)
Als alles is ingesteld, kunt u start_continuous_recognition()aanroepen:
speech_recognizer.start_continuous_recognition()
while not done:
time.sleep(.5)
De brontaal wijzigen
Een veelvoorkomende taak voor spraakherkenning is het opgeven van de invoer- (of bron)taal. In het volgende voorbeeld ziet u hoe u de invoertaal wijzigt in het Duits. Zoek uw SpeechConfig
exemplaar in uw code en voeg deze regel direct eronder toe:
speech_config.speech_recognition_language="de-DE"
speech_recognition_language
is een parameter die een tekenreeks als argument gebruikt. Zie Taal- en spraakondersteuning voor de Speech-service voor een lijst met ondersteunde landinstellingen.
Taalidentificatie
U kunt taalidentificatie met Spraak gebruiken voor tekstherkenning wanneer u de taal in een audiobron moet identificeren en deze vervolgens wilt transcriberen naar tekst.
Zie Taalidentificatie voor een volledig codevoorbeeld.
Een aangepast eindpunt gebruiken
Met aangepaste spraak kunt u uw eigen gegevens uploaden, een aangepast model testen en trainen, de nauwkeurigheid tussen modellen vergelijken en een model implementeren op een aangepast eindpunt. In het volgende voorbeeld ziet u hoe u een aangepast eindpunt instelt.
speech_config = speechsdk.SpeechConfig(subscription="YourSubscriptionKey", region="YourServiceRegion")
speech_config.endpoint_id = "YourEndpointId"
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config)
Een container uitvoeren en gebruiken
Spraakcontainers bieden websocket-api's voor query-eindpunten die toegankelijk zijn via de Speech SDK en Speech CLI. De Speech SDK en Speech CLI maken standaard gebruik van de openbare Speech-service. Als u de container wilt gebruiken, moet u de initialisatiemethode wijzigen. Gebruik een containerhost-URL in plaats van sleutel en regio.
Zie Host-URL's in Speech-containers installeren en uitvoeren met Docker voor meer informatie over containers.
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 te vertrouwen op time-outs voor stilte, semantische segmentatiesegmenten en eindresultaten worden geretourneerd wanneer leestekens (zoals '.' of '?') worden gedetecteerd. Dit verbetert de gebruikerservaring met hoogwaardige, semantisch volledige segmenten en voorkomt lange tussenliggende resultaten.
Als u semantische segmentatie wilt gebruiken, moet u de volgende eigenschap instellen op het SpeechConfig
exemplaar dat wordt gebruikt om een SpeechRecognizer
:
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 transcriptie en bijschriften. Deze mag niet worden gebruikt in de modus voor eenmalige herkenning en dicteren.
- Semantische segmentatie is niet beschikbaar voor alle talen en landinstellingen. Momenteel is semantische segmentatie alleen beschikbaar voor Engelse (en) landinstellingen zoals en-US, en-GB, en-IN en-AU.
- 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.
Spraak-naar-tekst-REST API-verwijzing Speech to text REST API voor korte audioverwijzing | Aanvullende voorbeelden op GitHub |
In deze handleiding leert u hoe u Azure AI Speech 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 de volgende opdracht uit bij een opdrachtprompt: Voeg de volgende waarden in de opdracht in:
- Uw abonnementssleutel voor de Spraak-resource
- Uw Speech-serviceregio
- Het pad voor het invoeraudiobestand
curl --location --request POST 'https://INSERT_REGION_HERE.stt.speech.microsoft.com/speech/recognition/conversation/cognitiveservices/v1?language=en-US' \
--header 'Ocp-Apim-Subscription-Key: INSERT_SUBSCRIPTION_KEY_HERE' \
--header 'Content-Type: audio/wav' \
--data-binary @'INSERT_AUDIO_FILE_PATH_HERE'
U ontvangt een antwoord zoals in het volgende voorbeeld:
{
"RecognitionStatus": "Success",
"DisplayText": "My voice is my passport, verify me.",
"Offset": 6600000,
"Duration": 32100000
}
Zie de naslaginformatie over de REST API voor spraak naar tekst voor meer informatie.
In deze handleiding leert u hoe u Azure AI Speech 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 met een microfoon
Sluit uw pc-microfoon aan en schakel deze in. Schakel alle apps uit die mogelijk ook gebruikmaken van de microfoon. Sommige computers hebben een ingebouwde microfoon, terwijl andere een Bluetooth-apparaat moeten configureren.
Nu bent u klaar om de Speech-CLI uit te voeren om tekst te herkennen uit uw microfoon. Gebruik de opdrachtregel om de map waarin het binair Speech CLI-bestand zich bevindt te veranderen. Voer vervolgens de volgende opdracht uit:
spx recognize --microphone
Notitie
De Speech-CLI wordt standaard ingesteld op Engels. U kunt een andere taal kiezen dan de spraak-naar-teksttabel. Voeg bijvoorbeeld --source de-DE
toe om Duitse spraak te herkennen.
Spreek in de microfoon en u kunt transcriptie van uw woorden in realtime in tekst zien. De Speech CLI stopt na een stilteperiode of wanneer u Ctrl+C selecteert.
Spraak herkennen uit een bestand
De Speech-CLI kan spraak herkennen uit veel bestandsindelingen en natuurlijke talen. In dit voorbeeld kunt u elk .wav-bestand (16 kHz of 8 kHz, 16-bits en mono PCM) gebruiken dat Engelse spraak bevat. Of als u een snel voorbeeld wilt, downloadt u het 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
Notitie
De Speech-CLI wordt standaard ingesteld op Engels. U kunt een andere taal kiezen dan de spraak-naar-teksttabel. Voeg bijvoorbeeld --source de-DE
toe om Duitse spraak te herkennen.
De Speech CLI toont een teksttranscriptie van de spraak op het scherm.
Een container uitvoeren en gebruiken
Spraakcontainers bieden websocket-api's voor query-eindpunten die toegankelijk zijn via de Speech SDK en Speech CLI. De Speech SDK en Speech CLI maken standaard gebruik van de openbare Speech-service. Als u de container wilt gebruiken, moet u de initialisatiemethode wijzigen. Gebruik een containerhost-URL in plaats van sleutel en regio.
Zie Host-URL's in Speech-containers installeren en uitvoeren met Docker voor meer informatie over containers.