Windows版 音声認識 OCX

ドキュメントトーカ for Windows に付属してくる音声認識 OCX (DTRecog.ocx)は、音声認識プログラミングを行う上での一番簡単な開発キットです。
閉じる
概要

ドキュメントトーカ for Windows には、音声認識 OCX (DTRecog.ocx)が付属しています。
音声認識プログラミングを行う上での一番簡単な開発キットといえるでしょう。
ドキュメントトーカ音声認識OCXの特徴は、不特定話者認識であり、従来の音声認識のように、あらかじめ人間の声で学習しておく必要はなく、認識したい単語を文字列で列挙することで認識対象を指定できます。
認識単語数は、1000単語までとれますので、一度にたくさんの単語を認識対象にさせることも、その場その場で認識対象をこまめに変更させていくことも、プログラム次第です。
単語認識のほかに文法を使用した連続単語認識が使用できます。「王子様の命令」や住所認識ぽすたるガイドは連続認識を応用したものです。
OCX で作られていますので、VB等OCXをサポートしてくれている開発環境ならば、非常に簡単に音声認識アプリケーションが構築できます。従来では考えられないほどの容易さですので、ぜひいちどトライしてみてください。。
認識処理の流れ

1.認識単語の設定
単純な単語認識の場合は、Textプロパティに認識したい単語の一覧を設定します。
3階層の単語認識を行う場合には、SetRecogWord3Layerメソッドで、3グループの単語群を設定します。
4階層の単語認識を行う場合には、SetRecogWord4Layerメソッドで、4グループの単語群を設定します。
あらかじめ作られている、CVFileとGrmFileを使用する場合には、SetCvGrmFileメソッドを使用します。
単語を設定したら、認識時間の設定(SetRecognitionTimeメソッド)、認識スコア上限値(Levelプロパティ)の設定を行っておきます。これらは1回設定したら次に変更されるまで有効です。

2.認識開始
Textプロパティで設定した単語認識を行う場合には Startメソッドを、3階層、4階層、CV/GRMファイル使用の場合には StartRecognitionメソッドで認識開始を指示します。
StartメソッドはTextプロパティを取り込んでから認識開始処理を行います。
StartRecognitionメソッドはすでに認識単語が取り込まれているとして認識開始処理のみを行います。
Textプロパティ単語認識の場合でも2回目からはStartRecognitionメソッドで認識開始を指示してもかまいません。

3.認識結果の取得
音声入力終端を検出し認識処理結果が出たらHitイベントが発生します。 その結果をみて認識に失敗している場合には、再度認識開始をかけるか、エラー処理を行います。

4.認識結果による処理
認識結果に応じた処理を行います。 その結果、別の単語群の設定を行って新たな認識を行う場合には認識単語の設定から、 そのまま同じ単語認識を行う場合には認識開始の処理を再度行います。
動作環境
Windows95,98,NT,Win2000
サウンドボード 11KHz、16ビット、モノラルの入力


プロパティ
コントロールの描画設定         ControlPicture(PTR to USERDEFINED)      
認識レベル Level(String)
レベルメータの表示方法 MeterSize(Integer)
認識単語 Text(String)


メソッド
認識開始 Start() As Integer
認識停止 Stop
認識開始キーの設定 SetRecogKey(Key As Integer, Mode As Integer)
認識開始キーの解除 ResetRecogKey
現在の認識キーモードの取得 GetRecogKey() As Integer
認識許可状態の取得 GetRecogEnable() As Boolean
エラー報告の有無の設定 SetErrorMode(Mode As Integer)
発声開始・終了イベントの有無の設 UtteranceMessageEnable(iFg As Integer)

Version2から以下の機能が公開されています。

