FC2ブログ


VS2017-はじめの1/10歩(6):音声辞書の調整

   プログラミング [2019/02/27]
前回のコードでは、認識(聞き取り)した後の処理について説明してませんでした。
少し補足します。

WM_RECOEVENTメッセージは、「話した内容をテキストに落としましたよ」というときに発信されて、
その内容はSPEI_RECOGNITIONというイベントIDになります。
その受け取りの処理を行っているのが、RecogEvent()という関数内になります。
関数内では、グローバル変数にマルチバイトストリングとして取り出してます。
さらにその後、ウィンドウプロシジャ内からChecKeyWord()で、期待しているキーワードが含まれているかをチェックすることを想定しています。
まあ、そこら辺りは「ご自由に」ってことで、省略してます。

例えば、
//----------------------------------------------------------

pos = (PTCHAR) _mbsstr((const unsigned char *) g_szRecogText, (const unsigned char *) pKeyWord);
if (pos != NULL) {
//###debug->
//wsprintf(g_MsgBuf, "キーワード発見!!=%s", pTxt);
//MessageBox(NULL, g_MsgBuf, "音声認識", MB_ICONERROR|MB_OK);
//###debug<-
return TRUE;
}

//----------------------------------------------------------

とかでいいかなと思います。


では、Windowsに含まれる音声認識機能で、少しでもうまい具合に言ったことを文字にしてくれるようにする設定です。

●聞き取りたいキーワードを音声辞書に登録
 例えば、こんにちは/ハロー/ニイハオ/ナニョハセヨを日本語音声認識で認識させたい
 場合、以下の手順で音声辞書に登録する。
 
◆Windows7の場合
[コントロールパネル]を開いて、右上検索欄に「音声辞書」と入力して検索し、さらに表示される「Windowsヘルプサポートで"音声辞書"を検索します」をクリック

「Windowsヘルプとサポート」ダイアログで「1.音声辞書で単語を追加または編集する」をクリック

説明文が表示されるので「音声辞書に単語を追加するには」をクリックし、「1.クリックして[Windows音声認識]を開きます。」をさらにクリック

「音声認識」のウィンドウが画面上部中央辺りに出るので、「オフ」と表示されている場合は、マイクのアイコンボタンをクリック

“音声辞書を開く”とマイクに向かって発話する。

「音声辞書」ダイアログが開くので、「新しい単語を追加する」をクリック。「音声認識」のマイクアイコンをクリックし、一旦認識をオフする。

「単語または表現」に登録したいキーワード(例えば“ハロー”)を入力し、[次へ]をクリック

「完了時に発音を録音する」をチェックして、[完了]ボタンをクリック

「音声認識」のマイクアイコンをクリックし、[音声辞書]ダイアログ上の[録音]ボタンをクリックした後、キーワードを発話する。しばらくすると録音が完了するので、[再生]ボタンで再生してみて、大丈夫なら[完了]ボタンをクリックする。

上記⑥から⑨を繰り返すことで、複数のキーワードを登録できる。

