Поделиться через


Использование API быстрого транскрибирования (предварительная версия) с речью искусственного интеллекта Azure

Примечание.

Эта функция сейчас доступна в виде общедоступной предварительной версии. Эта предварительная версия предоставляется без соглашения на уровне обслуживания и не рекомендуется для рабочих нагрузок. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Дополнительные сведения см. в статье Дополнительные условия использования Предварительных версий Microsoft Azure.

API быстрого транскрибирования доступен только через речь в текстовом REST API версии 2024-05-15-preview. Эта предварительная версия подвержена изменению и не рекомендуется использовать в рабочей среде. Он будет снят без уведомления 90 дней после предварительной версии преемника или общедоступной версии API.

API быстрого транскрибирования используется для расшифровки звуковых файлов с синхронно и гораздо быстрее, чем звук в режиме реального времени. Используйте быструю транскрибирование в сценариях, необходимых для расшифровки аудиозаписи как можно быстрее с прогнозируемой задержкой, например:

  • Быстрое транскрибирование звука или видео, субтитры и редактирование.
  • Видеотрансляции

Совет

Попробуйте быстро транскрибирование в Azure AI Studio.

Необходимые компоненты

  • Ресурс службы "Речь" Azure AI в одном из регионов, где доступен API быстрого транскрибирования. Поддерживаемые регионы: Центральная Индия, Восточная Часть США, Юго-Восточная Азия и Западная Европа. Дополнительные сведения о регионах, поддерживаемых для других функций службы "Речь", см. в разделе "Регионы службы "Речь".
  • Звуковой файл (менее 2 часов и менее 200 МБ в размере) в одном из форматов и кодеков, поддерживаемых API пакетной транскрибирования. Дополнительные сведения о поддерживаемых аудиоформатах см . в поддерживаемых аудиоформатах.

Использование API быстрого транскрибирования

API быстрого транскрибирования — это REST API, использующий многопартийные и форм-данные для отправки звуковых файлов для транскрибирования. API возвращает результаты транскрибирования синхронно.

Создайте текст запроса в соответствии со следующими инструкциями:

  • Задайте обязательное свойство locales. Это значение должно соответствовать ожидаемому языковому стандарту звуковых данных для транскрибирования. Поддерживаемые языковые стандарта: en-US, es-ES, es-MX, fr-FR, hi-IN, it-IT, ja-JP, ko-KR, pt-BR и zh-CN. Вы можете указать только один языковой стандарт для каждого запроса транскрибирования.
  • При необходимости задайте profanityFilterMode свойство, чтобы указать, как обрабатывать ненормативную лексику в результатах распознавания. Допустимые значения: None — отключает фильтрацию ненормативной лексики, Masked — заменяет ненормативную лексику звездочками, Removed — удаляет всю ненормативную лексику из результата, Tags — добавляет теги, указывающие на ненормативную лексику. Значение по умолчанию — Masked. Свойство profanityFilterMode работает так же, как с помощью API пакетной транскрибирования.
  • При необходимости задайте channels свойство, чтобы указать отсчитываемые от нуля индексы каналов, которые необходимо транскрибировать отдельно. Если не указано, несколько каналов объединяются и транскрибируются совместно. Поддерживаются только до двух каналов. Если вы хотите транскрибировать каналы из стереофонического аудиофайла отдельно, необходимо указать [0,1] здесь. В противном случае стереофонический звук будет объединен с моно, моно звук останется как есть, и только один канал будет транскрибирован. В любом из последних случаев выходные данные не имеют индексов каналов для транскрибированного текста, так как только один аудиопоток транскрибируется.
  • При необходимости задайте diarizationSettings свойство для распознавания и разделения нескольких динамиков в аудиофайл моноканала. Необходимо указать минимальное и максимальное количество людей, которые могут выступать в звуковом файле (например, указать "diarizationSettings": {"minSpeakers": 1, "maxSpeakers": 4}). Затем файл транскрибирования будет содержать запись для каждой speaker транскрибированного фразы. Функция недоступна с стереофонией при настройке channels свойства в качестве [0,1].

Создайте запрос transcriptions POST для нескольких частей и форм-данных к конечной точке с помощью звукового файла и свойств текста запроса. В следующем примере показано, как создать транскрибирование с помощью API быстрого транскрибирования.

  • Замените YourSubscriptionKey ключом ресурса службы речи.
  • Замените YourServiceRegion регион ресурсов службы "Речь".
  • Замените YourAudioFile путь к звуковому файлу.
  • Задайте свойства определения формы, как описано ранее.
curl --location 'https://YourServiceRegion.api.cognitive.microsoft.com/speechtotext/transcriptions:transcribe?api-version=2024-05-15-preview' \
--header 'Content-Type: multipart/form-data' \
--header 'Accept: application/json' \
--header 'Ocp-Apim-Subscription-Key: YourSubscriptionKey' \
--form 'audio=@"YourAudioFile"' \
--form 'definition="{
    \"locales\":[\"en-US\"], 
    \"profanityFilterMode\": \"Masked\", 
    \"channels\": [0,1]}"'

Ответ будет включать duration, channelи многое другое. Свойство combinedPhrases содержит полные транскрибирования для каждого канала отдельно. Например, все, что говорит первый оратор, находится в первом элементе combinedPhrases массива, и все, что второй оратор сказал, находится во втором элементе массива.

