В этом примере показано, как пометить произносимые слова в Signal Labeler. Пример использует Речь IBM® Watson в текстовом программном обеспечении API и Audio Toolbox™. Смотрите Запись Речи в тексте (Audio Toolbox) для инструкций о:
Загрузка speech2text
Audio Toolbox расширенная функциональность, доступная от MATLAB® Central.
Подготовка Речевого API Уотсона IBM, предлагаемого через IBM Cloud Services. Необходимо создать учетную запись IBM Cloud, Речь в текстовом сервисном экземпляре, и перейти к сервисной инструментальной панели и скопировать учетные данные – значения URL и КЛЮЧ API. См. Начинающий Пример в документации IBM для получения дополнительной информации.
Загрузите файл аудиоданных, содержащий предложение "Дуб, сильно, и также дает оттенок, на котором" говорит мужской голос. Сигнал производится на уровне 44,1 кГц.
[y,fs] = audioread('oak.m4a'); % To hear, type soundsc(y,fs)
Открытый Signal Labeler. На вкладке Labeler нажмите Import ▼ и выберите From workspace
в списке членов. В диалоговом окне выберите сигнал, y
.
Добавьте время информация: Выберите Time
из выпадающего списка и задают fs
как частота дискретизации, которая измеряется в kHz.
Закройте диалоговое окно. Сигнал появляется в Помеченном Настроенном Браузере Сигнала.
Задайте метку, чтобы присоединить к сигналу. Нажмите Add Definition ▼ на вкладке Labeler. Задайте Маркировать Name как Words
, выберите Label Type of ROI
, и введите Тип данных как string
.
Создайте пользовательскую функцию, чтобы пометить слова говорившими в звуковом файле. (Код для stt
функция появляется позже в примере.) Смотрите Пользовательский Functions Маркировки для получения дополнительной информации.
Перейдите к директории, где вы сохранили speech2text
Pcode-файлы и файл JSON, который хранит ваши учетные данные IBM Cloud.
Чтобы создать функцию, во вкладке Labeler, нажимают Automate Value ▼ и выбирают Add Custom Function. Signal Labeler показывает диалоговое окно, прося, чтобы вы ввели имя, описание и тип метки функции, которую вы добавляете. Введите stt
в Поле имени и выбирают ROI
как Маркировать Type. Можно оставить поле Description пустым, или можно ввести собственное описание.
Скопируйте функциональный код и вставьте его в пустой шаблон, который появляется. Сохраните файл. Функция появляется в галерее.
Найдите и идентифицируйте слова, произнесенные во входном сигнале.
В Помеченном Настроенном Браузере Сигнала установите флажок рядом с y
.
Выберите Words
в Маркировать браузере Definitions.
На галерее Automated Value выберите stt
.
Нажмите Auto-Label ▼ и выберите Auto-Label Signals
. Нажмите ОК в диалоговом окне, которое появляется.
Signal Labeler определяет местоположение и помечает произносимые слова.
Экспортируйте помеченный сигнал. На вкладке Labeler нажмите Export ▼ и выберите Labeled Signal Set To File
. В диалоговом окне, которое появляется, дайте имени Transcription.mat
к помеченному набору сигнала и добавляют дополнительное краткое описание. Нажмите Export.
Вернитесь к Командному окну MATLAB®. Загрузите помеченный набор сигнала. Набор имеет только один член. Получите имена меток и используйте имя, чтобы получить и отобразить записанные слова.
load Transcription
ln = getLabelNames(transcribedAudio);
v = getLabelValues(transcribedAudio,1,ln)
v=7×2 table
ROILimits Value
____________ ________
0.09 0.56 "oak"
0.59 0.97 "is"
1 1.78 "strong"
1.94 2.19 "and"
2.22 2.67 "also"
2.67 3.22 "gives"
3.25 3.91 "shade"
Измените значения метки от строк до категорий. Используйте signalMask
возразите, чтобы построить сигнал с помощью различного цвета для каждого слова.
v.Value = categorical(v.Value,v.Value);
msk = signalMask(v,'SampleRate',fs);
s = getSignal(transcribedAudio,1);
plotsigroi(msk,s.y)
stt
Функция: найдите и идентифицируйте произносимые словаЭта функция использует Речевой API Уотсона IBM и speech2text
Audio Toolbox расширенная функциональность, чтобы извлечь произносимые слова из звукового файла.
function [labelVals,labelLocs] = stt(x,t,parentLabelVal,parentLabelLoc,varargin) aspeechObjectIBM = speechClient('IBM','timestamps',true); fs = 1/(t(2)-t(1)); tixt = speech2text(aspeechObjectIBM,x,fs); numLabels = numel(tixt.TimeStamps{:}); labelVals = strings(numLabels,1); labelLocs = zeros(numLabels,2); for idx = 1:numLabels labelVals(idx) = tixt.TimeStamps{:}{idx}{1}; labelLocs(idx,1) = tixt.TimeStamps{:}{idx}{2}; labelLocs(idx,2) = tixt.TimeStamps{:}{idx}{3}; end end