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ó Bearerelő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 OffsetDurationa . 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:

Paraméter Leírás Kötelező vagy választható
ReferenceText Az a szöveg, amely alapján a kiejtés kiértékelése történik. Szükséges
GradingSystem A pontrendszer a pontszám-kalibrációhoz. A FivePoint rendszer 0-5 lebegőpontos pontszámot ad, és HundredMark 0-100 lebegőpontos pontszámot ad. Alapértelmezett: FivePoint. Választható
Granularity A kiértékelési részletesség. Az elfogadott értékek a következők:

Phoneme, amely a teljes szöveges, szó- és fonetikai szintek pontszámát jeleníti meg.
Word, amely a teljes szöveg- és szószintek pontszámát jeleníti meg.
FullText, amely csak a teljes szöveges szinten jeleníti meg a pontszámot.

Az alapértelmezett beállítás: Phoneme.
Választható
Dimension Meghatározza a kimeneti feltételeket. Az elfogadott értékek a következők:

Basic, amely csak a pontossági pontszámot jeleníti meg.
Comprehensive, amely több dimenzió pontszámait jeleníti meg (például a folyékonysági pontszámot és a teljességi pontszámot a teljes szöveg szintjén, a hibatípust pedig a szó szintjén).

A különböző pontszámdimenziók és szóhibák definícióinak megtekintéséhez tekintse meg a Válasz tulajdonságai című témakört. Az alapértelmezett beállítás: Basic.
Választható
EnableMiscue Lehetővé teszi a hibás számítást. Ha ez a paraméter engedélyezve van, a kimondott szavakat a referenciaszöveghez hasonlítjuk. Az összehasonlítás alapján kihagyással vagy beszúrással vannak megjelölve. Az elfogadott értékek a következők False : és True. Az alapértelmezett beállítás: False. Választható
ScenarioId A testre szabott pontrendszert jelző GUID. Választható

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 simplebiztosí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 AccuracyScorevan ö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 (Noneami azt jelenti, hogy ebben a szóban nincs hiba), Omissionés InsertionMispronunciation.

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

Következő lépések