Маркируйте Spoken Words in Audio Signals Using External API

В этом примере показано, как пометить произносимые слова в Signal Labeler. Пример использует Речь IBM® Watson в текстовом программном обеспечении API и Audio Toolbox™. Смотрите Запись Речи в тексте (Audio Toolbox) для инструкций о:

  1. Загрузка speech2text Audio Toolbox расширенная функциональность, доступная от MATLAB® Central.

  2. Подготовка Речевого API Уотсона IBM, предлагаемого через IBM Cloud Services. Необходимо создать учетную запись IBM Cloud, Речь в текстовом сервисном экземпляре, и перейти к сервисной инструментальной панели и скопировать учетные данные – значения URL и КЛЮЧ API. См. Начинающий Пример в документации IBM для получения дополнительной информации.

Загрузите речевые данные

Загрузите файл аудиоданных, содержащий предложение "Дуб, сильно, и также дает оттенок, на котором" говорит мужской голос. Сигнал производится на уровне 44 100 Гц.

[y,fs] = audioread('oak.m4a');

% To hear, type soundsc(y,fs)
  1. Запустите Signal Analyzer и перетащите сигнал к таблице Signal. Выберите сигнал.

  2. Добавьте время информация: на вкладке Analyzer нажмите Time Values, выберите Sample Rate and Start Time, и задайте fs как частота дискретизации.

  3. На вкладке Analyzer нажмите Label. Сигнал появляется в Помеченном Настроенном браузере Сигнала.

Метка Define

Задайте метку, чтобы присоединить к сигналу. Нажмите Add Definition на вкладке Label. Задайте Маркировать Name как Words, выберите Label Type of ROI, и введите Тип данных как string.

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

Создайте пользовательскую функцию, чтобы пометить слова говорившими в звуковом файле. (Код для stt функция появляется позже в примере.)

  1. Перейдите к директории, где вы сохранили speech2text Pcode-файлы и файл JSON, который хранит ваши учетные данные IBM Coud.

  2. Чтобы создать функцию, во вкладке Analyzer, нажимают Automate Value ▼ и выбирают Add Custom Function. Signal Labeler показывает диалоговое окно, прося, чтобы вы ввели имя, описание и тип метки функции, чтобы добавить. Введите stt в Поле имени и выбирают ROI как Маркировать Type. Можно оставить поле Description пустым, или можно ввести собственное описание.

  3. Скопируйте функциональный код и вставьте его в пустой шаблон, который появляется. Сохраните файл. Функция появляется в галерее.

Найдите и идентифицируйте произносимые слова

Найдите и идентифицируйте слова, произнесенные во входном сигнале.

  1. В Помеченном Настроенном браузере Сигнала установите флажок рядом с y.

  2. Выберите Words в Маркировать браузере Definitions.

  3. На галерее Automated Value выберите stt.

  4. Нажмите 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

Смотрите также

Приложения

Функции

Связанные примеры

Больше о