Batchtranscriptie gebruiken
Batchtranscriptie is een reeks REST API waarmee u een grote hoeveelheid audio in de opslag kunt transcriberen. U kunt naar audiobestanden wijzen met behulp van een typische URI of een SAS-URI (Shared Access Signature) en asynchroon transcriptieresultaten ontvangen. Met de v3.0 API kunt u een of meer audiobestanden transcriberen of een hele opslagcontainer verwerken.
U kunt REST API's voor batchtranscriptie gebruiken om de volgende methoden aan te roepen:
| Batchtranscriptiebewerking | Methode | REST API aanroepen |
|---|---|---|
| Hiermee maakt u een nieuwe transcriptie. | POST | speechtotext/v3.0/transcriptions |
| Hiermee wordt een lijst met transcripties voor het geverifieerde abonnement opgehaald. | GET | speechtotext/v3.0/transcriptions |
| Haalt een lijst met ondersteunde locales op voor offlinetranscripties. | GET | speechtotext/v3.0/transcriptions/locales |
| Werkt de veranderlijke details bij van de transcriptie die wordt geïdentificeerd door de id. | PATCH | speechtotext/v3.0/transcriptions/{id} |
| Hiermee verwijdert u de opgegeven transcriptietaak. | DELETE | speechtotext/v3.0/transcriptions/{id} |
| Haalt de transcriptie op die wordt geïdentificeerd door de opgegeven id. | GET | speechtotext/v3.0/transcriptions/{id} |
| Haalt de resultaatbestanden op van de transcriptie die wordt geïdentificeerd door de opgegeven id. | GET | speechtotext/v3.0/transcriptions/{id}/files |
U kunt de gedetailleerde API bekijken en testen, die beschikbaar is als een Swagger-document.
Batchtranscriptietaken worden gepland op basis van best effort. U kunt niet schatten wanneer een taak wordt gewijzigd in de status Wordt uitgevoerd, maar dit zou bij normale systeembelasting binnen enkele minuten moeten gebeuren. Eenmaal in de status Wordt uitgevoerd vindt de transcriptie sneller plaats dan de afspeelsnelheid van de audioruntime.
Vereisten
Net als bij alle functies van de Speech-service maakt u een abonnementssleutel op basis van de Azure Portal de handleiding Aan de slag te volgen.
Notitie
Een standaardabonnement (S0) voor speech-service is vereist voor het gebruik van batchtranscriptie. Gratis abonnementssleutels (F0) werken niet. Zie prijzen en limieten voor meer informatie.
Als u van plan bent om modellen aan te passen, volgt u de stappen in Akoestische aanpassing en Taalaanpassing. Als u de gemaakte modellen wilt gebruiken in batchtranscriptie, hebt u hun modellocatie nodig. U kunt de modellocatie ophalen wanneer u de details van het model (eigenschap) self inspecteert. Er is geen geïmplementeerd aangepast eindpunt nodig voor de batchtranscriptieservice.
Notitie
Als onderdeel van de REST API heeft BatchTranscriptie een set quotaen limieten, die we aansporen om te bekijken. Als u optimaal gebruik wilt maken van batchtranscriptie om een groot aantal audiobestanden efficiënt te transcriberen, raden we u aan altijd meerdere bestanden per aanvraag te verzenden of te wijzen naar een Blob Storage-container met de audiobestanden die u wilt transcriberen. De bestanden worden door de service gelijktijdig transcriberen, waardoor de doorlooptijd wordt verkort. Het gebruik van meerdere bestanden in één aanvraag is heel eenvoudig en eenvoudig. Zie de sectie Configuratie.
API voor batchtranscriptie
De API voor batchtranscriptie ondersteunt de volgende indelingen:
| Indeling | Codec | Bits per voorbeeld | Sample Rate |
|---|---|---|---|
| WAV | PCM | 16-bits | 8 kHz of 16 kHz, mono of stereo |
| MP3 | PCM | 16-bits | 8 kHz of 16 kHz, mono of stereo |
| OGG | OPUS | 16-bits | 8 kHz of 16 kHz, mono of stereo |
Voor stereo-audiostreams worden de linker- en rechterkanalen tijdens de transcriptie gesplitst. Voor elk kanaal wordt een JSON-resultaatbestand gemaakt. Als u een geordende definitieve transcriptie wilt maken, gebruikt u de tijdstempels die per utterance worden gegenereerd.
Configuratie
Configuratieparameters worden geleverd als JSON.
Een of meer afzonderlijke bestanden transcriberen. Als u meer dan één bestand wilt transcriberen, raden we u aan meerdere bestanden in één aanvraag te verzenden. In het onderstaande voorbeeld worden drie bestanden gebruikt:
{
"contentUrls": [
"<URL to an audio file 1 to transcribe>",
"<URL to an audio file 2 to transcribe>",
"<URL to an audio file 3 to transcribe>"
],
"properties": {
"wordLevelTimestampsEnabled": true
},
"locale": "en-US",
"displayName": "Transcription of file using default model for en-US"
}
Een hele opslagcontainer verwerken. Container-SAS moet r machtigingen (lezen) l en (lijst) bevatten:
{
"contentContainerUrl": "<SAS URL to the Azure blob container to transcribe>",
"properties": {
"wordLevelTimestampsEnabled": true
},
"locale": "en-US",
"displayName": "Transcription of container using default model for en-US"
}
Gebruik een aangepast getraind model in een batchtranscriptie. In het voorbeeld worden drie bestanden gebruikt:
{
"contentUrls": [
"<URL to an audio file 1 to transcribe>",
"<URL to an audio file 2 to transcribe>",
"<URL to an audio file 3 to transcribe>"
],
"properties": {
"wordLevelTimestampsEnabled": true
},
"locale": "en-US",
"model": {
"self": "https://westus.api.cognitive.microsoft.com/speechtotext/v3.0/models/{id}"
},
"displayName": "Transcription of file using default model for en-US"
}
Configuratie-eigenschappen
Gebruik deze optionele eigenschappen om transcriptie te configureren:
Parameter
Beschrijving
profanityFilterMode
Optioneel, standaard ingesteld op Masked . Hiermee geeft u op hoe grof taalgebruik in herkenningsresultaten moet worden verwerkt. Geaccepteerde waarden zijn het uitschakelen van het filteren van grof taalgebruik, het vervangen van grof taalgebruik door sterretjes, het verwijderen van alle grof taalgebruik uit het resultaat of het toevoegen van tags voor 'grof None Masked Removed Tags taalgebruik'.
punctuationMode
Optioneel, standaard ingesteld op DictatedAndAutomatic . Hiermee geeft u op hoe interpunctie in herkenningsresultaten moet worden verwerkt. Geaccepteerde waarden zijn om leestekens uit te None schakelen, Dictated expliciete (gesproken) interpunctie te impliceren, Automatic om de decoder leestekens te laten gebruiken of om dicteerde en automatische leestekens te DictatedAndAutomatic gebruiken.
wordLevelTimestampsEnabled
falseOptioneel, standaard. Hiermee geeft u op of tijdstempels op woordniveau moeten worden toegevoegd aan de uitvoer.
diarizationEnabled
falseOptioneel, standaard. Hiermee geeft u op dat de analyse van de diarisatie moet worden uitgevoerd op de invoer, die naar verwachting monokanaal met twee stemmen. Opmerking: Hiervoor wordLevelTimestampsEnabled moet worden ingesteld op true .
channels
Optioneel 0 en 1 standaard transcrimineerd. Een matrix met kanaalnummers die moeten worden verwerkt. Hier kan een subset van de beschikbare kanalen in het audiobestand worden opgegeven om te worden verwerkt 0 (bijvoorbeeld alleen).
timeToLive
Optioneel, standaard geen verwijdering. Een duur voor het automatisch verwijderen van transcripties na het voltooien van de transcriptie. De is handig bij het massaal verwerken van transcripties om ervoor te zorgen dat ze uiteindelijk worden timeToLive verwijderd (bijvoorbeeld PT12H 12 uur).
destinationContainerUrl
Optionele URL met ad-hoc SAS naar een be schrijfbare container in Azure. Het resultaat wordt opgeslagen in deze container. SAS met opgeslagen toegangsbeleid wordt niet ondersteund. Wanneer dit niet wordt opgegeven, slaat Microsoft de resultaten op in een opslagcontainer die wordt beheerd door Microsoft. Wanneer de transcriptie wordt verwijderd door Transcriptie verwijderen aan te roepen,worden de resultaatgegevens ook verwijderd.
Storage
Batchtranscriptie kan audio lezen van een openbaar zichtbare internet-URI en kan audio- of schrijftranscripties lezen met behulp van een SAS-URI met Azure Blob Storage.
Resultaat van batchtranscriptie
Voor elke audio-invoer wordt één transcriptieresultaatbestand gemaakt.
De bewerking Get transcriptions files retourneert een lijst met resultaatbestanden voor deze transcriptie.
Als u het transcriptiebestand voor een specifiek invoerbestand wilt zoeken, filtert u alle geretourneerde bestanden met kind == Transcription en name == {originalInputName.suffix}.json .
Elk transcriptieresultaatbestand heeft deze indeling:
{
"source": "...", // sas url of a given contentUrl or the path relative to the root of a given container
"timestamp": "2020-06-16T09:30:21Z", // creation time of the transcription, ISO 8601 encoded timestamp, combined date and time
"durationInTicks": 41200000, // total audio duration in ticks (1 tick is 100 nanoseconds)
"duration": "PT4.12S", // total audio duration, ISO 8601 encoded duration
"combinedRecognizedPhrases": [ // concatenated results for simple access in single string for each channel
{
"channel": 0, // channel number of the concatenated results
"lexical": "hello world",
"itn": "hello world",
"maskedITN": "hello world",
"display": "Hello world."
}
],
"recognizedPhrases": [ // results for each phrase and each channel individually
{
"recognitionStatus": "Success", // recognition state, e.g. "Success", "Failure"
"speaker": 1, // if `diarizationEnabled` is `true`, this is the identified speaker (1 or 2), otherwise this property is not present
"channel": 0, // channel number of the result
"offset": "PT0.07S", // offset in audio of this phrase, ISO 8601 encoded duration
"duration": "PT1.59S", // audio duration of this phrase, ISO 8601 encoded duration
"offsetInTicks": 700000.0, // offset in audio of this phrase in ticks (1 tick is 100 nanoseconds)
"durationInTicks": 15900000.0, // audio duration of this phrase in ticks (1 tick is 100 nanoseconds)
// possible transcriptions of the current phrase with confidences
"nBest": [
{
"confidence": 0.898652852, // confidence value for the recognition of the whole phrase
"lexical": "hello world",
"itn": "hello world",
"maskedITN": "hello world",
"display": "Hello world.",
// if wordLevelTimestampsEnabled is `true`, there will be a result for each word of the phrase, otherwise this property is not present
"words": [
{
"word": "hello",
"offset": "PT0.09S",
"duration": "PT0.48S",
"offsetInTicks": 900000.0,
"durationInTicks": 4800000.0,
"confidence": 0.987572
},
{
"word": "world",
"offset": "PT0.59S",
"duration": "PT0.16S",
"offsetInTicks": 5900000.0,
"durationInTicks": 1600000.0,
"confidence": 0.906032
}
]
}
]
}
]
}
Het resultaat bevat de volgende velden:
Veld
Inhoud
lexical
De werkelijke woorden die worden herkend.
itn
Inverse-tekstgenormaliseerde vorm van de herkende tekst. Afkortingen ('arts smith' tot 'dr smith'), telefoonnummers en andere transformaties worden toegepast.
maskedITN
Het ITN-formulier met maskering van grof taalgebruik toegepast.
display
De weergavevorm van de herkende tekst. Leestekens en hoofdletters zijn toegevoegd.
Sprekerscheiding (diarisatie)
Diarisatie is het proces van het scheiden van sprekers in een stuk audio. De batchpijplijn ondersteunt diarisatie en kan twee sprekers op monokanaalopnamen herkennen. De functie is niet beschikbaar op stereo-opnamen.
De uitvoer van transcriptie met ingeschakelde diarisatie bevat een Speaker vermelding voor elke transcribere woordgroep. Als er geen diarisatie wordt gebruikt, Speaker is de eigenschap niet aanwezig in de JSON-uitvoer. Voor diarisatie ondersteunen we twee stemmen, zodat de sprekers worden geïdentificeerd als 1 of 2 .
Als u diarisatie wilt aanvragen, voegt u de eigenschap diarizationEnabled toe op , zoals de true HTTP-aanvraag hieronder wordt weergegeven.
{
"contentUrls": [
"<URL to an audio file to transcribe>",
],
"properties": {
"diarizationEnabled": true,
"wordLevelTimestampsEnabled": true,
"punctuationMode": "DictatedAndAutomatic",
"profanityFilterMode": "Masked"
},
"locale": "en-US",
"displayName": "Transcription of file using default model for en-US"
}
Tijdstempels op wordniveau moeten zijn ingeschakeld zoals de parameters in de bovenstaande aanvraag aangeven.
Aanbevolen procedures
De batchtranscriptieservice kan een groot aantal verzonden transcripties verwerken. U kunt de status van uw transcripties opvragen met Get transcriptions.
Roep Delete-transcriptie regelmatig aan vanuit de service zodra u de resultaten hebt opgehaald. U kunt ook de timeToLive eigenschap instellen om ervoor te zorgen dat de resultaten uiteindelijk worden verwijderd.
Tip
U kunt het hulpprogramma Ingestion Client en de resulterende oplossing gebruiken om grote volumes audio te verwerken.
Voorbeeldcode
Volledige voorbeelden zijn beschikbaar in de GitHub voorbeeldopslagplaats in de samples/batch subdirectory.
Werk de voorbeeldcode bij met uw abonnementsgegevens, serviceregio, URI die verwijst naar het audiobestand dat moet worden transcriberen en modellocatie als u een aangepast model gebruikt.
var newTranscription = new Transcription
{
DisplayName = DisplayName,
Locale = Locale,
ContentUrls = new[] { RecordingsBlobUri },
//ContentContainerUrl = ContentAzureBlobContainer,
Model = CustomModel,
Properties = new TranscriptionProperties
{
IsWordLevelTimestampsEnabled = true,
TimeToLive = TimeSpan.FromDays(1)
}
};
newTranscription = await client.CreateTranscriptionAsync(newTranscription).ConfigureAwait(false);
Console.WriteLine($"Created transcription {newTranscription.Self}");
De voorbeeldcode stelt de client in en verstuurt de transcriptieaanvraag. Vervolgens wordt er naar de statusinformatie gepeild en details over de voortgang van de transcriptie afgedrukt.
// get the status of our transcriptions periodically and log results
int completed = 0, running = 0, notStarted = 0;
while (completed < 1)
{
completed = 0; running = 0; notStarted = 0;
// get all transcriptions for the user
paginatedTranscriptions = null;
do
{
// <transcriptionstatus>
if (paginatedTranscriptions == null)
{
paginatedTranscriptions = await client.GetTranscriptionsAsync().ConfigureAwait(false);
}
else
{
paginatedTranscriptions = await client.GetTranscriptionsAsync(paginatedTranscriptions.NextLink).ConfigureAwait(false);
}
// delete all pre-existing completed transcriptions. If transcriptions are still running or not started, they will not be deleted
foreach (var transcription in paginatedTranscriptions.Values)
{
switch (transcription.Status)
{
case "Failed":
case "Succeeded":
// we check to see if it was one of the transcriptions we created from this client.
if (!createdTranscriptions.Contains(transcription.Self))
{
// not created form here, continue
continue;
}
completed++;
// if the transcription was successful, check the results
if (transcription.Status == "Succeeded")
{
var paginatedfiles = await client.GetTranscriptionFilesAsync(transcription.Links.Files).ConfigureAwait(false);
var resultFile = paginatedfiles.Values.FirstOrDefault(f => f.Kind == ArtifactKind.Transcription);
var result = await client.GetTranscriptionResultAsync(new Uri(resultFile.Links.ContentUrl)).ConfigureAwait(false);
Console.WriteLine("Transcription succeeded. Results: ");
Console.WriteLine(JsonConvert.SerializeObject(result, SpeechJsonContractResolver.WriterSettings));
}
else
{
Console.WriteLine("Transcription failed. Status: {0}", transcription.Properties.Error.Message);
}
break;
case "Running":
running++;
break;
case "NotStarted":
notStarted++;
break;
}
}
// for each transcription in the list we check the status
Console.WriteLine(string.Format("Transcriptions status: {0} completed, {1} running, {2} not started yet", completed, running, notStarted));
}
while (paginatedTranscriptions.NextLink != null);
// </transcriptionstatus>
// check again after 1 minute
await Task.Delay(TimeSpan.FromMinutes(1)).ConfigureAwait(false);
}
Zie ons Swagger-documentvoor meer informatie over de voorgaande aanroepen. Voor het volledige voorbeeld dat hier wordt weergegeven, gaat u naar GitHub in samples/batch de subdirectory.
In dit voorbeeld wordt een asynchrone installatie gebruikt om audio te posten en de transcriptiestatus te ontvangen.
De PostTranscriptions methode verzendt de details van het audiobestand en de methode ontvangt de GetTranscriptions -staten.
PostTranscriptions retourneert een -greep en GetTranscriptions gebruikt deze om een greep te maken om de transcriptiestatus op te halen.
Met deze voorbeeldcode wordt geen aangepast model opgegeven. De service gebruikt het basislijnmodel voor het transcriberen van het bestand of de bestanden. Als u het model wilt opgeven, kunt u dezelfde methode doorgeven als de modelverwijzing voor het aangepaste model.
Notitie
Voor basislijntranscripties hoeft u de id voor het basislijnmodel niet te declareeren.