Version情報 AboutBox()
入力音声のゲイン値の取得 GetGain() As Single
認識情報の取得 GetHitIndex(Kouho As Integer, HitIndex As Long, Score As Integer, NetScore As Integer) As Integer
認識情報の取得 GetHitWord(Kouho As Integer) As String
認識情報の取得 GetHitWordSub(Kouho As Integer) As String
認識情報の取得 GetNetScore() As Integer
認識情報の取得 GetScore() As Integer
環境パラメータの設定 LoadNParameter(FileName As String) As Integer
環境パラメータのセーブ SaveNParameter(FileName As String) As Integer
認識単語の設定 SetCvGrmFile(CvFile As String, GrmFile As String)
入力音声のゲイン値の設定 SetGain(gain As Single)
認識情報の設定 SetRecognitionTime(wd_min As Integer, wd_max As Integer, sl_max As Integer) As Integer
3階層認識単語の設定 SetRecogWord3Layer(StringA As String, StringB As String, StringC As String) As Integer
4階層認識単語の設定 SetRecogWord4Layer(StringA As String, StringB As String, StringC As String, StringD As String) As Integer
Noise Levelの測定 StartNSL() As Integer
認識の開始 StartRecognition() As Integer
WaveFileで認識 WaveFileRecog(FileName As String) As Intege


イベント
マウスクリック                Click                          
マウスダブルクリック DblClick
発声の開始通知 BeginUtterance
発声の終了通知 EndUtterance
認識処理可能通知 Ready
認識キーの状態変化通知 RecognitionKey
認識完了通知 Hit


コントロールの描画設定
コントロールの描画設定
機能 コントロールのイメージを表示するピクチャ イメージを設定します。                
構文 object.ControlPicture [= picture]
設定値 イメージファイル
DTRecog1.ControlPicture = LoadPicture("abc.bmp")
認識レベルの設定
認識レベルの設定
機能 識レベルを指定します。数字の小さいほど認識レベルは厳しくなります。
構文
object.Level [= String]
設定値 "500"から"1500"の範囲の数字で認識レベルを Stringで指定してください。Defaultrは "1000" です。
レベルメータの表示方法
レベルメータの表示方法
機能 コントロールを認識レベルメータとして使用することができます。
構文 object.MeterSize [= integer]
設定値 0=レベルメータとして使用しない。
1=全面をレベルメータとして使用する
2=下1/2をレベルメータとして使用
3=下1/3をレベルメータとして使用
4=下1/4をレベルメータとして使用
説明 マイク入力レベルをレベルメータ形式で表示することができます。コントロールイメージ表示領域の一部を使用して表示します。認識可能な状態のときには、黄緑の表示がされます。入力レベルに応じてレベルが振れますが、ある一定値を超え認識が開始されると青色に変わります。入力過大だと赤色に変わります。
認識単語
認識単語
機能 認識したい単語列を行単位で列挙します。
構文 object.Text [= String]
設定値 認識したい単語列
説明 1行単位で認識単語列を指定します。
認識したときの答えとして、行数を得ることもできます。
1行のフォーマットは、次のような形式になります。
AAAA{|BBBB|CCCC...} {=XXX { =ZZZ } }
{ }内はオプションであり、指定しなくてもかまいません。
AAAA|BBBB|CCCC は、半角カタカナ,全角カタカナ、全角ひらがなで指定する認識単語です。|は、“または”と読み替えて、AAAAまたはBBBBまたはCCCCのどれかを認識したらXXXとZZZいう答えを返すという意味になります。

=XXX : 認識したときに返す単語A(認識結果A)。指定がなければ、認識した単語のカタカナ表記が返ります。
=ZZZ : 認識したときに返す単語B(認識結果B)。指定がなければ、""データが返ります。
例1) DTRecog1.text="にほん|にっぽん|じゃぱん=日本=アジア"
例2) DTRecog1.text="にほん"+chr(13)+chr(10)+"かんこく"+chr(13)+chr(10)+"ちゅうごく"+chr(13)+chr(10)