◆Windows10の場合
[コントロールパネル]を開いて、右上検索欄に「音声認識」と入力して検索。検索の結果、「音声認識」(複数あるので、縞の入ったマイクアイコン側をクリックし、「音声認識」ダイアログ内の「音声認識の開始」をクリック、あるいは、検索の結果に「音声認識の開始」がある場合は、それをクリック。

「音声認識」のウィンドウが画面上部中央辺りに出るので、「オフ」と表示されている場合は、マイクのアイコンボタンをクリック

“音声辞書を開く”とマイクに向かって発話する。

「音声辞書」ダイアログが開くので、「新しい単語を追加する」をクリック。「音声認識」のマイクアイコンをクリックし、一旦認識をオフする。

Windows7の⑦~⑧に同じ。

実際、動かしてみれば分かることですが、

まがりなりにも、認識精度はバッチリとはいいがたいはずです。
辞書登録をすると、幾分期待のワードだけは、誤認識されにくくなります。

今回、いきなり MSのSpeech SDKを使うことにしましたが、
世の中、いろんな音声認識・合成製品とかがありそうなのは、前もって少し検索してみました。

●一般的な音声認識製品/手段

◆スマフォ等
 ・iPhone/Siri
 ・Android/Googleアシスタント
 ・AmazonEcho


◆SDK/API
・Web Speech API :Web(通信利用)
 -Speech API Community Groupによって策定されたJavaScript APIの一つ
 -ChromeとFireFoxがサポートしている。
 -サンプル:

・Intel RealSense SDK:
 -音声だけでなく、画像による手/顔/ジェスチャーなどのセンシングを行うSDK
 -音声は、一般的なマイクで使用できるらしい。画像はインテルの3Dカメラが前提。
 -JavaScriptにも対応・・・とあるので組込型(not通信型)にも使えるはず。
 -日、英、中、独、仏、伊、西、葡対応。
 -https://qiita.com/miyumiyu/items/e01f4493ee59da3dfef1

・Microsoft Speech SDK5.1
 -SDKとLangPackの組合せで動作
 -韓もある
 -https://so-zou.jp/software/tech/library/speech-platform/

・Julius
 -京都大学で開発した音声認識システム
 ※これを試したかったが、ちょっと手っ取り早い方で妥協しちゃいました。

・UnityEngine.Windows.Speech
 -ユニティ・テクノロジーズ社のゲーム開発プラットフォーム/開発環境
 -無料版がある。


◆その他
・Cortana
・Wit.ai
・IBM Watson Speech to Text
・Speech-to-Text
・DragonSpeech

Windows上でSpeechSDKを試す前に、
GoogleのAPIを試してみました。
以下のような内容で簡単に合成と認識が試せちゃいます。
Chrome上でしか動きませんけどね。


<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>音声合成・認識アプリ</title>
</head>
<body>
<input id="txt1" type="text" value="おめのガバン、おぼでぐねが?">
<input id="btn1" type="button" value="話す">
<script>
var btn1 = document.getElementById("btn1"); //ボタンの取得
btn1.addEventListener("click", function() { //ボタンがクリックされたら
var synth = new SpeechSynthesisUtterance(); //設定を入れるオブジェクト
var txt1 = document.getElementById("txt1"); //テキストボックスを取得
synth.text = txt1.value; //話す内容
synth.lang = "ja-JP"; //言語
synth.rate = 1.0; //速さ
synth.pitch = 1.0; //高さ
synth.volume = 1.0; //音量
window.speechSynthesis.speak(synth); //話す
});
</script>
<br>
<br>
<input id="btn2" type="button" value="認識開始">
<div id="txt2">ここに音声認識結果を表示</div>
<script>
var recog = new webkitSpeechRecognition(); // 音声認識オブジェクト
var btn2 = document.getElementById("btn2");
var txt2 = document.getElementById("txt2");
// ボタンを押した時の処理
btn2.addEventListener("click", function() {
recog.lang = "ja-JP"; // 認識する言語の設定
recog.start(); // 音声認識をスタート
});
// 認識開始した時
recog.addEventListener("soundstart", function() {
txt2.innerHTML = "認識中...";
});
// 認識が成功した時
recog.addEventListener("result", function(ret) {
txt2.innerHTML = ret.results[0][0].transcript;
});
// 認識に失敗した時
recog.addEventListener("nomatch", function() {
txt2.innerHTML = "認識できませんでした";
});
</script>

</body>
</html>


こっちは、すぐ試せるので面白いです。

では、今回はこの辺で。
m(__)m
スポンサーサイト





コメントの投稿

非公開コメント

カレンダー
09 | 2019/10 | 11
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
プロフィール

さるもすなる

Author:さるもすなる
さるです。別HPサイト「さるもすなる」から侵食してきました。 山菜/きのこ、それとタイトルにしたPPバンド籠のことをメインに徒然に・・・・暇を持て余したさるの手仕事:男手芸のブログってことで。

最新記事
最新コメント
月別アーカイブ
カテゴリ
天気予報

-天気予報コム- -FC2-








本家のHPのトップ
山菜や茸の話です
PPバンドの籠作品と作り方です
投稿をお待ちしております



ブログランキング・にほんブログ村へ にほんブログ村 ハンドメイドブログへ



マニュアルのお申し込み



検索フォーム
リンク
RSSリンクの表示
ブロとも申請フォーム

この人とブロともになる

QRコード
QR