Пометьте разговорные слова в аудиосигналах, используя внешний API

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

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

  2. Настройка 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)
  1. Откройте Signal Labeler. На вкладке Labeler нажмите Import и выберите From workspace в списке Представители. В диалоговом окне выберите сигнал y.

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

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

Задайте метку

Задайте метку для присоединения к сигналу. Щелкните Добавить определение (Add Definition) на вкладке Маркер (Labeler). Укажите имя метки следующим Words, выберите тип метки ROI, и введите тип данных следующим string.

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

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

  1. Перейдите в директорию, в котором вы хранили speech2text Pcode-файлы и файл JSON, который хранит ваши учетные данные IBM Облака.

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

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

Определение местоположения и идентификация разговорных слов

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

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

  2. Выберите Words в браузере Определений меток».

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

  4. Щелкните Автометка (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

См. также

Приложения

Объекты

Похожие примеры

Подробнее о