認識開始
認識開始
機能 認識を開始します。                                           
構文 Error=object.Start
設定値 なし
戻値 Integer
0=正常
1=すでに認識中
2=認識環境パラメータの不備等
3=認識辞書ロードに失敗
4=認識すべき単語がない
5=単語領域を確保できなかった
6=単語番号リストをセット時にエラー
7=認識開始に失敗(サウンドのエラー等)
認識停止
認識停止
機能 認識を停止させます。
構文 object.Stop
設定値 なし
戻値 なし
説明 認識中のときはサウンド入力が常にされている状態です。プログラムを終了させたり、合成で音を出すときは必ず認識を停止させてから行うべきです。
認識開始キーの設定
認識開始キーの設定
機能 認識開始キーの設定を行います。
構文 object.SetRecogKey(Key, Mode)
設定値 Integer Key=認識キーの指定
 1=SHIFT, 2=CTRL, 3=SHIFT or CTRL
Integer Mode=プロセスモード
 0=All Thred, 1=Current thred
戻値 なし
説明 無条件に認識開始させると、不必要な雑音や、会話が音声認識されてしまうときがあります。これを避けるために、認識させたいタイミングで、あるキーを押すと認識を開始するという方法があります。認識開始キーとして、アプリケーションにあまり影響を与えない、SHIFTキーとCTRLキーが選択出来ます。このメソッドでキーの種類を設定します。この設定を行うことにより、そのキーが押された時にイベントで通知されるようになり、そのイベントタイミングで認識スタートをかけるようにします。 Mode=0 にすると、キーフォーカスが他のウィンドウに移った場合でも認識キーは有効となります。

認識開始キーの解除(無条件で認識許可)
認識開始キーの解除(無条件で認識許可)
機能 認識開始キーの設定を解除します。(Default)
構文 object.ResetRecogKey
設定値 なし
戻値 なし
説明 認識開始キーの設定を解除し、キー操作は無効tとなります。 GetRecogEnable()関数は常にTrue を返します。

現在の認識キーモードの取得
現在の認識キーモードの取得
機能 現在の認識キーモードの状態を取得します。                            
構文 Key=object.GetRecogKey
設定値 なし
戻値 Integer
0=認識キーは指定されていない,
1=SHIFT
2=CTRL
3=SHIFT or CTRL
説明

認識許可状態の取得
認識許可状態の取得
機能 現在の認識許可状態を取得します。
構文 Enabled = object.GetRecogEnable
設定値 なし
戻値 Boolean
True=認識可能状態(認識キーはONか認識キーは指定されていない)
False=認識不可状態(認識キーはOff)
説明 認識キーを使用するという設定になっているとき、認識キーの状態をあらわします。認識キーを使用しないという設定になっているときは常に True となります。


エラー報告の有無の設
エラー報告の有無の設定
機能 エラー報告の有無の設定
構文 object.SetErrorMode(Mode)
設定値 Integer Mode: 0=しない、 1=行う(Default)
戻値 なし
説明 エラーがあったとき Hit イベントでエラーを通知するかしないかの設定になります。しないにした場合には、エラーを通知しないで、そのまま認識を継続します。

発声開始・終了イベントの有無の設定
発声開始・終了イベントの有無の設定
機能 発声開始・終了イベントをあげる・あげないの設定
構文 object.UtteranceMessageEnable(flag)
設定値 Integer iFg: 0=あげない、 1=あげる(Default)
戻値 なし
説明 BeginUtterance イベント、EndUtteranceイベントをあげるかあげないかの設定を行います。
入力音声のゲインの設定
入力音声のゲインの設定
機能 入力音声に対しての倍率を0.5〜1.5の範囲で指定します。
構文 object.SetGain(gain)
設定値 Single gain=0.5〜1.5
戻値 なし
説明 入力音声に対しての倍率を0.5〜1.5の範囲で指定する。通常はマイクボリュームを使用してください。 マイクボリュームで対応できない場合にだけお使いください。

