Beszéd szöveggé REST API rövid hanghoz
A Speech to text REST API rövid hanghoz való használata korlátozott. Csak olyan esetekben használja, amikor nem tudja használni a Speech SDK-t.
Mielőtt a Speech to text REST API-t rövid hanganyagként használnod, vegye figyelembe az alábbi korlátozásokat:
- Azok a kérések, amelyek a REST API-t használják a rövid hanghoz és közvetlenül továbbítják a hangot, legfeljebb 60 másodpercnyi hanganyagot tartalmazhatnak. A bemeneti hangformátumok a Speech SDK-hoz képest korlátozottabbak.
- A REST API a rövid hanghoz csak a végső eredményeket adja vissza. Nem ad részleges eredményeket.
- A beszédfordítás nem támogatott a REST API-val a rövid hanganyagokhoz. A Speech SDK-t kell használnia.
- A kötegelt átírás és az egyéni beszéd nem támogatott a REST API-val a rövid hang érdekében. A Rest API-t mindig a Speech to text REST API-val kell használnia a kötegelt átíráshoz és az egyéni beszédhez.
Mielőtt a Speech to text REST API-t rövid hangra használné, tisztában kell lenni azzal, hogy a szolgáltatás eléréséhez a hitelesítés részeként jogkivonatcserét kell végrehajtania. További információért lásd: Hitelesítés.
Régiók és végpontok
A REST API rövid hanghoz készült végpontjának formátuma a következő:
https://<REGION_IDENTIFIER>.stt.speech.microsoft.com/speech/recognition/conversation/cognitiveservices/v1
Cserélje le <REGION_IDENTIFIER>
a Speech-erőforrás régiójának megfelelő azonosítóra.
Feljegyzés
A 21Vianet-végpontok által üzemeltetett Azure Government és Microsoft Azure esetében tekintse meg ezt a szuverén felhőkről szóló cikket.
Hangformátumok
A rendszer a HTTP-kérés POST
törzsében küld hangokat. A táblázat egyik formátumában kell lennie:
Formátum | Kodek | Bitsűrűség | Mintasebesség |
---|---|---|---|
WAV | PCM | 256 kbit/s | 16 kHz, monó |
OGG | OPUS | 256 kbit/s | 16 kHz, monó |
Feljegyzés
A fenti formátumokat a REST API támogatja a rövid hanganyagokhoz és a WebSockethez a Speech szolgáltatásban. A Speech SDK PCM-kodekkel és más formátumokkal támogatja a WAV formátumot.
Kérésfejlécek
Ez a táblázat a szövegfelolvasási kérelmekhez szükséges és nem kötelező fejléceket sorolja fel:
Fejléc | Leírás | Kötelező vagy választható |
---|---|---|
Ocp-Apim-Subscription-Key |
A Speech szolgáltatás erőforráskulcsa. | Vagy ez a fejléc, vagy Authorization kötelező. |
Authorization |
A szó Bearer előtti engedélyezési jogkivonat. További információért lásd: Hitelesítés. |
Vagy ez a fejléc, vagy Ocp-Apim-Subscription-Key kötelező. |
Pronunciation-Assessment |
Megadja a kiejtési pontszámok megjelenítési eredményeinek paramétereit a felismerési eredményekben. Ezek a pontszámok a beszédbemenet kiejtési minőségét értékelik olyan mutatókkal, mint a pontosság, a folyékonyság és a teljesség. Ez a paraméter egy Base64 kódolású JSON, amely több részletes paramétert tartalmaz. A fejléc létrehozásának módjáról a kiejtésértékelési paramétereket ismertető cikkben olvashat. |
Választható |
Content-type |
A megadott hangadatok formátumát és kodekét ismerteti. Az elfogadott értékek a következők audio/wav; codecs=audio/pcm; samplerate=16000 : és audio/ogg; codecs=opus . |
Szükséges |
Transfer-Encoding |
Azt adja meg, hogy az adattömbök hangadatait a rendszer ne egyetlen fájlként küldje el. Ezt a fejlécet csak akkor használja, ha hangadatokat ágyaz be. | Választható |
Expect |
Ha adattömbbe ágyazott átvitelt használ, küldje el a következőt Expect: 100-continue : A Speech szolgáltatás nyugtázza a kezdeti kérést, és további adatokra vár. |
Adattömbbe ágyazott hangadatok küldése esetén kötelező. |
Accept |
Ha meg van adva, annak .application/json A Speech szolgáltatás JSON-eredményeket biztosít. Egyes kérelem-keretrendszerek nem kompatibilis alapértelmezett értéket biztosítanak. Érdemes mindig belefoglalni Accept . |
Nem kötelező, de ajánlott. |
Paraméterek lekérdezése
Ezek a paraméterek szerepelhetnek a REST-kérés lekérdezési sztringjében.
Feljegyzés
A 4xx HTTP-hiba elkerülése érdekében hozzá kell fűznie a nyelvi paramétert az URL-címhez. Például az USA nyugati végpontja által az amerikai angol nyelvre beállított nyelv a következő: https://westus.stt.speech.microsoft.com/speech/recognition/conversation/cognitiveservices/v1?language=en-US
.
Paraméter | Leírás | Kötelező vagy választható |
---|---|---|
language |
Azonosítja a felismert beszélt nyelvet. Lásd: Támogatott nyelvek. | Szükséges |
format |
Az eredményformátumot adja meg. Az elfogadott értékek a következők simple : és detailed . Az egyszerű eredmények közé tartozik a RecognitionStatus , DisplayText és Offset Duration a . A részletes válaszok négy különböző megjelenítési szöveget tartalmaznak. Az alapértelmezett beállítás: simple . |
Választható |
profanity |
Meghatározza, hogyan kezelheti a profanitást a felismerési eredményekben. Az elfogadott értékek a következők: masked , amely csillagokkal helyettesíti a trágárságot. removed , amely eltávolítja az összes trágárságot az eredményből. raw , amely magában foglalja a trágárságot az eredményben. Az alapértelmezett beállítás: masked . |
Választható |
cid |
Amikor a Speech Studiót használja egyéni modellek létrehozására, az üzembe helyezési oldalon kihasználhatja a végpontazonosító értékét. Használja a végpontazonosító értékét a lekérdezési sztring cid paraméter argumentumaként. |
Választható |
Kiejtésértékelési paraméterek
Ez a táblázat felsorolja a kiejtés-értékeléshez szükséges és választható paramétereket:
Az alábbi példa JSON tartalmazza a kiejtés-értékelési paramétereket:
{
"ReferenceText": "Good morning.",
"GradingSystem": "HundredMark",
"Granularity": "FullText",
"Dimension": "Comprehensive"
}
Az alábbi mintakód bemutatja, hogyan építheti fel a kiejtésértékelési paramétereket a Pronunciation-Assessment
fejlécbe:
var pronAssessmentParamsJson = $"{{\"ReferenceText\":\"Good morning.\",\"GradingSystem\":\"HundredMark\",\"Granularity\":\"FullText\",\"Dimension\":\"Comprehensive\"}}";
var pronAssessmentParamsBytes = Encoding.UTF8.GetBytes(pronAssessmentParamsJson);
var pronAssessmentHeader = Convert.ToBase64String(pronAssessmentParamsBytes);
Erősen javasoljuk, hogy a hangadatok közzététele közben feltöltse a streamelést (adattömb-átvitelt), ami jelentősen csökkentheti a késést. A streamelés engedélyezésének megismeréséhez tekintse meg a mintakódot különböző programozási nyelvekben.
Feljegyzés
További információ: kiejtési értékelés.
Mintakérés
Az alábbi minta tartalmazza a gazdagép nevét és a szükséges fejléceket. Fontos megjegyezni, hogy a szolgáltatás hangadatokat is vár, amelyek nem szerepelnek ebben a mintában. Ahogy korábban említettük, az adattömb-készítés ajánlott, de nem szükséges.
POST speech/recognition/conversation/cognitiveservices/v1?language=en-US&format=detailed HTTP/1.1
Accept: application/json;text/xml
Content-Type: audio/wav; codecs=audio/pcm; samplerate=16000
Ocp-Apim-Subscription-Key: YOUR_RESOURCE_KEY
Host: westus.stt.speech.microsoft.com
Transfer-Encoding: chunked
Expect: 100-continue
A kiejtési értékelés engedélyezéséhez adja hozzá a következő fejlécet. A fejléc létrehozásának módjáról a kiejtésértékelési paramétereket ismertető cikkben olvashat.
Pronunciation-Assessment: eyJSZWZlcm...
HTTP-állapotkódok
Az egyes válaszok HTTP-állapotkódja sikeres vagy gyakori hibákat jelez.
HTTP-állapotkód | Leírás | Lehetséges okok |
---|---|---|
100 | Tovább | A kezdeti kérés elfogadva. Folytassa a többi adat elküldésével. (Ezt a kódot az adattömb-átvitelhez használja a rendszer.) |
200 | OK | A kérés sikeres volt. A válasz törzse egy JSON-objektum. |
400 | Hibás kérés | A nyelvi kód nem lett megadva, a nyelv nem támogatott, vagy a hangfájl érvénytelen (például). |
401 | Nem engedélyezett | Az erőforráskulcs vagy az engedélyezési jogkivonat érvénytelen a megadott régióban, vagy egy végpont érvénytelen. |
403 | Forbidden | Hiányzik egy erőforráskulcs vagy engedélyezési jogkivonat. |
Mintaválaszok
Íme egy tipikus válasz a felismerésre simple
:
{
"RecognitionStatus": "Success",
"DisplayText": "Remind me to buy 5 pencils.",
"Offset": "1236645672289",
"Duration": "1236645672289"
}
Íme egy tipikus válasz a felismerésre detailed
:
{
"RecognitionStatus": "Success",
"Offset": "1236645672289",
"Duration": "1236645672289",
"NBest": [
{
"Confidence": 0.9052885,
"Display": "What's the weather like?",
"ITN": "what's the weather like",
"Lexical": "what's the weather like",
"MaskedITN": "what's the weather like"
},
{
"Confidence": 0.92459863,
"Display": "what is the weather like",
"ITN": "what is the weather like",
"Lexical": "what is the weather like",
"MaskedITN": "what is the weather like"
}
]
}
Íme egy tipikus válasz a kiejtési értékeléssel való felismerésre:
{
"RecognitionStatus": "Success",
"Offset": "400000",
"Duration": "11000000",
"NBest": [
{
"Confidence" : "0.87",
"Lexical" : "good morning",
"ITN" : "good morning",
"MaskedITN" : "good morning",
"Display" : "Good morning.",
"PronScore" : 84.4,
"AccuracyScore" : 100.0,
"FluencyScore" : 74.0,
"CompletenessScore" : 100.0,
"Words": [
{
"Word" : "Good",
"AccuracyScore" : 100.0,
"ErrorType" : "None",
"Offset" : 500000,
"Duration" : 2700000
},
{
"Word" : "morning",
"AccuracyScore" : 100.0,
"ErrorType" : "None",
"Offset" : 5300000,
"Duration" : 900000
}
]
}
]
}
Választulajdonságok
Az eredmények JSON-ként vannak megadva. A simple
formátum a következő legfelső szintű mezőket tartalmazza:
Tulajdonság | Leírás |
---|---|
RecognitionStatus |
Állapot, például Success sikeres felismerés. Lásd a következő táblázatot. |
DisplayText |
A nagybetűsítés, írásjelezés, inverz szöveg normalizálása és trágár maszkolás utáni felismert szöveg. Csak siker esetén jelenik meg. Az inverz szöveg normalizálása a beszélt szöveg rövidebb alakokra való konvertálása, például 200 a "kétszáz" vagy a "Dr. Smith" a "doktor Smith" esetében. |
Offset |
Az az idő (100 nanoszekundumos egységekben), amikor a felismert beszéd a hangstreamben kezdődik. |
Duration |
A felismert beszéd időtartama (100 nanoszekundumos egységekben) a hangstreamben. |
A RecognitionStatus
mező a következő értékeket tartalmazhatja:
Állapot | Leírás |
---|---|
Success |
Az felismerés sikeres volt, és a DisplayText mező jelen van. |
NoMatch |
A rendszer beszédet észlelt a hangstreamben, de a célnyelv egyik szó sem felelt meg. Ez az állapot általában azt jelenti, hogy a felismerési nyelv eltér a felhasználó által beszélt nyelvtől. |
InitialSilenceTimeout |
A hangstream indítása csak csendet tartalmazott, és a szolgáltatás időtúllépést mért a beszédre való várakozás során. |
BabbleTimeout |
A hangstream indítása csak zajt tartalmazott, és a szolgáltatás időtúllépést mért a beszédre való várakozás közben. |
Error |
A felismerési szolgáltatás belső hibát észlelt, és nem tudta folytatni. Ha lehetséges, próbálkozzon újra. |
Feljegyzés
Ha a hang csak trágárságból áll, és a profanity
lekérdezési paraméter be van állítva remove
, a szolgáltatás nem ad vissza beszéderedményt.
A detailed
formátum a felismert eredmények további formáit tartalmazza.
Ha a formátumot használja, DisplayText
a detailed
rendszer a listában szereplő összes eredményhez hasonlóan Display
adja meg.NBest
A listában szereplő objektum a NBest
következőket tartalmazhatja:
Tulajdonság | Leírás |
---|---|
Confidence |
A bejegyzés megbízhatósági pontszáma 0,0-tól (nincs megbízhatóság) 1,0-tól (teljes megbízhatóság). |
Lexical |
A felismert szöveg lexikális formája: a ténylegesen felismert szavak. |
ITN |
A felismert szöveg inverz-szöveg normalizált (ITN) vagy canonical formája telefonszámokkal, számokkal, rövidítésekkel ("doctor smith" to "dr smith"), és egyéb alkalmazott átalakításokkal. |
MaskedITN |
Ha szükséges, a profanitásmaszkolást alkalmazó ITN-űrlap. |
Display |
A felismert szöveg megjelenítési formája írásjelekkel és nagybetűkkel. Ez a paraméter ugyanaz, mint amit DisplayText a formátum beállításakor simple biztosít. |
AccuracyScore |
A beszéd kiejtési pontossága. A pontosság azt jelzi, hogy a fonimok milyen közel felelnek meg egy natív beszélő kiejtésének. A szó és a teljes szöveges szintek pontossági pontszáma a fonetikai szint pontossági pontszámából lesz összesítve. |
FluencyScore |
A megadott beszéd folyékonysága. A fluency azt jelzi, hogy a beszéd mennyire egyezik meg az natív beszélő szavak közötti csendes szüneteinek használatával. |
CompletenessScore |
A beszéd teljessége, amelyet a kimondott szavak és a szövegbevitelre való hivatkozás arányának kiszámításával határozunk meg. |
PronScore |
A megadott beszéd kiejtési minőségét jelző összesített pontszám. Ez a pontszám a súlyozásból FluencyScore és CompletenessScore a súlyozásból AccuracyScore van összesítve. |
ErrorType |
Az érték, amely azt jelzi, hogy egy szó hiányzik, beszúrt vagy rosszul kifejezett, összehasonlítva a következővel ReferenceText : . A lehetséges értékek (None ami azt jelenti, hogy ebben a szóban nincs hiba), Omission és Insertion Mispronunciation . |
Darabolt átvitel
Az adattömb-átvitel (Transfer-Encoding: chunked
) segíthet csökkenteni a felismerési késést. Lehetővé teszi, hogy a Speech szolgáltatás megkezdje a hangfájl feldolgozását az átvitel közben. A REST API a rövid hanghoz nem nyújt részleges vagy köztes eredményeket.
Az alábbi kódminta bemutatja, hogyan küldhet hangokat adattömbökbe. Csak az első adattömb tartalmazza a hangfájl fejlécét. request
HttpWebRequest
egy objektum, amely a megfelelő REST-végponthoz csatlakozik. audioFile
A lemezen lévő hangfájl elérési útja.
var request = (HttpWebRequest)HttpWebRequest.Create(requestUri);
request.SendChunked = true;
request.Accept = @"application/json;text/xml";
request.Method = "POST";
request.ProtocolVersion = HttpVersion.Version11;
request.Host = host;
request.ContentType = @"audio/wav; codecs=audio/pcm; samplerate=16000";
request.Headers["Ocp-Apim-Subscription-Key"] = "YOUR_RESOURCE_KEY";
request.AllowWriteStreamBuffering = false;
using (var fs = new FileStream(audioFile, FileMode.Open, FileAccess.Read))
{
// Open a request stream and write 1,024-byte chunks in the stream one at a time.
byte[] buffer = null;
int bytesRead = 0;
using (var requestStream = request.GetRequestStream())
{
// Read 1,024 raw bytes from the input audio file.
buffer = new Byte[checked((uint)Math.Min(1024, (int)fs.Length))];
while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) != 0)
{
requestStream.Write(buffer, 0, bytesRead);
}
requestStream.Flush();
}
}
Hitelesítés
Minden kérelemhez szükség van egy engedélyezési fejlécre. Ez a táblázat az egyes funkciókhoz támogatott fejléceket mutatja be:
Támogatott engedélyezési fejléc | Diktálás | Szövegfelolvasás |
---|---|---|
Ocp-Apim-Subscription-Key |
Igen | Igen |
Authorization: Bearer |
Igen | Igen |
Ha a fejlécet Ocp-Apim-Subscription-Key
használja, csak az erőforráskulcsot kell megadnia. Példa:
'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
Amikor a fejlécet Authorization: Bearer
használja, kérést kell küldenie a issueToken
végponthoz. Ebben a kérésben az erőforráskulcsot egy 10 percig érvényes hozzáférési jogkivonatra cseréli.
Hogyan szerezhetek be hozzáférési tokent
A hozzáférési jogkivonat lekéréséhez a végpontra irányuló kérést kell intéznie az issueToken
erőforráskulcs és az erőforráskulcs használatával Ocp-Apim-Subscription-Key
.
A issueToken
végpont formátuma a következő:
https://<REGION_IDENTIFIER>.api.cognitive.microsoft.com/sts/v1.0/issueToken
Cserélje le <REGION_IDENTIFIER>
az előfizetés régiójának megfelelő azonosítóra.
A hozzáférési jogkivonat-kérés létrehozásához használja az alábbi példákat.
HTTP-minta
Ez a példa egy egyszerű HTTP-kérés egy jogkivonat lekéréséhez. Cserélje le YOUR_SUBSCRIPTION_KEY
a Speech szolgáltatás erőforráskulcsát. Ha az előfizetése nem az USA nyugati régiójában található, cserélje le a fejlécet a Host
régió gazdagépnevére.
POST /sts/v1.0/issueToken HTTP/1.1
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
Host: eastus.api.cognitive.microsoft.com
Content-type: application/x-www-form-urlencoded
Content-Length: 0
A válasz törzse JSON Web Token (JWT) formátumban tartalmazza a hozzáférési jogkivonatot.
PowerShell-minta
Ez a példa egy egyszerű PowerShell-szkript egy hozzáférési jogkivonat lekéréséhez. Cserélje le YOUR_SUBSCRIPTION_KEY
a Speech szolgáltatás erőforráskulcsát. Ügyeljen arra, hogy az előfizetésnek megfelelő régióhoz a megfelelő végpontot használja. Ez a példa jelenleg az USA nyugati régiójára van állítva.
$FetchTokenHeader = @{
'Content-type'='application/x-www-form-urlencoded';
'Content-Length'= '0';
'Ocp-Apim-Subscription-Key' = 'YOUR_SUBSCRIPTION_KEY'
}
$OAuthToken = Invoke-RestMethod -Method POST -Uri https://eastus.api.cognitive.microsoft.com/sts/v1.0/issueToken
-Headers $FetchTokenHeader
# show the token received
$OAuthToken
cURL-minta
A cURL egy parancssori eszköz, amely Linuxon (és a Linuxos Windows-alrendszer) is elérhető. Ez a cURL-parancs bemutatja, hogyan szerezhet be hozzáférési jogkivonatot. Cserélje le YOUR_SUBSCRIPTION_KEY
a Speech szolgáltatás erőforráskulcsát. Ügyeljen arra, hogy az előfizetésnek megfelelő régióhoz a megfelelő végpontot használja. Ez a példa jelenleg az USA nyugati régiójára van állítva.
curl -v -X POST \
"https://eastus.api.cognitive.microsoft.com/sts/v1.0/issueToken" \
-H "Content-type: application/x-www-form-urlencoded" \
-H "Content-Length: 0" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY"
C#-minta
Ez a C#-osztály bemutatja, hogyan szerezhet be hozzáférési jogkivonatot. Az osztály példányosításakor adja át a Speech szolgáltatás erőforráskulcsát. Ha az előfizetése nem az USA nyugati régiójában található, módosítsa az előfizetéséhez tartozó régió értékének FetchTokenUri
megfelelő értéket.
public class Authentication
{
public static readonly string FetchTokenUri =
"https://eastus.api.cognitive.microsoft.com/sts/v1.0/issueToken";
private string subscriptionKey;
private string token;
public Authentication(string subscriptionKey)
{
this.subscriptionKey = subscriptionKey;
this.token = FetchTokenAsync(FetchTokenUri, subscriptionKey).Result;
}
public string GetAccessToken()
{
return this.token;
}
private async Task<string> FetchTokenAsync(string fetchUri, string subscriptionKey)
{
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", subscriptionKey);
UriBuilder uriBuilder = new UriBuilder(fetchUri);
var result = await client.PostAsync(uriBuilder.Uri.AbsoluteUri, null);
Console.WriteLine("Token Uri: {0}", uriBuilder.Uri.AbsoluteUri);
return await result.Content.ReadAsStringAsync();
}
}
}
Python-minta
# Request module must be installed.
# Run pip install requests if necessary.
import requests
subscription_key = 'REPLACE_WITH_YOUR_KEY'
def get_token(subscription_key):
fetch_token_url = 'https://eastus.api.cognitive.microsoft.com/sts/v1.0/issueToken'
headers = {
'Ocp-Apim-Subscription-Key': subscription_key
}
response = requests.post(fetch_token_url, headers=headers)
access_token = str(response.text)
print(access_token)
Hozzáférési jogkivonat használata
A hozzáférési jogkivonatot fejlécként kell elküldeni a szolgáltatásnak Authorization: Bearer <TOKEN>
. Minden hozzáférési jogkivonat 10 percig érvényes. Bármikor beszerezhet egy új jogkivonatot, de a hálózati forgalom és a késés minimalizálása érdekében azt javasoljuk, hogy kilenc percig ugyanazt a jogkivonatot használja.
Íme egy minta HTTP-kérés a Speech to text REST API-hoz rövid hangért:
POST /cognitiveservices/v1 HTTP/1.1
Authorization: Bearer YOUR_ACCESS_TOKEN
Host: westus.stt.speech.microsoft.com
Content-type: application/ssml+xml
Content-Length: 199
Connection: Keep-Alive
// Message body here...