Beszéd felismerése
Referenciadokumentáció-csomag (NuGet) | További minták a GitHubon |
Ebben az útmutatóban megtudhatja, hogyan ismerheti fel és írhatja át a beszédet a szövegre valós időben.
Beszédkonfiguráció létrehozása
Ahhoz, hogy meghívja a Speech szolgáltatást a Speech SDK használatával, létre kell hoznia egy példányt SpeechConfig
. Ez az osztály az előfizetéssel kapcsolatos információkat tartalmazza, például a kulcsot és a társított helyet/régiót, végpontot, gazdagépet vagy engedélyezési jogkivonatot.
- Hozzon létre egy példányt
SpeechConfig
a kulcs és a hely/régió használatával. - Speech-erőforrás létrehozása az Azure Portalon. További információ: Többszolgáltatásos erőforrás létrehozása.
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");
}
}
Inicializálhat SpeechConfig
néhány más módon is:
- Használjon végpontot, és adjon át egy Speech szolgáltatásvégpontot. A kulcs vagy az engedélyezési jogkivonat megadása nem kötelező.
- Használjon gazdagépet, és adjon meg egy gazdagépcímet. A kulcs vagy az engedélyezési jogkivonat megadása nem kötelező.
- Használjon engedélyezési jogkivonatot a társított régióhoz/helyhez.
Feljegyzés
Függetlenül attól, hogy beszédfelismerést, beszédszintézist, fordítást vagy szándékfelismerést végez, mindig létrehoz egy konfigurációt.
Beszéd felismerése mikrofonból
Ha az eszköz mikrofonjának használatával szeretné felismerni a beszédet, hozzon létre egy példányt AudioConfig
a FromDefaultMicrophoneInput()
módszerrel. Ezután inicializálja az objektumot a SpeechRecognizer
továbbítással és audioConfig
a speechConfig
.
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;
class Program
{
async static Task FromMic(SpeechConfig speechConfig)
{
using var audioConfig = AudioConfig.FromDefaultMicrophoneInput();
using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
Console.WriteLine("Speak into your microphone.");
var result = await speechRecognizer.RecognizeOnceAsync();
Console.WriteLine($"RECOGNIZED: Text={result.Text}");
}
async static Task Main(string[] args)
{
var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
await FromMic(speechConfig);
}
}
Ha egy adott hangbemeneti eszközt szeretne használni, meg kell adnia az eszköz azonosítóját a következőben AudioConfig
: . Megtudhatja , hogyan szerezheti be a hangbemeneti eszköz eszközazonosítóját .
Beszédfelismerés végrehajtása fájlból
Ha mikrofon helyett hangfájlból szeretné felismerni a beszédet, akkor is létre kell hoznia egy példányt AudioConfig
. De ebben az esetben nem hív.FromDefaultMicrophoneInput()
Meghívja FromWavFileInput()
és átadja a fájl elérési útját:
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;
class Program
{
async static Task FromFile(SpeechConfig speechConfig)
{
using var audioConfig = AudioConfig.FromWavFileInput("PathToFile.wav");
using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
var result = await speechRecognizer.RecognizeOnceAsync();
Console.WriteLine($"RECOGNIZED: Text={result.Text}");
}
async static Task Main(string[] args)
{
var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
await FromFile(speechConfig);
}
}
Beszéd felismerése memórián belüli streamből
Sok használati esetben valószínű, hogy a hangadatok az Azure Blob Storage-ból származnak, vagy más módon már a memóriában, mint egy byte[]
példány vagy egy hasonló nyers adatstruktúra. Az alábbi példa a beszéd felismerésére használ PushAudioInputStream
, amely lényegében egy absztrakt memóriafolyam. A mintakód a következő műveleteket hajtja végre:
- Nyers hangadatokat (PCM)
PushAudioInputStream
ír a függvény használatával, amely elfogadja aWrite()
példánytbyte[]
. - Beolvas egy .wav fájlt
FileReader
bemutató célokra. Ha már rendelkezik hangadatokkal egybyte[]
példányban, közvetlenül átugorhatja a tartalmat a bemeneti adatfolyamba. - Az alapértelmezett formátum a 16 bites, 16 KHz-es mono pulse-code modulation (PCM) adatok. A formátum testreszabásához a statikus függvény
AudioStreamFormat.GetWaveFormatPCM(sampleRate, (byte)bitRate, (byte)channels)
használatával továbbíthat egyAudioStreamFormat
objektumotCreatePushStream()
.
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;
class Program
{
async static Task FromStream(SpeechConfig speechConfig)
{
var reader = new BinaryReader(File.OpenRead("PathToFile.wav"));
using var audioConfigStream = AudioInputStream.CreatePushStream();
using var audioConfig = AudioConfig.FromStreamInput(audioConfigStream);
using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
byte[] readBytes;
do
{
readBytes = reader.ReadBytes(1024);
audioConfigStream.Write(readBytes, readBytes.Length);
} while (readBytes.Length > 0);
var result = await speechRecognizer.RecognizeOnceAsync();
Console.WriteLine($"RECOGNIZED: Text={result.Text}");
}
async static Task Main(string[] args)
{
var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
await FromStream(speechConfig);
}
}
A leküldéses stream bemenetként való használata feltételezi, hogy a hangadatok nyers PCM-nek minősülnek, és kihagyják a fejléceket. Az API bizonyos esetekben továbbra is működik, ha a fejléc nem lett kihagyva. A legjobb eredmény érdekében fontolja meg a logika implementálását a fejlécek leolvasásához, hogy byte[]
a hangadatok elején kezdődjön.
Hibakezelés
Az előző példák csak a felismert szöveget kapják meg a result.Text
tulajdonságból. A hibák és egyéb válaszok kezeléséhez meg kell írnia néhány kódot az eredmény kezeléséhez. A következő kód kiértékeli a result.Reason
tulajdonságot, és:
- A felismerési eredmény nyomtatása:
ResultReason.RecognizedSpeech
. - Ha nincs felismerési egyezés, tájékoztatja a felhasználót:
ResultReason.NoMatch
. - Hiba esetén a következő hibaüzenet jelenik meg:
ResultReason.Canceled
.
switch (result.Reason)
{
case ResultReason.RecognizedSpeech:
Console.WriteLine($"RECOGNIZED: Text={result.Text}");
break;
case ResultReason.NoMatch:
Console.WriteLine($"NOMATCH: Speech could not be recognized.");
break;
case ResultReason.Canceled:
var cancellation = CancellationDetails.FromResult(result);
Console.WriteLine($"CANCELED: Reason={cancellation.Reason}");
if (cancellation.Reason == CancellationReason.Error)
{
Console.WriteLine($"CANCELED: ErrorCode={cancellation.ErrorCode}");
Console.WriteLine($"CANCELED: ErrorDetails={cancellation.ErrorDetails}");
Console.WriteLine($"CANCELED: Did you set the speech resource key and region values?");
}
break;
}
Folyamatos felismerés használata
Az előző példák egyetlen lövéses felismerést használnak, amely egyetlen kimondott szöveget ismer fel. Egyetlen kimondott szöveg végét a csend hallgatása határozza meg a végén, vagy legfeljebb 15 másodpercnyi hang feldolgozásáig.
Ezzel szemben folyamatos felismerést használ, amikor azt szeretné szabályozni, hogy mikor hagyja abba a felismerést. A felismerési eredmények eléréséhez elő kell fizetnie a Recognizing
, Recognized
és Canceled
az eseményekre. A felismerés leállításához meg kell hívnia StopContinuousRecognitionAsync
. Íme egy példa arra, hogyan történik a folyamatos felismerés egy hangbemeneti fájlon.
Először adja meg a bemenetet és inicializálja a következőt SpeechRecognizer
:
using var audioConfig = AudioConfig.FromWavFileInput("YourAudioFile.wav");
using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
Ezután hozzon létre egy példányt TaskCompletionSource<int>
a beszédfelismerés állapotának kezeléséhez:
var stopRecognition = new TaskCompletionSource<int>();
Ezután iratkozzon fel az alábbi eseményekre SpeechRecognizer
:
Recognizing
: Köztes felismerési eredményeket tartalmazó események jelzése.Recognized
: A végleges felismerési eredményeket tartalmazó események jelzése, amelyek sikeres felismerési kísérletet jeleznek.SessionStopped
: A felismerési munkamenet (művelet) végét jelző események jelzése.Canceled
: A megszakított felismerési eredményeket tartalmazó események jelzése. Ezek az eredmények egy olyan felismerési kísérletet jeleznek, amelyet egy közvetlen lemondási kérés eredményeként töröltek. Másik lehetőségként átviteli vagy protokollhibát jeleznek.
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);
};
Ha minden be van állítva, hívja StartContinuousRecognitionAsync
meg, hogy kezdje el felismerni:
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();
A forrásnyelv módosítása
A beszédfelismerés gyakori feladata a bemeneti (vagy forrásnyelvi) nyelv megadása. Az alábbi példa bemutatja, hogyan módosíthatja a bemeneti nyelvet olaszra. Keresse meg a példányt a SpeechConfig
kódban, és adja hozzá közvetlenül alatta ezt a sort:
speechConfig.SpeechRecognitionLanguage = "it-IT";
A SpeechRecognitionLanguage
tulajdonság nyelvi területi formázási sztringet vár. További információkért tekintse meg a támogatott beszédfelismerési területi beállítások listáját.
Nyelvi azonosítás
A nyelvazonosítást beszéddel szövegfelismerésre használhatja, ha egy hangforrásban azonosítania kell a nyelvet, majd szöveggé kell átírnia.
A teljes kódmintát a Nyelvazonosítás című témakörben talál.
Egyéni végpont használata
Az egyéni beszéddel feltöltheti a saját adatait, tesztelheti és betanítheti az egyéni modelleket, összehasonlíthatja a modellek közötti pontosságot, és üzembe helyezhet egy modellt egy egyéni végponton. Az alábbi példa bemutatja, hogyan állíthat be egyéni végpontot.
var speechConfig = SpeechConfig.FromSubscription("YourSubscriptionKey", "YourServiceRegion");
speechConfig.EndpointId = "YourEndpointId";
var speechRecognizer = new SpeechRecognizer(speechConfig);
Tároló futtatása és használata
A Speech-tárolók websocket-alapú lekérdezésvégpont API-kat biztosítanak, amelyek a Speech SDK-n és a Speech CLI-n keresztül érhetők el. Alapértelmezés szerint a Speech SDK és a Speech CLI a nyilvános Speech szolgáltatást használja. A tároló használatához módosítania kell az inicializálási módszert. Kulcs és régió helyett használjon tároló gazdagép URL-címét.
A tárolókról további információt a Speech-tárolók telepítése és futtatása a Dockerrel című témakörben talál.
A csend kezelésének módosítása
Ha egy felhasználónak a szokásosnál gyorsabban vagy lassabban kell beszélnie, előfordulhat, hogy a bemeneti hang nem beszédcsendjének alapértelmezett viselkedése nem azt eredményezi, amit vár. A csendkezeléssel kapcsolatos gyakori problémák a következők:
- A gyors beszéd számos mondatot egyetlen felismerési eredménybe láncolódva, ahelyett, hogy a mondatokat különálló eredményekre törné.
- A lassú beszéd egyetlen mondat részeit több eredményre osztva.
- Egy egylövetű felismerés túl gyorsan véget ér, miközben a beszéd kezdetére vár.
Ezek a problémák a következők létrehozásához SpeechRecognizer
használt példány két időtúllépési SpeechConfig
tulajdonságának egyikének beállításával oldhatók meg:
- A szegmentálási csend időtúllépése módosítja, hogy mennyi nem beszélő hang legyen engedélyezve egy olyan kifejezésen belül, amelyet a kifejezés "késznek" tekint.
- A magasabb értékek általában hosszabb eredményeket eredményeznek, és hosszabb szüneteket tesznek lehetővé a beszélőtől egy kifejezésen belül, de az eredmények elérése hosszabb időt vesz igénybe. Külön kifejezéseket is összefűzhetnek egyetlen eredményben, ha túl magasak.
- Az alacsonyabb értékek általában rövidebbé teszik az eredményeket, és több gyors és gyakori törést biztosítanak a kifejezések között, de az is okozhatja, hogy az egyes kifejezések több találatra bonthatók, ha túl alacsonyak.
- Ez az időtúllépés 100 és 5000 közötti egész számra állítható be ezredmásodpercben, és az alapértelmezett érték 500.
- A kezdeti csend időtúllépése módosítja, hogy mennyi nem beszélő hang legyen engedélyezve egy kifejezés előtt , mielőtt a felismerési kísérlet "nincs egyezés" eredményre végződik.
- A magasabb értékek több időt adnak a beszélőknek a reagálásra és a beszéd megkezdésére, de lassú válaszkészséget is eredményezhetnek, ha semmit nem beszélnek.
- Az alacsonyabb értékek biztosítják a "nincs egyezés" parancsot a gyorsabb felhasználói élmény és a szabályozottabb hangkezelés érdekében, de túl gyorsan kikapcsolhatja a hangszórót, ha túl alacsony a beállítás.
- Mivel a folyamatos felismerés sok eredményt hoz létre, ez az érték határozza meg, hogy milyen gyakran érkeznek a "nem egyező" eredmények, de más módon nem befolyásolja a felismerési eredmények tartalmát.
- Ez az időtúllépés bármilyen nem negatív egész számra állítható be ezredmásodpercben, vagy 0 értékre, hogy teljes mértékben letiltsa azt. Az 5000 az egylövetű felismerés tipikus alapértelmezett értéke, míg a folyamatos felismeréshez az 15000 az alapértelmezett alapértelmezett érték.
Mivel az időtúllépések módosításakor kompromisszumok vannak, csak akkor módosítsa a beállításokat, ha a csendkezeléssel kapcsolatos probléma merül fel. Az alapértelmezett értékek optimálisan kezelik a legtöbb beszélt hangot, és csak a nem gyakori helyzetekben fordulhat elő probléma.
Példa: Az olyan sorozatszámot beszélő felhasználók, mint az "ABC-123-4567", a karaktercsoportok között elég hosszú ideig szünetelhetnek ahhoz, hogy a sorozatszám több találatra legyen bontva. Ebben az esetben próbáljon ki egy magasabb értéket, például 2000 ms-t a szegmentálási csend időtúllépéséhez:
speechConfig.SetProperty(PropertyId.Speech_SegmentationSilenceTimeoutMs, "2000");
Példa: Egy rögzített előadó beszéde elég gyors lehet ahhoz, hogy egy sorban több mondat összeadódjon, és a nagy felismerési eredmények csak percenként egyszer vagy kétszer érkeznek. Ebben az esetben állítsa a szegmentálási csend időtúllépését alacsonyabb értékre, például 300 ms-ra:
speechConfig.SetProperty(PropertyId.Speech_SegmentationSilenceTimeoutMs, "300");
Példa: Egy egyszeri felismerés, amely arra kéri a beszélőt, hogy keressen és olvasson be egy sorozatszámot, túl gyorsan véget ér a szám megkeresése közben. Ebben az esetben próbálkozzon hosszabb kezdeti csendidővel, például 10 000 ms-ra:
speechConfig.SetProperty(PropertyId.SpeechServiceConnection_InitialSilenceTimeoutMs, "10000");
Referenciadokumentáció-csomag (NuGet) | További minták a GitHubon |
Ebben az útmutatóban megtudhatja, hogyan ismerheti fel és írhatja át a beszédet a szövegre valós időben.
Beszédkonfiguráció létrehozása
Ahhoz, hogy meghívja a Speech szolgáltatást a Speech SDK használatával, létre kell hoznia egy példányt SpeechConfig
. Ez az osztály az előfizetéssel kapcsolatos információkat tartalmazza, például a kulcsot és a társított helyet/régiót, végpontot, gazdagépet vagy engedélyezési jogkivonatot.
- Hozzon létre egy példányt
SpeechConfig
a kulcs és a régió használatával. - Speech-erőforrás létrehozása az Azure Portalon. További információ: Többszolgáltatásos erőforrás létrehozása.
using namespace std;
using namespace Microsoft::CognitiveServices::Speech;
auto speechConfig = SpeechConfig::FromSubscription("YourSpeechKey", "YourSpeechRegion");
Inicializálhat SpeechConfig
néhány más módon is:
- Használjon végpontot, és adjon át egy Speech szolgáltatásvégpontot. A kulcs vagy az engedélyezési jogkivonat megadása nem kötelező.
- Használjon gazdagépet, és adjon meg egy gazdagépcímet. A kulcs vagy az engedélyezési jogkivonat megadása nem kötelező.
- Használjon engedélyezési jogkivonatot a társított régióhoz/helyhez.
Feljegyzés
Függetlenül attól, hogy beszédfelismerést, beszédszintézist, fordítást vagy szándékfelismerést végez, mindig létrehoz egy konfigurációt.
Beszéd felismerése mikrofonból
Ha az eszköz mikrofonjának használatával szeretné felismerni a beszédet, hozzon létre egy példányt AudioConfig
a FromDefaultMicrophoneInput()
tagfüggvény használatával. Ezután inicializálja az objektumot aSpeechRecognizer
továbbítással és config
a audioConfig
.
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;
Ha egy adott hangbemeneti eszközt szeretne használni, meg kell adnia az eszköz azonosítóját a következőben AudioConfig
: . További információ a hangbemeneti eszköz eszközazonosítójának lekéréséről: Hangbemeneti eszköz kiválasztása a Speech SDK-val
Beszédfelismerés végrehajtása fájlból
Ha mikrofon helyett hangfájlból szeretné felismerni a beszédet, akkor is létre kell hoznia egy példányt AudioConfig
. De ebben az esetben nem hív.FromDefaultMicrophoneInput()
Meghívja FromWavFileInput()
és átadja a fájl elérési útját:
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;
Beszéd felismerése a Recognizer osztály használatával
A C++-hoz készült Speech SDK Recognizer osztálya elérhetővé tesz néhány módszert, amelyeket a beszédfelismeréshez használhat.
Egylövetű felismerés
Az egy lövéses felismerés aszinkron módon felismer egy kimondott szöveget. Egyetlen kimondott szöveg végét a csend hallgatása határozza meg a végén, vagy legfeljebb 15 másodpercnyi hang feldolgozásáig. Íme egy példa az aszinkron egylövetű felismerésre a következővel RecognizeOnceAsync
:
auto result = speechRecognizer->RecognizeOnceAsync().get();
Az eredmény kezeléséhez meg kell írnia néhány kódot. Ez a minta kiértékeli és result->Reason
:
- A felismerési eredmény nyomtatása:
ResultReason::RecognizedSpeech
. - Ha nincs felismerési egyezés, tájékoztatja a felhasználót:
ResultReason::NoMatch
. - Hiba esetén a következő hibaüzenet jelenik meg:
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;
}
Folyamatos felismerés
A folyamatos felismerés egy kicsit nagyobb szerepet játszik, mint az egylövetű felismerés. A felismerési eredmények eléréséhez elő kell fizetnie a Recognizing
, Recognized
és Canceled
az eseményekre. A felismerés leállításához meg kell hívnia a StopContinuousRecognitionAsync parancsot. Íme egy példa arra, hogyan történik a folyamatos felismerés egy hangbemeneti fájlon.
Először adja meg a bemenetet és inicializálja a következőt SpeechRecognizer
:
auto audioConfig = AudioConfig::FromWavFileInput("YourAudioFile.wav");
auto speechRecognizer = SpeechRecognizer::FromConfig(config, audioConfig);
Ezután hozzon létre egy változót a beszédfelismerés állapotának kezeléséhez. Deklaráljon promise<void>
, mert a felismerés kezdetén nyugodtan feltételezheti, hogy még nincs befejezve:
promise<void> recognitionEnd;
Ezután iratkozzon fel az alábbi eseményekre SpeechRecognizer
:
Recognizing
: Köztes felismerési eredményeket tartalmazó események jelzése.Recognized
: A végleges felismerési eredményeket tartalmazó események jelzése, amelyek sikeres felismerési kísérletet jeleznek.SessionStopped
: A felismerési munkamenet (művelet) végét jelző események jelzése.Canceled
: A megszakított felismerési eredményeket tartalmazó események jelzése. Ezek az eredmények olyan felismerési kísérletet jeleznek, amelyet egy közvetlen lemondási kérés eredményeként töröltek. Másik lehetőségként átviteli vagy protokollhibát jeleznek.
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.
});
Ha minden be van állítva, hívja StopContinuousRecognitionAsync
meg, hogy kezdje el felismerni:
// Starts continuous recognition. Uses StopContinuousRecognitionAsync() to stop recognition.
speechRecognizer->StartContinuousRecognitionAsync().get();
// Waits for recognition end.
recognitionEnd.get_future().get();
// Stops recognition.
speechRecognizer->StopContinuousRecognitionAsync().get();
A forrásnyelv módosítása
A beszédfelismerés gyakori feladata a bemeneti (vagy forrásnyelvi) nyelv megadása. Az alábbi példa bemutatja, hogyan módosíthatja a bemeneti nyelvet németre. Keresse meg a példányt a SpeechConfig
kódban, és adja hozzá közvetlenül alatta ezt a sort:
speechConfig->SetSpeechRecognitionLanguage("de-DE");
SetSpeechRecognitionLanguage
egy paraméter, amely argumentumként egy sztringet használ. További információkért tekintse meg a támogatott beszédfelismerési területi beállítások listáját.
Nyelvi azonosítás
A nyelvazonosítást beszéddel szövegfelismerésre használhatja, ha egy hangforrásban azonosítania kell a nyelvet, majd szöveggé kell átírnia.
A teljes kódmintát a Nyelvazonosítás című témakörben talál.
Egyéni végpont használata
Az egyéni beszéddel feltöltheti a saját adatait, tesztelheti és betanítheti az egyéni modelleket, összehasonlíthatja a modellek közötti pontosságot, és üzembe helyezhet egy modellt egy egyéni végponton. Az alábbi példa bemutatja, hogyan állíthat be egyéni végpontot.
auto speechConfig = SpeechConfig::FromSubscription("YourSubscriptionKey", "YourServiceRegion");
speechConfig->SetEndpointId("YourEndpointId");
auto speechRecognizer = SpeechRecognizer::FromConfig(speechConfig);
Tároló futtatása és használata
A Speech-tárolók websocket-alapú lekérdezésvégpont API-kat biztosítanak, amelyek a Speech SDK-n és a Speech CLI-n keresztül érhetők el. Alapértelmezés szerint a Speech SDK és a Speech CLI a nyilvános Speech szolgáltatást használja. A tároló használatához módosítania kell az inicializálási módszert. Kulcs és régió helyett használjon tároló gazdagép URL-címét.
A tárolókról további információt a Speech-tárolók telepítése és futtatása a Dockerrel című témakörben talál.
Referenciadokumentáció csomag (Go) | További minták a GitHubon |
Ebben az útmutatóban megtudhatja, hogyan ismerheti fel és írhatja át a beszédet a szövegre valós időben.
Beszédfelismerés mikrofonból szöveggé
Az alábbi kódmintával futtathatja a beszédfelismerést az alapértelmezett eszközmikrofonból. Cserélje le a változókat subscription
és region
a beszédkulcsot, illetve a helyet/régiót. Speech-erőforrás létrehozása az Azure Portalon. További információ: Többszolgáltatásos erőforrás létrehozása. A szkript futtatása elindít egy felismerési munkamenetet az alapértelmezett mikrofonon és a kimeneti szövegen:
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')
}
Futtassa a következő parancsokat egy go.mod fájl létrehozásához, amely a GitHubon üzemeltetett összetevőkre hivatkozik:
go mod init quickstart
go get github.com/Microsoft/cognitive-services-speech-sdk-go
Most hozza létre és futtassa a kódot:
go build
go run quickstart
Részletes információkért tekintse meg az osztály referenciatartalmat SpeechConfig
és az osztály referenciatartalmatSpeechRecognizer
.
Beszédfelismerés hangfájlból szöveggé
Az alábbi mintával hangfájlból futtathatja a beszédfelismerést. Cserélje le a változókat subscription
és region
a beszédkulcsot, illetve a helyet/régiót. Speech-erőforrás létrehozása az Azure Portalon. További információ: Többszolgáltatásos erőforrás létrehozása. Ezenkívül cserélje le a változót file
egy .wav fájl elérési útjára. A szkript futtatásakor felismeri a fájlból származó beszédet, és kimenetként adja ki a szöveges eredményt:
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)
}
Futtassa a következő parancsokat egy go.mod fájl létrehozásához, amely a GitHubon üzemeltetett összetevőkre hivatkozik:
go mod init quickstart
go get github.com/Microsoft/cognitive-services-speech-sdk-go
Most hozza létre és futtassa a kódot:
go build
go run quickstart
Részletes információkért tekintse meg az osztály referenciatartalmat SpeechConfig
és az osztály referenciatartalmatSpeechRecognizer
.
Tároló futtatása és használata
A Speech-tárolók websocket-alapú lekérdezésvégpont API-kat biztosítanak, amelyek a Speech SDK-n és a Speech CLI-n keresztül érhetők el. Alapértelmezés szerint a Speech SDK és a Speech CLI a nyilvános Speech szolgáltatást használja. A tároló használatához módosítania kell az inicializálási módszert. Kulcs és régió helyett használjon tároló gazdagép URL-címét.
A tárolókról további információt a Speech-tárolók telepítése és futtatása a Dockerrel című témakörben talál.
Referenciadokumentáció | – További minták a GitHubon
Ebben az útmutatóban megtudhatja, hogyan ismerheti fel és írhatja át a beszédet a szövegre valós időben.
Beszédkonfiguráció létrehozása
Ahhoz, hogy meghívja a Speech szolgáltatást a Speech SDK használatával, létre kell hoznia egy SpeechConfig-példányt. Ez az osztály az előfizetéssel kapcsolatos információkat tartalmazza, például a kulcsot és a társított helyet/régiót, végpontot, gazdagépet vagy engedélyezési jogkivonatot.
- Hozzon létre egy példányt
SpeechConfig
a kulcs és a hely/régió használatával. - Speech-erőforrás létrehozása az Azure Portalon. További információ: Többszolgáltatásos erőforrás létrehozása.
import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.AudioConfig;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
public class Program {
public static void main(String[] args) throws InterruptedException, ExecutionException {
SpeechConfig speechConfig = SpeechConfig.fromSubscription("<paste-your-subscription-key>", "<paste-your-region>");
}
}
Inicializálhat SpeechConfig
néhány más módon is:
- Használjon végpontot, és adjon át egy Speech szolgáltatásvégpontot. A kulcs vagy az engedélyezési jogkivonat megadása nem kötelező.
- Használjon gazdagépet, és adjon meg egy gazdagépcímet. A kulcs vagy az engedélyezési jogkivonat megadása nem kötelező.
- Használjon engedélyezési jogkivonatot a társított régióhoz/helyhez.
Feljegyzés
Függetlenül attól, hogy beszédfelismerést, beszédszintézist, fordítást vagy szándékfelismerést végez, mindig létre fog hozni egy konfigurációt.
Beszéd felismerése mikrofonból
Ha az eszköz mikrofonjának használatával szeretné felismerni a beszédet, hozzon létre egy példányt AudioConfig
a fromDefaultMicrophoneInput()
módszerrel. Ezután inicializálja az objektumot a SpeechRecognizer
továbbítással és config
a audioConfig
.
import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.AudioConfig;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
public class Program {
public static void main(String[] args) throws InterruptedException, ExecutionException {
SpeechConfig speechConfig = SpeechConfig.fromSubscription("<paste-your-subscription-key>", "<paste-your-region>");
fromMic(speechConfig);
}
public static void fromMic(SpeechConfig speechConfig) throws InterruptedException, ExecutionException {
AudioConfig audioConfig = AudioConfig.fromDefaultMicrophoneInput();
SpeechRecognizer speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
System.out.println("Speak into your microphone.");
Future<SpeechRecognitionResult> task = speechRecognizer.recognizeOnceAsync();
SpeechRecognitionResult result = task.get();
System.out.println("RECOGNIZED: Text=" + result.getText());
}
}
Ha egy adott hangbemeneti eszközt szeretne használni, meg kell adnia az eszköz azonosítóját a következőben AudioConfig
: . A hangbemeneti eszköz eszközazonosítójának lekéréséről további információt a Speech SDK-val rendelkező hangbemeneti eszköz kiválasztása című témakörben talál.
Beszédfelismerés végrehajtása fájlból
Ha mikrofon helyett hangfájlból szeretné felismerni a beszédet, akkor is létre kell hoznia egy példányt AudioConfig
. De ebben az esetben nem hív.FromDefaultMicrophoneInput()
Meghívja fromWavFileInput()
és átadja a fájl elérési útját:
import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.AudioConfig;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
public class Program {
public static void main(String[] args) throws InterruptedException, ExecutionException {
SpeechConfig speechConfig = SpeechConfig.fromSubscription("<paste-your-subscription-key>", "<paste-your-region>");
fromFile(speechConfig);
}
public static void fromFile(SpeechConfig speechConfig) throws InterruptedException, ExecutionException {
AudioConfig audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
SpeechRecognizer speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
Future<SpeechRecognitionResult> task = speechRecognizer.recognizeOnceAsync();
SpeechRecognitionResult result = task.get();
System.out.println("RECOGNIZED: Text=" + result.getText());
}
}
Hibakezelés
Az előző példák csak a felismert szöveget kapják meg a használatával result.getText()
. A hibák és egyéb válaszok kezeléséhez meg kell írnia néhány kódot az eredmény kezeléséhez. A következő példa kiértékeli result.getReason()
és:
- A felismerési eredmény nyomtatása:
ResultReason.RecognizedSpeech
. - Ha nincs felismerési egyezés, tájékoztatja a felhasználót:
ResultReason.NoMatch
. - Hiba esetén a következő hibaüzenet jelenik meg:
ResultReason.Canceled
.
switch (result.getReason()) {
case ResultReason.RecognizedSpeech:
System.out.println("We recognized: " + result.getText());
exitCode = 0;
break;
case ResultReason.NoMatch:
System.out.println("NOMATCH: Speech could not be recognized.");
break;
case ResultReason.Canceled: {
CancellationDetails cancellation = CancellationDetails.fromResult(result);
System.out.println("CANCELED: Reason=" + cancellation.getReason());
if (cancellation.getReason() == CancellationReason.Error) {
System.out.println("CANCELED: ErrorCode=" + cancellation.getErrorCode());
System.out.println("CANCELED: ErrorDetails=" + cancellation.getErrorDetails());
System.out.println("CANCELED: Did you set the speech resource key and region values?");
}
}
break;
}
Folyamatos felismerés használata
Az előző példák egyetlen lövéses felismerést használnak, amely egyetlen kimondott szöveget ismer fel. Egyetlen kimondott szöveg végét a csend hallgatása határozza meg a végén, vagy legfeljebb 15 másodpercnyi hang feldolgozásáig.
Ezzel szemben folyamatos felismerést használ, amikor azt szeretné szabályozni, hogy mikor hagyja abba a felismerést. A felismerési eredmények eléréséhez elő kell fizetnie a recognizing
, recognized
és canceled
az eseményekre. A felismerés leállításához meg kell hívnia stopContinuousRecognitionAsync
. Íme egy példa arra, hogyan végezhet folyamatos felismerést egy hangbemeneti fájlon.
Először adja meg a bemenetet és inicializálja a következőt SpeechRecognizer
:
AudioConfig audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
SpeechRecognizer speechRecognizer = new SpeechRecognizer(config, audioConfig);
Ezután hozzon létre egy változót a beszédfelismerés állapotának kezeléséhez. Semaphore
Példány deklarálása az osztály hatókörében:
private static Semaphore stopTranslationWithFileSemaphore;
Ezután iratkozzon fel az alábbi eseményekre SpeechRecognizer
:
recognizing
: Köztes felismerési eredményeket tartalmazó események jelzése.recognized
: A végleges felismerési eredményeket tartalmazó események jelzése, amelyek sikeres felismerési kísérletet jeleznek.sessionStopped
: A felismerési munkamenet (művelet) végét jelző események jelzése.canceled
: A megszakított felismerési eredményeket tartalmazó események jelzése. Ezek az eredmények egy olyan felismerési kísérletet jeleznek, amelyet egy közvetlen lemondási kérés eredményeként töröltek. Másik lehetőségként átviteli vagy protokollhibát jeleznek.
// 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();
});
Ha minden be van állítva, hívja startContinuousRecognitionAsync
meg, hogy kezdje el felismerni:
// Starts continuous recognition. Uses StopContinuousRecognitionAsync() to stop recognition.
speechRecognizer.startContinuousRecognitionAsync().get();
// Waits for completion.
stopTranslationWithFileSemaphore.acquire();
// Stops recognition.
speechRecognizer.stopContinuousRecognitionAsync().get();
A forrásnyelv módosítása
A beszédfelismerés gyakori feladata a bemeneti (vagy forrásnyelvi) nyelv megadása. Az alábbi példa bemutatja, hogyan módosíthatja a beviteli nyelvet franciára. Keresse meg a példányt a SpeechConfig
kódban, és adja hozzá közvetlenül alatta ezt a sort:
config.setSpeechRecognitionLanguage("fr-FR");
setSpeechRecognitionLanguage
egy paraméter, amely argumentumként egy sztringet használ. Tekintse meg a szöveghez támogatott beszéd területi beállításainak listáját.
Nyelvi azonosítás
A nyelvazonosítást beszéddel szövegfelismerésre használhatja, ha egy hangforrásban azonosítania kell a nyelvet, majd szöveggé kell átírnia.
A teljes kódmintát a Nyelvazonosítás című témakörben talál.
Egyéni végpont használata
Az egyéni beszéddel feltöltheti a saját adatait, tesztelheti és betanítheti az egyéni modelleket, összehasonlíthatja a modellek közötti pontosságot, és üzembe helyezhet egy modellt egy egyéni végponton. Az alábbi példa bemutatja, hogyan állíthat be egyéni végpontot:
SpeechConfig speechConfig = SpeechConfig.FromSubscription("YourSubscriptionKey", "YourServiceRegion");
speechConfig.setEndpointId("YourEndpointId");
SpeechRecognizer speechRecognizer = new SpeechRecognizer(speechConfig);
Tároló futtatása és használata
A Speech-tárolók websocket-alapú lekérdezésvégpont API-kat biztosítanak, amelyek a Speech SDK-n és a Speech CLI-n keresztül érhetők el. Alapértelmezés szerint a Speech SDK és a Speech CLI a nyilvános Speech szolgáltatást használja. A tároló használatához módosítania kell az inicializálási módszert. Kulcs és régió helyett használjon tároló gazdagép URL-címét.
A tárolókról további információt a Speech-tárolók telepítése és futtatása a Dockerrel című témakörben talál.
Referenciadokumentáció csomag (npm) | További minták a GitHub | Library forráskódján |
Ebben az útmutatóban megtudhatja, hogyan ismerheti fel és írhatja át a beszédet a szövegre valós időben.
Beszédkonfiguráció létrehozása
Ahhoz, hogy meghívja a Speech szolgáltatást a Speech SDK használatával, létre kell hoznia egy példányt SpeechConfig
. Ez az osztály az előfizetéssel kapcsolatos információkat tartalmazza, például a kulcsot és a társított helyet/régiót, végpontot, gazdagépet vagy engedélyezési jogkivonatot.
- Hozzon létre egy példányt
SpeechConfig
a kulcs és a hely/régió használatával. - Speech-erőforrás létrehozása az Azure Portalon. További információ: Többszolgáltatásos erőforrás létrehozása.
const speechConfig = sdk.SpeechConfig.fromSubscription("YourSpeechKey", "YourSpeechRegion");
Inicializálhat SpeechConfig
néhány más módon is:
- Használjon végpontot, és adjon át egy Speech szolgáltatásvégpontot. A kulcs vagy az engedélyezési jogkivonat megadása nem kötelező.
- Használjon gazdagépet, és adjon meg egy gazdagépcímet. A kulcs vagy az engedélyezési jogkivonat megadása nem kötelező.
- Használjon engedélyezési jogkivonatot a társított régióhoz/helyhez.
Feljegyzés
Függetlenül attól, hogy beszédfelismerést, beszédszintézist, fordítást vagy szándékfelismerést végez, mindig létrehoz egy konfigurációt.
Beszéd felismerése mikrofonból
A mikrofonból való beszédfelismerés nem támogatott a Node.js. Csak böngészőalapú JavaScript-környezetben támogatott. További információkért tekintse meg a React-mintát és a beszéd szöveggé alakítását egy mikrofonból a GitHubon. A React-minta a hitelesítési jogkivonatok cseréjének és kezelésének tervezési mintáit mutatja be. Emellett a mikrofonból vagy fájlból a beszéd szövegkonvertálására szolgáló hangrögzítést is megjeleníti.
Feljegyzés
Ha egy adott hangbemeneti eszközt szeretne használni, meg kell adnia az eszköz azonosítóját az AudioConfig
objektumban. További információ: Hangbemeneti eszköz kiválasztása a Speech SDK-val.
Beszédfelismerés végrehajtása fájlból
Ha hangfájlból szeretné felismerni a beszédet, hozzon létre egy példányt AudioConfig
az fromWavFileInput()
objektumot elfogadó Buffer
metódussal. Ezután inicializálja SpeechRecognizer
az átmenő és speechConfig
a audioConfig
.
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();
Beszéd felismerése memórián belüli streamből
Sok használati esetben a hangadatok valószínűleg az Azure Blob Storage-ból származnak. Vagy már a memóriában van, mint egy ArrayBuffer
vagy hasonló nyers adatstruktúra. A következő kód:
- Leküldéses streamet hoz létre a következő használatával
createPushStream()
: . - Beolvas egy .wav fájlt
fs.createReadStream
bemutató célokra. Ha már rendelkezik hangadatokkal aArrayBuffer
fájlban, átugorhatja közvetlenül a tartalmat a bemeneti adatfolyamba. - Hangkonfigurációt hoz létre a leküldéses stream használatával.
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();
A leküldéses stream bemenetként való használata feltételezi, hogy a hangadatok nyers impulzuskód modulációs (PCM-) adatok, amelyek kihagyják a fejléceket. Az API bizonyos esetekben továbbra is működik, ha a fejlécet nem hagyták ki. A legjobb eredmény érdekében fontolja meg a logika implementálását a fejlécek leolvasásához, hogy fs
a hangadatok elején kezdődjön.
Hibakezelés
Az előző példák csak a felismert szöveget kapják meg a result.text
tulajdonságból. A hibák és egyéb válaszok kezeléséhez meg kell írnia néhány kódot az eredmény kezeléséhez. A következő kód kiértékeli a result.reason
tulajdonságot, és:
- A felismerési eredmény nyomtatása:
ResultReason.RecognizedSpeech
. - Ha nincs felismerési egyezés, tájékoztatja a felhasználót:
ResultReason.NoMatch
. - Hiba esetén a következő hibaüzenet jelenik meg:
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;
}
Folyamatos felismerés használata
Az előző példák egyetlen lövéses felismerést használnak, amely egyetlen kimondott szöveget ismer fel. Egyetlen kimondott szöveg végét a csend hallgatása határozza meg a végén, vagy legfeljebb 15 másodpercnyi hang feldolgozásáig.
Ezzel szemben a folyamatos felismerés akkor használható, ha azt szeretné szabályozni, hogy mikor hagyja abba a felismerést. A felismerési eredmények eléréséhez elő kell fizetnie a Recognizing
, Recognized
és Canceled
az eseményekre. A felismerés leállításához meg kell hívnia stopContinuousRecognitionAsync
. Íme egy példa arra, hogyan történik a folyamatos felismerés egy hangbemeneti fájlon.
Először adja meg a bemenetet és inicializálja a következőt SpeechRecognizer
:
const speechRecognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);
Ezután iratkozzon fel a következőről SpeechRecognizer
küldött eseményekre:
recognizing
: Köztes felismerési eredményeket tartalmazó események jelzése.recognized
: A végleges felismerési eredményeket tartalmazó események jelzése, amelyek sikeres felismerési kísérletet jeleznek.sessionStopped
: A felismerési munkamenet (művelet) végét jelző események jelzése.canceled
: A megszakított felismerési eredményeket tartalmazó események jelzése. Ezek az eredmények egy olyan felismerési kísérletet jeleznek, amelyet egy közvetlen lemondási kérés eredményeként töröltek. Másik lehetőségként átviteli vagy protokollhibát jeleznek.
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();
};
Ha minden be van állítva, hívja startContinuousRecognitionAsync
meg, hogy kezdje el felismerni:
speechRecognizer.startContinuousRecognitionAsync();
// Make the following call at some point to stop recognition:
// speechRecognizer.stopContinuousRecognitionAsync();
A forrásnyelv módosítása
A beszédfelismerés gyakori feladata a bemeneti (vagy forrásnyelvi) nyelv megadása. Az alábbi példa bemutatja, hogyan módosíthatja a bemeneti nyelvet olaszra. Keresse meg a példányt a SpeechConfig
kódban, és adja hozzá közvetlenül alatta ezt a sort:
speechConfig.speechRecognitionLanguage = "it-IT";
A speechRecognitionLanguage
tulajdonság nyelvi területi formázási sztringet vár. További információkért tekintse meg a támogatott beszédfelismerési területi beállítások listáját.
Nyelvi azonosítás
A nyelvazonosítást beszéddel szövegfelismerésre használhatja, ha egy hangforrásban azonosítania kell a nyelvet, majd szöveggé kell átírnia.
A teljes kódmintát a Nyelvazonosítás című témakörben talál.
Egyéni végpont használata
Az egyéni beszéddel feltöltheti a saját adatait, tesztelheti és betanítheti az egyéni modelleket, összehasonlíthatja a modellek közötti pontosságot, és üzembe helyezhet egy modellt egy egyéni végponton. Az alábbi példa bemutatja, hogyan állíthat be egyéni végpontot.
var speechConfig = SpeechSDK.SpeechConfig.fromSubscription("YourSubscriptionKey", "YourServiceRegion");
speechConfig.endpointId = "YourEndpointId";
var speechRecognizer = new SpeechSDK.SpeechRecognizer(speechConfig);
Tároló futtatása és használata
A Speech-tárolók websocket-alapú lekérdezésvégpont API-kat biztosítanak, amelyek a Speech SDK-n és a Speech CLI-n keresztül érhetők el. Alapértelmezés szerint a Speech SDK és a Speech CLI a nyilvános Speech szolgáltatást használja. A tároló használatához módosítania kell az inicializálási módszert. Kulcs és régió helyett használjon tároló gazdagép URL-címét.
A tárolókról további információt a Speech-tárolók telepítése és futtatása a Dockerrel című témakörben talál.
Referenciadokumentáció csomag (Letöltés) | További minták a GitHubon |
Ebben az útmutatóban megtudhatja, hogyan ismerheti fel és írhatja át a beszédet a szövegre valós időben.
A Speech SDK és a minták telepítése
Az Azure-Samples/cognitive-services-speech-sdk adattár iOS és Mac rendszerhez készült Objective-C nyelven írt mintákat tartalmaz. Kattintson egy hivatkozásra az egyes minták telepítési utasításainak megtekintéséhez:
- Beszéd felismerése mikrofonból az Objective-C-ben macOS rendszeren
- Beszéd felismerése az Objective-C-ben iOS rendszeren
- További minták az Objective-C-hez iOS rendszeren
További információ: Speech SDK for Objective-C reference.
Egyéni végpont használata
Az egyéni beszéddel feltöltheti a saját adatait, tesztelheti és betanítheti az egyéni modelleket, összehasonlíthatja a modellek közötti pontosságot, és üzembe helyezhet egy modellt egy egyéni végponton. Az alábbi példa bemutatja, hogyan állíthat be egyéni végpontot:
SPXSpeechConfiguration *speechConfig = [[SPXSpeechConfiguration alloc] initWithSubscription:"YourSubscriptionKey" region:"YourServiceRegion"];
speechConfig.endpointId = "YourEndpointId";
SPXSpeechRecognizer* speechRecognizer = [[SPXSpeechRecognizer alloc] init:speechConfig];
Tároló futtatása és használata
A Speech-tárolók websocket-alapú lekérdezésvégpont API-kat biztosítanak, amelyek a Speech SDK-n és a Speech CLI-n keresztül érhetők el. Alapértelmezés szerint a Speech SDK és a Speech CLI a nyilvános Speech szolgáltatást használja. A tároló használatához módosítania kell az inicializálási módszert. Kulcs és régió helyett használjon tároló gazdagép URL-címét.
A tárolókról további információt a Speech-tárolók telepítése és futtatása a Dockerrel című témakörben talál.
Referenciadokumentáció csomag (Letöltés) | További minták a GitHubon |
Ebben az útmutatóban megtudhatja, hogyan ismerheti fel és írhatja át a beszédet a szövegre valós időben.
A Speech SDK és a minták telepítése
Az Azure-Samples/cognitive-services-speech-sdk adattár az iOS-hez és Machez készült Swiftben írt mintákat tartalmazza. Kattintson egy hivatkozásra az egyes minták telepítési utasításainak megtekintéséhez:
További információ: Speech SDK for Swift-referencia.
Egyéni végpont használata
Az egyéni beszéddel feltöltheti a saját adatait, tesztelheti és betanítheti az egyéni modelleket, összehasonlíthatja a modellek közötti pontosságot, és üzembe helyezhet egy modellt egy egyéni végponton. Az alábbi példa bemutatja, hogyan állíthat be egyéni végpontot:
let speechConfig = SPXSpeechConfiguration(subscription: "YourSubscriptionKey", region: "YourServiceRegion");
speechConfig.endpointId = "YourEndpointId";
let speechRecognizer = SPXSpeechRecognizer(speechConfiguration: speechConfig);
Tároló futtatása és használata
A Speech-tárolók websocket-alapú lekérdezésvégpont API-kat biztosítanak, amelyek a Speech SDK-n és a Speech CLI-n keresztül érhetők el. Alapértelmezés szerint a Speech SDK és a Speech CLI a nyilvános Speech szolgáltatást használja. A tároló használatához módosítania kell az inicializálási módszert. Kulcs és régió helyett használjon tároló gazdagép URL-címét.
A tárolókról további információt a Speech-tárolók telepítése és futtatása a Dockerrel című témakörben talál.
Referenciadokumentáció-csomag (PyPi) | További minták a GitHubon |
Ebben az útmutatóban megtudhatja, hogyan ismerheti fel és írhatja át a beszédet a szövegre valós időben.
Beszédkonfiguráció létrehozása
Ahhoz, hogy meghívja a Speech szolgáltatást a Speech SDK használatával, létre kell hoznia egy példányt SpeechConfig
. Ez az osztály az előfizetéssel kapcsolatos információkat tartalmazza, például a beszédkulcsot és a kapcsolódó helyet/régiót, végpontot, gazdagépet vagy engedélyezési jogkivonatot.
- Hozzon létre egy példányt
SpeechConfig
a beszédkulcs és a hely/régió használatával. - Speech-erőforrás létrehozása az Azure Portalon. További információ: Többszolgáltatásos erőforrás létrehozása.
speech_config = speechsdk.SpeechConfig(subscription="YourSpeechKey", region="YourSpeechRegion")
Inicializálhat SpeechConfig
néhány más módon is:
- Használjon végpontot, és adjon át egy Speech szolgáltatásvégpontot. A beszédkulcs vagy az engedélyezési jogkivonat megadása nem kötelező.
- Használjon gazdagépet, és adjon meg egy gazdagépcímet. A beszédkulcs vagy az engedélyezési jogkivonat megadása nem kötelező.
- Használjon engedélyezési jogkivonatot a társított régióhoz/helyhez.
Feljegyzés
Függetlenül attól, hogy beszédfelismerést, beszédszintézist, fordítást vagy szándékfelismerést végez, mindig létrehoz egy konfigurációt.
Beszéd felismerése mikrofonból
Ha az eszköz mikrofonja használatával szeretné felismerni a beszédet, hozzon létre egy példányt SpeechRecognizer
AudioConfig
továbbítás nélkül, majd adja át speech_config
a következőt:
import azure.cognitiveservices.speech as speechsdk
def from_mic():
speech_config = speechsdk.SpeechConfig(subscription="YourSpeechKey", region="YourSpeechRegion")
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config)
print("Speak into your microphone.")
result = speech_recognizer.recognize_once_async().get()
print(result.text)
from_mic()
Ha egy adott hangbemeneti eszközt szeretne használni, meg kell adnia az eszköz azonosítóját AudioConfig
, és át kell adnia a SpeechRecognizer
konstruktor paraméterének audio_config
. További információ a hangbemeneti eszköz eszközazonosítójának lekéréséről: Hangbemeneti eszköz kiválasztása a Speech SDK-val
Beszédfelismerés végrehajtása fájlból
Ha mikrofon helyett hangfájlból szeretné felismerni a beszédet, hozzon létre egy példányt AudioConfig
, és használja a paramétert filename
:
import azure.cognitiveservices.speech as speechsdk
def from_file():
speech_config = speechsdk.SpeechConfig(subscription="YourSpeechKey", region="YourSpeechRegion")
audio_config = speechsdk.AudioConfig(filename="your_file_name.wav")
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_config)
result = speech_recognizer.recognize_once_async().get()
print(result.text)
from_file()
Hibakezelés
Az előző példák csak a felismert szöveget kapják meg a result.text
tulajdonságból. A hibák és egyéb válaszok kezeléséhez meg kell írnia néhány kódot az eredmény kezeléséhez. A következő kód kiértékeli a result.reason
tulajdonságot, és:
- A felismerési eredmény nyomtatása:
speechsdk.ResultReason.RecognizedSpeech
. - Ha nincs felismerési egyezés, tájékoztatja a felhasználót:
speechsdk.ResultReason.NoMatch
. - Hiba esetén a következő hibaüzenet jelenik meg:
speechsdk.ResultReason.Canceled
.
if result.reason == speechsdk.ResultReason.RecognizedSpeech:
print("Recognized: {}".format(result.text))
elif result.reason == speechsdk.ResultReason.NoMatch:
print("No speech could be recognized: {}".format(result.no_match_details))
elif result.reason == speechsdk.ResultReason.Canceled:
cancellation_details = result.cancellation_details
print("Speech Recognition canceled: {}".format(cancellation_details.reason))
if cancellation_details.reason == speechsdk.CancellationReason.Error:
print("Error details: {}".format(cancellation_details.error_details))
print("Did you set the speech resource key and region values?")
Folyamatos felismerés használata
Az előző példák egyetlen lövéses felismerést használnak, amely egyetlen kimondott szöveget ismer fel. Egyetlen kimondott szöveg végét a csend hallgatása határozza meg a végén, vagy legfeljebb 15 másodpercnyi hang feldolgozásáig.
Ezzel szemben folyamatos felismerést használ, amikor azt szeretné szabályozni, hogy mikor hagyja abba a felismerést. A felismerési eredmények eléréséhez csatlakoznia EventSignal
kell. A felismerés leállításához meg kell hívnia stop_continuous_recognition() vagy stop_continuous_recognition(). Íme egy példa arra, hogyan történik a folyamatos felismerés egy hangbemeneti fájlon.
Először adja meg a bemenetet és inicializálja a következőt SpeechRecognizer
:
audio_config = speechsdk.audio.AudioConfig(filename=weatherfilename)
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_config)
Ezután hozzon létre egy változót a beszédfelismerés állapotának kezeléséhez. Állítsa be a változót úgy, hogy False
a felismerés kezdetekor biztosan feltételezze, hogy még nincs befejezve:
done = False
Most hozzon létre egy visszahívást, amely leállítja a folyamatos felismerést a fogadáskor evt
. Tartsa szem előtt az alábbi szempontokat:
- Amikor
evt
a rendszer megkapja az üzenetet, aevt
rendszer kinyomtatja az üzenetet. - A fogadás után
evt
a stop_continuous_recognition() meghívása leállítja a felismerést. - A felismerés állapota a következőre
True
módosul: .
def stop_cb(evt):
print('CLOSING on {}'.format(evt))
speech_recognizer.stop_continuous_recognition()
nonlocal done
done = True
Az alábbi kódminta bemutatja, hogyan csatlakoztathatja a visszahívásokat a rendszerből küldött eseményekhez SpeechRecognizer
. Az események a következők:
recognizing
: Köztes felismerési eredményeket tartalmazó események jelzése.recognized
: A végleges felismerési eredményeket tartalmazó események jelzése, amelyek sikeres felismerési kísérletet jeleznek.session_started
: A felismerési munkamenet (művelet) kezdetét jelző események jelzése.session_stopped
: A felismerési munkamenet (művelet) végét jelző események jelzése.canceled
: A megszakított felismerési eredményeket tartalmazó események jelzése. Ezek az eredmények egy olyan felismerési kísérletet jeleznek, amelyet egy közvetlen lemondási kérés eredményeként töröltek. Másik lehetőségként átviteli vagy protokollhibát jeleznek.
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)
Ha minden be van állítva, meghívhatja start_continuous_recognition():
speech_recognizer.start_continuous_recognition()
while not done:
time.sleep(.5)
A forrásnyelv módosítása
A beszédfelismerés gyakori feladata a bemeneti (vagy forrásnyelvi) nyelv megadása. Az alábbi példa bemutatja, hogyan módosíthatja a bemeneti nyelvet németre. Keresse meg a példányt a SpeechConfig
kódban, és adja hozzá közvetlenül alatta ezt a sort:
speech_config.speech_recognition_language="de-DE"
speech_recognition_language
egy paraméter, amely argumentumként egy sztringet használ. További információkért tekintse meg a támogatott beszédfelismerési területi beállítások listáját.
Nyelvi azonosítás
A beszéddel való nyelvazonosítással szövegfelismerést végezhet, ha a nyelvet egy hangforrásban kell azonosítania, majd át kell írnia a szövegre.
A teljes kódmintát a Nyelvazonosítás című témakörben talál.
Egyéni végpont használata
Az egyéni beszéddel feltöltheti a saját adatait, tesztelheti és betanítheti az egyéni modelleket, összehasonlíthatja a modellek közötti pontosságot, és üzembe helyezhet egy modellt egy egyéni végponton. Az alábbi példa bemutatja, hogyan állíthat be egyéni végpontot.
speech_config = speechsdk.SpeechConfig(subscription="YourSubscriptionKey", region="YourServiceRegion")
speech_config.endpoint_id = "YourEndpointId"
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config)
Tároló futtatása és használata
A Speech-tárolók websocket-alapú lekérdezésvégpont API-kat biztosítanak, amelyek a Speech SDK-n és a Speech CLI-n keresztül érhetők el. Alapértelmezés szerint a Speech SDK és a Speech CLI a nyilvános Speech szolgáltatást használja. A tároló használatához módosítania kell az inicializálási módszert. Kulcs és régió helyett használjon tároló gazdagép URL-címét.
A tárolókról további információt a Speech-tárolók telepítése és futtatása a Dockerrel című témakörben talál.
Speech to text REST API reference | Speech to text REST API for short audio reference | Additional Samples on GitHub
Ebben az útmutatóban megtudhatja, hogyan ismerheti fel és írhatja át a beszédet a szövegre valós időben.
Beszéd szöveggé alakítása
Futtassa a következő parancsot egy parancssorban. Szúrja be a következő értékeket a parancsba:
- A Speech szolgáltatás előfizetési kulcsa.
- A Speech szolgáltatás régiója.
- A bemeneti hangfájlok elérési útja. Hangfájlokat szövegfelolvasással hozhat létre.
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'
A következő példához hasonlóan egy JSON-törzstel kell választ kapnia:
{
"RecognitionStatus": "Success",
"DisplayText": "My voice is my passport, verify me.",
"Offset": 6600000,
"Duration": 32100000
}
További információ: Speech to text REST API-referencia.
Ebben az útmutatóban megtudhatja, hogyan ismerheti fel és írhatja át a beszédet a szövegre valós időben.
Beszéd felismerése mikrofonból
Csatlakoztassa és kapcsolja be a PC-mikrofont. Kapcsolja ki a mikrofont is használó alkalmazásokat. Egyes számítógépek beépített mikrofonnal rendelkeznek, míg mások Bluetooth-eszköz konfigurációját igénylik.
Most már készen áll a Speech CLI futtatására, hogy felismerje a mikrofonból származó beszédet. A parancssorból váltson a Speech CLI bináris fájlt tartalmazó könyvtárra. Ezt követően futtassa a következő parancsot:
spx recognize --microphone
Feljegyzés
A Speech CLI alapértelmezés szerint angol. A beszédtől a szövegtábláig eltérő nyelvet választhat. Adja hozzá --source de-DE
például a német beszéd felismeréséhez.
Beszéljen a mikrofonba, és valós időben láthatja a szavak átiratát szöveggé. A Speech CLI egy ideig tartó csend után vagy a Ctrl+C billentyűkombinációt választva leáll.
Beszédfelismerés végrehajtása fájlból
A Speech CLI számos fájlformátumban és természetes nyelven képes felismerni a beszédet. Ebben a példában bármely olyan .wav fájlt használhat (16 KHz-es vagy 8 KHz-es, 16 bites és mono PCM), amely angol nyelvű beszédet tartalmaz. Ha gyors mintát szeretne, töltse le a whatstheweatherlike.wav fájlt, és másolja a Speech CLI bináris fájllal megegyező könyvtárba.
Az alábbi paranccsal futtassa a Speech CLI-t a hangfájlban található beszéd felismeréséhez:
spx recognize --file whatstheweatherlike.wav
Feljegyzés
A Speech CLI alapértelmezés szerint angol. A beszédtől a szövegtábláig eltérő nyelvet választhat. Adja hozzá --source de-DE
például a német beszéd felismeréséhez.
A Speech CLI a beszéd szövegátiratát jeleníti meg a képernyőn.
Tároló futtatása és használata
A Speech-tárolók websocket-alapú lekérdezésvégpont API-kat biztosítanak, amelyek a Speech SDK-n és a Speech CLI-n keresztül érhetők el. Alapértelmezés szerint a Speech SDK és a Speech CLI a nyilvános Speech szolgáltatást használja. A tároló használatához módosítania kell az inicializálási módszert. Kulcs és régió helyett használjon tároló gazdagép URL-címét.
A tárolókról további információt a Speech-tárolók telepítése és futtatása a Dockerrel című témakörben talál.