入力音声のゲインの取得
入力音声のゲインの取得
機能 現在の入力音声に対しての倍率をかえします。
構文 object..GetGain()
設定値
戻値 なし
説明 現在の入力音声倍率を返します。

環境パラメータのロード
環境パラメータのロード
機能 環境パラメータをファイルより取り込みます。
構文 object.LoadNParameter(FileName)
設定値 String FileName
戻値 Integer Err 0=正常終了
説明 プログラムの開始時に前回終了した時点の環境パラメータをファイルより取り込みます。

環境パラメータのセーブ
環境パラメータのセーブ
機能 現在の環境パラメータをファイルに書き込みます。
構文 object.SaveNParameter(FileName)
設定値 String FileName
戻値 なし
説明 プログラムの終了時に現在の環境パラメータをファイルに書き込みます。。

文法ファイルの指定
文法ファイルの指定
機能 Textプロパティでなく、連続認識用の文法ファイルを指定します。
構文 object.SetCvGrmFile(CvFile, GrmFile)
設定値 String CvFile,GrmFile
戻値 なし
説明 CvFile,GrmFile 仕様は今のところ非公開です。 3桁数字の棒読み用のファイルを公開しております。 ユーザ指定の認識フォーマットはご相談により当社で作成いたします。

認識時間の指定
認識時間の指定
機能 認識時間の指定
構文 object.SetRecognitionTime(wd_min, wd_max, sl_max)
設定値 Integer wd_min 発話検出時間(ms)
Integer wd_max 発話最長時間(ms)
Integer sl_max 終話検出時間(ms)
戻値 Integer Err 0=正常終了
説明 1階層認識では(500,10000,500)ぐらい、多階層では(1000,10000,1500)がよく使われます。

3階層認識単語の設定
3階層認識単語の設定
機能 3階層単語認識用の認識単語の設定を行います。
構文 Err=object.SetRecogWord4Layer(StringA, StringB, StringC)
設定値 String StringA 1階層目の認識単語列
String StringB 2階層目の認識単語列
String StringC 3階層目の認識単語列
戻値 Integer Err
0=正常終了
4=認識すべき単語がない
5=単語領域を確保できなかった
6=単語番号リストをセット時エラー
説明 1階層単語認識の表記方法とは若干の違いがあります。
"AAAA=HitWord"
AAAAは認識したい発音を表記したもので、全角ひらがな、全角カタカナ、半角カタカナのいずれでもかまいません。
=がセパレータでそのあとのHitWordが認識した結果の文字列となります。HtWordSubは指定できません。
これを3階層分指定します。
認識結果はHitWordを1階層目から順につなげた形で出力されます。
例)
StringA StringB StringC
とうきょう=東京 から=から しんかんせんで=新幹線で
なごや=名古屋 まで=まで でんしゃで=電車で
おおさか=大阪 NULL ひこうきで=飛行機で
NULL NULL

喋る言葉="なごやまでしんかんせんで"
認識結果(HitWord)="名古屋まで新幹線で"

この3階層認識は、認識順序はStringA, StringB, StringCの順ですが、省略が可能です。
例)
喋る言葉="なごやしんかんせんで"
認識結果(HitWord)="名古屋新幹線で"

StringAには(あー、えー、でわ、あのー)といったような不要語を設定しHitowordを設定しなければ、不要語のSkipといった使い方ができます。

例) あー= えー= でわ= あのー= NULL (=は指定しなくてもかまいません。)
StringCを""文字列としておけば2階層単語認識となります。
何階層目の認識単語かを判定する場合は、HitWordに階層情報をいれておいて、認識結果処理のときに判定してください。
3階層認識は4階層認識と違って各階層間で息継ぎが可能になっています。

