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