Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

外部 API を使用したオーディオ信号の発声された単語のラベル付け

この例では、信号ラベラーで発声された単語にラベル付けする方法を示します。この例では、IBM® Watson Speech to Text API と Audio Toolbox™ ソフトウェアを使用します。以下の手順については、Speech-to-Text Transcription (Audio Toolbox)を参照してください。

  1. MATLAB® Central から入手可能な Audio Toolbox の speech2text 拡張機能をダウンロードします。

  2. IBM Cloud サービスから提供されている IBM Watson Speech API を設定します。IBM Cloud アカウントと Speech to Text サービス インスタンスを作成し、サービス ダッシュボードに移動して、資格情報 (API キーと URL の値) をコピーしなければなりません。詳細については、IBM ドキュメンテーションの入門チュートリアルを参照してください。

音声データの読み込み

男性の声で話された "Oak is strong, and also gives shade" という文を含むオーディオ データ ファイルを読み込みます。信号は 44.1 kHz でサンプリングされています。

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

% To hear, type soundsc(y,fs)
  1. 信号ラベラーを開きます。[ラベラー] タブで、[インポート] ▼ をクリックし、[メンバー] リストの From workspace を選択します。ダイアログ ボックスで、信号 y を選択します。

  2. 時間情報を追加します。ドロップダウン リストから Time を選択し、サンプル レートとして fs (kHz 単位) を指定します。

  3. ダイアログ ボックスを閉じます。[ラベル付き信号セット ブラウザー] に信号が表示されます。

ラベルの定義

信号に付加するラベルを定義します。[ラベラー] タブの [定義の追加] ▼ をクリックします。[ラベル名]Words を指定して、[ラベル タイプ]ROI を選択し、[データ型] として string と入力します。

カスタム自動ラベル付け関数の作成

オーディオ ファイルの発声された単語にラベル付けするカスタム関数を作成します。(関数 stt のコードは、後ほどこの例で示します)。詳細については、カスタム ラベル付け関数を参照してください。

  1. speech2text P コード ファイルと IBM Cloud の資格情報が格納されている JSON ファイルを保存したディレクトリに移動します。

  2. 関数を作成するために、[ラベラー] タブの [値の自動処理] ▼ をクリックして、[カスタム関数の追加] を選択します。信号ラベラーにより、追加する関数の名前、説明、およびラベル タイプの入力を求めるダイアログ ボックスが表示されます。名前フィールドに stt と入力し、[ラベル タイプ] として ROI を選択します。説明フィールドは空のままにすることも、独自の説明を入力することもできます。

  3. 関数コードをコピーして、表示される空のテンプレートに貼り付けます。ファイルを保存します。関数がギャラリーに表示されます。

発声された単語の検索と特定

入力信号の発声された単語を検索して特定します。

  1. [ラベル付き信号セット ブラウザー] で、y の横にあるチェック ボックスをオンにします。

  2. [ラベルの定義] ブラウザーで Words を選択します。

  3. [値の自動処理] ギャラリーで、stt を選択します。

  4. [自動ラベル付け] ▼ をクリックし、Auto-Label Signals を選択します。表示されるダイアログ ボックスで [OK] をクリックします。

信号ラベラーが発声された単語を検索してラベル付けします。

ラベル付き信号のエクスポート

ラベル付き信号をエクスポートします。[ラベラー] タブで、[エクスポート] ▼ をクリックし、Labeled Signal Set To File を選択します。表示されるダイアログ ボックスで、ラベル付き信号セットに Transcription.mat という名前を付け、オプションで簡単な説明を追加します。[エクスポート] をクリックします。

MATLAB® コマンド ウィンドウに戻ります。ラベル付き信号セットを読み込みます。このセットのメンバーは 1 つのみです。ラベルの名前を取得し、その名前を使用して、文字に起こされた単語を取得して表示します。

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

参考

アプリ

オブジェクト

関連する例

詳細