4階層認識単語の設定
4階層認識単語の設定
機能 4階層単語認識用の認識単語の設定を行います。
構文 Err=object.SetRecogWord4Layer(StringA, StringB, StringC, StringD)
設定値 String StringA 1階層目の認識単語列
String StringB 2階層目の認識単語列
String StringC 3階層目の認識単語列
String StringD 4階層目の認識単語列
戻値 Integer Err
0=正常終了
4=認識すべき単語がない
5=単語領域を確保できなかった
6=単語番号リストをセット時エラー
説明 認識単語文字列の表記方法は3階層単語認識と同じです。 3階層と4階層の違いは、各階層間での息継ぎが4階層にはないことをのぞいて同等です。

認識の開始
認識の開始
機能 与えられた条件で認識を開始します。
構文 Err=object.StartRecognition
設定値 なし
戻値 Integer 0=正常
1=すでに認識中
2=認識環境パラメータの不備等
3=認識辞書ロードに失敗
4=認識すべき単語がない
5=単語領域を確保できなかった
6=単語番号リストをセット時にエラー
7=認識開始に失敗(サウンドのエラー等)
説明 Start()との違いは、Start()はtextプロパティを認識単語として設定してから認識を開始するのに対して、StartRecognition()は、すでに認識単語が設定されているという前提で、認識を開始します。認識単語として、textプロパティでなく、文法認識を使う場合には、SetCvGrmFile()で cvFile, grmFile を指定します。 3階層、4階層の場合はSetRecogWord3Layerメソッド、SetRecogWord4Layerメソッドで認識単語を設定しておきます。

WaveFileによる認識
WaveFileによる認識
機能 WaveFileを指定させてそのWaveFileの認識を行います。
構文 object.WaveFileRecog(FileName)
設定値 String FileName Wavファイル名
戻値 Integer Err 0=認識結果なし
1=認識結果あり
-1=ファイルエラー
-2=データ不足
説明 Wave fileを指定してWave File内の音声を認識します。Wave Fileは16ビット,11025HzのPCM波形である必要があります。

認識情報の取得(1)
認識情報の取得
機能 認識した結果情報を取得します。
構文 object.GetHitIndex(Kouho, HitIndex, Score, NetScore)
設定値 Integer Kouho 順位(0〜4)を指定
Integer HitIndex 認識単語表のインデックス値(行数)
Integer Score スコア
Integer NetScore ネットスコア
戻値 Integer
1=認識結果あり
0=認識結果なし
説明 指定された順位の認識結果を返します。 HitIndexは、認識単語種類で0を指定したとき意味を持ちます。 スコア、ネットスコアは小さいほど認識精度が高いことを意味します。 順位は最大5位まで出されますが、3位までとか2位までで終わる場合もあります。その場合は認識結果なしが返ります。

認識情報の取得(2)
認識情報の取得
機能 認識した結果情報を取得します。
構文 object.GetHitWord(Kouho)
設定値 Integer Kouho 順位(0〜4)を指定
戻値 String 指定された順位のHitoWord
説明 指定された順位の認識結果を返します。 順位は最大5位まで出されますが、3位までとか2位までで終わる場合もあります。その場合は認識結果なしが返ります。

認識情報の取得(3)
認識情報の取得
機能 認識した結果情報を取得します。
構文 object.GetHitWordSub(Kouho)
設定値 Integer Kouho 順位(0〜4)を指定
戻値 String 指定された順位のHitoWordSub
説明 指定された順位の認識結果を返します。 順位は最大5位まで出されますが、3位までとか2位までで終わる場合もあります。その場合は認識結果なしが返ります。

無音レベルの測定
無音レベルの測定
機能 無音時のノイズレベルの測定を行います。
構文 object.StartNSL
設定値 なし
戻値 Integer Err 0=正常終了
説明 数秒間、ノイズレベルの測定をマイクを通して行います。ここで測定された値が認識開始時の無音レベルの基準となります。通常の認識中にもこの操作はバックで行われております。


