В этом примере показано, как маркировать произносимые слова в Signal Labeler. В примере используется программное обеспечение IBM ® Watson Speech to Text API и Audio Toolbox™. Инструкции по следующим вопросам см. в разделе Транскрипция речи в текст (панель звуковых инструментов):
Загрузка панели инструментов Audio Toolbox speech2text расширенные функциональные возможности, доступные в MATLAB ® Central.
Настройка IBM Watson Speech API, предоставляемого через IBM Cloud Services. Необходимо создать учетную запись IBM Cloud, экземпляр службы «Речь в текст» и перейти на панель мониторинга службы и скопировать учетные данные - ключ API и значения URL. Дополнительные сведения см. в Руководстве по началу работы в документации IBM.
Загрузите файл аудиоданных, содержащий предложение «Дуб силен, а также придает оттенок», произносимый мужским голосом. Дискретизация сигнала производится на частоте 44,1 кГц.
[y,fs] = audioread('oak.m4a'); % To hear, type soundsc(y,fs)
Открыть маркировщик сигналов. На вкладке «Маркировщик» нажмите кнопку «Импорт» и выберите From workspace в списке Участники. В диалоговом окне выберите сигнал, y.
Добавить информацию о времени: Выбрать Time из раскрывающегося списка и указать fs в качестве частоты дискретизации, которая измеряется в кГц.
Закройте диалоговое окно. Сигнал появляется в браузере набора маркированных сигналов.
Определите метку для присоединения к сигналу. Щелкните Добавить определение (Add Definition) на вкладке Маркировщик (Labeler). Укажите имя метки как Words, выберите тип метки ROIи введите тип данных как string.
Создайте пользовательскую функцию для маркировки слов, произносимых в аудиофайле. (Код для stt функция появится позже в примере.) Дополнительные сведения см. в разделе Пользовательские функции маркировки.
Перейдите в каталог, в котором был сохранен файл speech2text Файлы P-кода и JSON-файл, в котором хранятся учетные данные IBM Cloud.
Чтобы создать функцию, на вкладке Маркировщик щелкните Автоматизировать значение (Automate Value) и выберите Добавить пользовательскую функцию (Add Custom Function). Signal Labeler отображает диалоговое окно с запросом на ввод имени, описания и типа метки добавляемой функции. Войти stt в поле Имя и выберите ROI в качестве типа метки. Поле Описание можно оставить пустым или ввести собственное описание.
Скопируйте код функции и вставьте его в появившийся пустой шаблон. Сохраните файл. Функция появится в галерее.

Найдите и идентифицируйте слова, произнесенные во входном сигнале.
В браузере набора маркированных сигналов установите флажок рядом с пунктом y.
Выбрать Words в браузере «Определения меток».
В галерее «Автоматизированные значения» выберите stt.
Щелкните Автомаркировка (Auto-Label) и выберите Auto-Label All Signals. Нажмите кнопку ОК в появившемся диалоговом окне.
Signal Labeler находит и маркирует произнесенные слова.

Экспортируйте маркированный сигнал. На вкладке «Маркировщик» нажмите кнопку «Экспорт» и выберите 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 Функция: Поиск и идентификация произносимых словЭта функция использует IBM Watson Speech API и Audio Toolbox speech2text расширение функциональных возможностей для извлечения произносимых слов из аудиофайла.
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