В этом примере показано, как пометить произносимые слова в 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 100 Гц.
[y,fs] = audioread('oak.m4a'); % To hear, type soundsc(y,fs)
Запустите Signal Analyzer и перетащите сигнал к таблице Signal. Выберите сигнал.
Добавьте время информация: на вкладке Analyzer нажмите Time Values, выберите Sample Rate and Start Time
, и задайте fs
как частота дискретизации.
На вкладке Analyzer нажмите Label. Сигнал появляется в Помеченном Настроенном браузере Сигнала.
Задайте метку, чтобы присоединить к сигналу. Нажмите Add Definition на вкладке Label. Задайте Маркировать Name как Words
, выберите Label Type of ROI
, и введите Тип данных как string
.
Создайте пользовательскую функцию, чтобы пометить слова говорившими в звуковом файле. (Код для stt
функция появляется позже в примере.)
Перейдите к директории, где вы сохранили speech2text
Pcode-файлы и файл JSON, который хранит ваши учетные данные IBM Coud.
Чтобы создать функцию, во вкладке Analyzer, нажимают Automate Value ▼ и выбирают Add Custom Function. Signal Labeler показывает диалоговое окно, прося, чтобы вы ввели имя, описание и тип метки функции, чтобы добавить. Введите stt
в Поле имени и выбирают ROI
как Маркировать Type. Можно оставить поле Description пустым, или можно ввести собственное описание.
Скопируйте функциональный код и вставьте его в пустой шаблон, который появляется. Сохраните файл. Функция появляется в галерее.
Найдите и идентифицируйте слова, произнесенные во входном сигнале.
В Помеченном Настроенном браузере Сигнала установите флажок рядом с y
.
Выберите Words
в Маркировать браузере Definitions.
На галерее Automated Value выберите stt
.
Нажмите Auto-Label и нажмите ОК в диалоговом окне, которое появляется.
Signal Labeler определяет местоположение и помечает произносимые слова.
Экспортируйте помеченный сигнал. На вкладке Label нажмите Save Labels. В диалоговом окне, которое появляется, дайте имени transcribedAudio
к помеченному набору сигнала. Нажатие "ОК" возвращает вас в Signal Analyzer. На таблице Signal выберите transcribedAudio
и щелкните правой кнопкой, чтобы экспортировать его в файл под названием Transcription.mat
.
Загрузите помеченный набор сигнала. Набор имеет только одного участника. Получите имена меток и используйте имя, чтобы получить и отобразить записанные слова.
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"
Перестройте слова так, чтобы дуб "Чтений предложения дал оттенок, и также был силен". Постройте сигнал с помощью различного цвета в каждом слове.
k = v([1 6:7 4:5 2:3],:); s = getSignal(transcribedAudio,1); sent = []; sgs = NaN(height(s),height(k)); lgd = []; for kj = 1:height(k) lm = length(sent); word = s.y(timerange(seconds(k.ROILimits(kj,1)),seconds(k.ROILimits(kj,2)))); sent = [sent;word]; sgs(lm+(1:length(word)),kj) = word; lgd = [lgd;(length(sent)-length(word)/2)/fs]; end sgs(length(sent)+1:end,:) = []; % To hear, type soundsc(sent,fs) plot((0:length(sgs)-1)/fs,sgs) text(lgd,-0.7*ones(size(lgd)),k.Value,'HorizontalAlignment',"center") axis tight
stt
Функция: найдите и идентифицируйте произносимые словаЭта функция использует Речевой API Уотсона IBM и speech2text
Audio Toolbox расширенная функциональность, чтобы извлечь произносимые слова из звукового файла.
function [labelVals,labelLocs] = stt(x,t,parentLabelVal,parentLabelLoc,varargin) aspeechObjectIBM = speechClient('IBM','timestamps',true,'model','en-US_NarrowbandModel'); 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