マウスクリック
マウスクリック
機能 Visual Basic の標準の Click イベントと同じです。                          
マウスダブルクリック
マウスダブルクリック
機能 Visual Basic の標準の Double Click イベントと同じです。                     
発声の開始を通知
発声の開始を通知
機能 発声が開始されたことを通知します。                                 
構文 Private Sub DTRecog1_BeginUtterance()
発声の終了を通知
発声の終了を通知
機能 発声の終了を通知します。                                       
構文 Private Sub DTRecog1_EndUtterance()
認識処理可能通知
認識処理可能通知
機能 Start がかかって、内部的に認識単語の言語処理が完了し認識可能状態になったことを通知します。
構文 Private Sub DTRecog1_Ready(ByVal Kosu As Integer)
説明 Kosu には 認識可能単語数が返ります。
認識キーの状態変化通知
認識キーの状態変化通知
機能 認識キーの状態が変化したことを通知します。
構文 Private Sub DTRecog1_RecognitionKey(ByVal Enabled As Boolean)
説明 認識キーを使用する設定になっているとき、認識キーが押されて認識を開始するタイミングになったことを通知したり、認識キーが離されて認識を停止するタイミングになったことを通知します。 EnabledがTrue のとき認識開始タイミングを意味します。逆にFalseが通知された時は認識を停止させるタイミングとなります。 GetRecogEnable() で認識キーのこの状態は取得出来ます。
認識完了通知
認識完了通知
機能 認識が完了したことを通知します。
構文 Private Sub DTRecog1_Hit(ByVal Result As Integer, ByVal HitWord As String, ByVal HitIndex As Integer, ByVal HitWordSub As String)
説明 認識が完了したか、エラーが出たとき通知されます。
このイベントが発生したとき、認識は完全に停止状態になっていますので、処理が終わったあとで、必要に応じて再度認識開始をかける必要があります。
Result: 0=正常認識
HitWord: 認識結果A
HitWordSub: 認識結果B
HitIndex: 認識単語の行数 0が1行目となります。
Result<>が0以外ののとき HitWord にはエラー情報が記述されています。

VBでの使い方
  1. VBを起動します。
  2. ツールメニューよりカスタムコントロールを選びます。
  3. カスタムコントールダイアログの中からDTalker Recognition OLE Control module をチェックし、OKを押します。
  4. ツールボックスにドキュメントトーカ音声認識コントロールが付加されます。
  5. ドキュメントトーカ音声認識コントロールを選び、フォーム上に貼り付けます。
  6. 後は、通常のVBの作法でプログラミングしてください。

VBによるサンプルプログラム
テキストボックス中の認識単語を認識するプログラム。
認識開始ボタンが押されたら、
Private Sub Command1_Click()
 DTRecog1.Text = Text1.Text   '認識単語を設定
 Err = DTRecog1.Start       '認識開始
 If Err<>0 Then MsgBox "認識開始処理に失敗しました。"
End Sub

'認識が完了すると Hit イベントが発生するので
Private Sub DTRecog1_Hit(ByVal Result As Integer, ByVal HitWord As String, ByVal HitIndex As Integer, ByVal HitWordSub As String)
 If Result = 0 Then   'エラーがなければ
  Label1.Caption = HitWord    '認識した単語を表示
 End If
 DTRecog1.Start           '再度 認識開始
End Sub
配布条件
ドキュメントトーカ音声認識カスタムコントロールを使用して作ったアプリケーションは、個人の使用責任のもとでのみ使用されるものとします。アプリケーションそのものの配布は自由ですが、ドキュメントトーカ音声認識カスタムコントロールは同時に配布・転載はできません。その場合、当社(クリエートシステム開発株式会社)との契約の上でのみ配布・販売が可能となります。また、ドキュメントトーカ音声認識カスタムコントロールを使用して作ったアプリケーションにより生じた問題は、その理由のいかんにかかわらず、当社では一切の責任を負いかねます。



ドキュメントトーカはクリエートシステム開発株式会社の登録商標です。
Microsoft Visual Basic は米国 Microsoft Corporation の登録商標です。

閉じる