Маркируйте 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 Labeler. На вкладке Labeler нажмите Import ▼ и выберите Members From Workspace. В диалоговом окне выберите сигнал, y.

  2. Добавьте время информация: Выберите Time из выпадающего списка и задают fs как частота дискретизации, которая измеряется в Гц.

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

Метка Define

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

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

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

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

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

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

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

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

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

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

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

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

Перестройте слова так, чтобы дуб "Чтений предложения дал оттенок, и также был силен". Постройте сигнал с помощью различного цвета в каждом слове.

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);

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

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

Приложения

Функции

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

Больше о