最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。
この例では、信号ラベラーで発声された単語にラベル付けする方法を示します。この例では、IBM® Watson Speech to Text API と Audio Toolbox™ ソフトウェアを使用します。以下の手順については、Speech-to-Text Transcription (Audio Toolbox)を参照してください。
MATLAB® Central から入手可能な Audio Toolbox の speech2text
拡張機能をダウンロードします。
IBM Cloud サービスから提供されている IBM Watson Speech API を設定します。IBM Cloud アカウントと Speech to Text サービス インスタンスを作成し、サービス ダッシュボードに移動して、資格情報 (API キーと URL の値) をコピーしなければなりません。詳細については、IBM ドキュメンテーションの入門チュートリアルを参照してください。
男性の声で話された "Oak is strong, and also gives shade" という文を含むオーディオ データ ファイルを読み込みます。信号は 44,100 Hz でサンプリングされています。
[y,fs] = audioread('oak.m4a'); % To hear, type soundsc(y,fs)
信号ラベラー を開きます。[ラベラー] タブで、[インポート] ▼ をクリックし、[Members From Workspace] を選択します。ダイアログ ボックスで、信号 y
を選択します。
時間情報を追加します。ドロップダウン リストから Time
を選択し、サンプル レートとして fs
(Hz 単位) を指定します。
ダイアログ ボックスを閉じます。[ラベル付き信号セット] ブラウザーに信号が表示されます。
信号に付加するラベルを定義します。[ラベラー] タブの [定義の追加] をクリックします。[ラベル名] に Words
を指定して、[ラベル タイプ] に ROI
を選択し、[データ型] として string
と入力します。
オーディオ ファイルの発声された単語にラベル付けするカスタム関数を作成します。(関数 stt
のコードは、後ほどこの例で示します)。詳細は、カスタム ラベル付け関数を参照してください。
speech2text
P コード ファイルと IBM Cloud の資格情報が格納されている JSON ファイルを保存したディレクトリに移動します。
関数を作成するために、[ラベラー] タブの [値の自動処理] ▼ をクリックして、[カスタム関数の追加] を選択します。信号ラベラーにより、追加する関数の名前、説明、およびラベル タイプの入力を求めるダイアログ ボックスが表示されます。名前フィールドに stt
と入力し、[ラベル タイプ] として ROI
を選択します。説明フィールドは空のままにすることも、独自の説明を入力することもできます。
関数コードをコピーして、表示される空のテンプレートに貼り付けます。ファイルを保存します。関数がギャラリーに表示されます。
入力信号の発声された単語を検索して特定します。
[ラベル付き信号セット] ブラウザーで、y
の横にあるチェック ボックスをオンにします。
[ラベルの定義] ブラウザーで Words
を選択します。
[値の自動処理] ギャラリーで、stt
を選択します。
[自動ラベル付け] をクリックし、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"
"Oak gives shade, and also is strong" という文になるように単語を並べ替えます。単語ごとに異なる色を使用して信号をプロットします。
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
: 発声された単語の検索と特定この関数は、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