{
	"duration": 185079,
	"combinedPhrases": [
		{
			"channel": 0,
			"text": "Hello. Thank you for calling Contoso. Who am I speaking with today? Hi, Mary. Are you calling because you need health insurance? Great. If you can answer a few questions, we can get you signed up in the Jiffy. So what's your full name? Got it. And what's the best callback number in case we get disconnected? Yep, that'll be fine. Got it. So to confirm, it's 234-554-9312. Excellent. Let's get some additional information for your application. Do you have a job? OK, so then you have a Social Security number as well. OK, and what is your Social Security number please? Sorry, what was that, a 25 or a 225? You cut out for a bit. Alright, thank you so much. And could I have your e-mail address please? Great. Uh That is the last question. So let me take your information and I'll be able to get you signed up right away. Thank you for calling Contoso and I'll be able to get you signed up immediately. One of our agents will call you back in about 24 hours or so to confirm your application. Absolutely. If you need anything else, please give us a call at 1-800-555-5564, extension 123. Thank you very much for calling Contoso. Uh Yes, of course. So the default is a digital membership card, but we can send you a physical card if you prefer. Uh, yeah. Absolutely. I've made a note on your file. You're very welcome. Thank you for calling Contoso and have a great day."
		},
		{
			"channel": 1,
			"text": "Hi, my name is Mary Rondo. I'm trying to enroll myself with Contuso. Yes, yeah, I'm calling to sign up for insurance. Okay. So Mary Beth Rondo, last name is R like Romeo, O like Ocean, N like Nancy D, D like Dog, and O like Ocean again. Rondo. I only have a cell phone so I can give you that. Sure, so it's 234-554 and then 9312. Yep, that's right. Uh Yes, I am self-employed. Yes, I do. Uh Sure, so it's 412256789. It's double two, so 412, then another two, then five. Yeah, it's maryrondo@gmail.com. So my first and last name at gmail.com. No periods, no dashes. That was quick. Thank you. Actually, so I have one more question. I'm curious, will I be getting a physical card as proof of coverage? uh Yes. Could you please mail it to me when it's ready? I'd like to have it shipped to, are you ready for my address? So it's 2660 Unit A on Maple Avenue SE, Lansing, and then zip code is 48823. Awesome. Thanks so much."
		}
	],
	"phrases": [
		{
			"channel": 0,
			"offset": 720,
			"duration": 480,
			"text": "Hello.",
			"words": [
				{
					"text": "Hello.",
					"offset": 720,
					"duration": 480
				}
			],
			"locale": "en-US",
			"confidence": 0.9177142
		},
		{
			"channel": 0,
			"offset": 1200,
			"duration": 1120,
			"text": "Thank you for calling Contoso.",
			"words": [
				{
					"text": "Thank",
					"offset": 1200,
					"duration": 200
				},
				{
					"text": "you",
					"offset": 1400,
					"duration": 80
				},
				{
					"text": "for",
					"offset": 1480,
					"duration": 120
				},
				{
					"text": "calling",
					"offset": 1600,
					"duration": 240
				},
				{
					"text": "Contoso.",
					"offset": 1840,
					"duration": 480
				}
			],
			"locale": "en-US",
			"confidence": 0.9177142
		},
		{
			"channel": 0,
			"offset": 2320,
			"duration": 1120,
			"text": "Who am I speaking with today?",
			"words": [
				{
					"text": "Who",
					"offset": 2320,
					"duration": 160
				},
				{
					"text": "am",
					"offset": 2480,
					"duration": 80
				},
				{
					"text": "I",
					"offset": 2560,
					"duration": 80
				},
				{
					"text": "speaking",
					"offset": 2640,
					"duration": 320
				},
				{
					"text": "with",
					"offset": 2960,
					"duration": 160
				},
				{
					"text": "today?",
					"offset": 3120,
					"duration": 320
				}
			],
			"locale": "en-US",
			"confidence": 0.9177142
		},
        // More transcription results removed for brevity
        // {...},
		{
			"channel": 1,
			"offset": 4480,
			"duration": 1600,
			"text": "Hi, my name is Mary Rondo.",
			"words": [
				{
					"text": "Hi,",
					"offset": 4480,
					"duration": 400
				},
				{
					"text": "my",
					"offset": 4880,
					"duration": 120
				},
				{
					"text": "name",
					"offset": 5000,
					"duration": 120
				},
				{
					"text": "is",
					"offset": 5120,
					"duration": 160
				},
				{
					"text": "Mary",
					"offset": 5280,
					"duration": 240
				},
				{
					"text": "Rondo.",
					"offset": 5520,
					"duration": 560
				}
			],
			"locale": "en-US",
			"confidence": 0.8989456
		},
		{
			"channel": 1,
			"offset": 6080,
			"duration": 1920,
			"text": "I'm trying to enroll myself with Contuso.",
			"words": [
				{
					"text": "I'm",
					"offset": 6080,
					"duration": 160
				},
				{
					"text": "trying",
					"offset": 6240,
					"duration": 200
				},
				{
					"text": "to",
					"offset": 6440,
					"duration": 80
				},
				{
					"text": "enroll",
					"offset": 6520,
					"duration": 200
				},
				{
					"text": "myself",
					"offset": 6720,
					"duration": 360
				},
				{
					"text": "with",
					"offset": 7080,
					"duration": 120
				},
				{
					"text": "Contuso.",
					"offset": 7200,
					"duration": 800
				}
			],
			"locale": "en-US",
			"confidence": 0.8989456
		},
        // More transcription results removed for brevity
        // {...},
	]
}