dev
2023.07.09
【lib】【音声認識】jp.vstone.sotatalk.SpeechRecogの仕様確認
Sotaサポート様
お世話になっております。
 
掲題のとおりです。
お手数ではありますが、ご回答よろしくおねがいします。
何卒宜しくお願いします。


■対象パッケージ
音声認識 jp.vstone.sotatalk.SpeechRecog
 
■質問
合計13件ございます。
お手数ではありますが、各自回答する若しくはJavaDocを更新するかいただけますと幸いです。
 
(1) void addAbortWord(java.lang.String word)
 →何をするメソッドでしょうか?
 
(2) void addAbortWords(java.lang.String[] words) 
 →何をするメソッドでしょうか?
 
(3) void clearAbortWords()
 →何をするメソッドでしょうか?
 
(4) SpeechRecog.RecogResult getAbortResult() 
 →スレッドセーフでしょうか?
 
(5) java.lang.String getName(int timeout, int retry)
 →「名前の取得」の名前とは何を指しますか?
  →・timeoutのデフォルト値はいくつでしょうか?
→・retryのデフォルト値はいくつでしょうか?
 
(6)java.lang.String getNamewithAbort(int timeout, int retry)名前の取得
 →・メソッド(5)と処理がどのように異なるのでしょうか?
  →・timeoutのデフォルト値はいくつでしょうか?
→・retryのデフォルト値はいくつでしょうか?
 
(7) java.lang.String[] getNameswithAbort(int timeout, int retry) 名前の取得(複数候補)
 →・メソッド(6)と処理がどのように異なるのでしょうか?
  →・timeoutのデフォルト値はいくつでしょうか?
 →・retryのデフォルト値はいくつでしょうか?
 
(8)java.lang.Long getNumber(SpeechRecog.RecogResult recogresult) 数値の取得
 →「数値」と具体的にはどんな意味をもつ値でしょうか?
 
(9)SpeechRecog.RecogResult getRecognition(int timeout) 音声認識実行
 →・スレッドセーフでしょうか?
 →・timeoutのデフォルト値はいくつでしょうか?
 →・べき等性はありますか?※何回コールしても問題ないかどうか
 
(10)SpeechRecog.RecogResult getRecognitionwithAbort(int timeout) 
 →・スレッドセーフでしょうか?
 →・timeoutのデフォルト値はいくつでしょうか?
 →・メソッド(9)と処理がどのように異なるのでしょうか?
 
(11)java.lang.String getResponse(int timeout, int retry) 返答を取得。
 →・timeoutのデフォルト値はいくつでしょうか?
 →・retryのデフォルト値はいくつでしょうか?
 
(12)java.lang.String getResponsewithAbort(int timeout, int retry)返答を取得。
  →・timeoutのデフォルト値はいくつでしょうか?
 →・retryのデフォルト値はいくつでしょうか?
  →・メソッド(11)と処理がどのように異なるのでしょうか?
 
(13)void stopRecognitionRequest()
 →・スレッドセーフでしょうか?
 →・べき等性はありますか?(※何回コールしても問題ないかどうか)
 
■背景
 Vstone様提供の公式リファレンス(JavaDoc)を参照しても、
 メソッドの概要・詳細が把握できませんでした。
 したがって、公式に質問しlibの仕様を確認せざるを得ない状況であり、本質問に至りました。
 もし参照しているJavaDocが古いバージョンでしたら申し訳ありません。その際には指摘ください。
 
■補足
参照したJavaDocです。
もし別で公式リファレンスがあればリンク共有ください。
回答
Sotaサポート
2023.07.10
dev様

お世話になっております。Sotaサポートです。
いただいたご質問につきまして、順次お答えしていきます。


(1) void addAbortWord(java.lang.String word)
→何をするメソッドでしょうか?
 
(2) void addAbortWords(java.lang.String[] words) 
→何をするメソッドでしょうか?
 
(3) void clearAbortWords()
→何をするメソッドでしょうか?


これらは、音声認識処理中に意図して例外を発生させるために組み込まれている機能のものになります。
ライブラリ内に中断ワードの配列を保有しており、addAbortWord・addAbortWordsメソッドで中断ワードを追加し、clearAbortWordsで中断ワードを一括クリアします。
音声認識が行われた際、認識結果が登録されている中断ワードにマッチ(部分一致)する場合は、SpeechRecogAbortExceptionという例外を発生させます。


元々は、音声認識を含む複雑な処理内で、特定のワードをトリガに処理全体を中断させるような用途を想定して実装された機能になりますが、複雑なロジックを組みづらいVstoneMagicでの利用を前提としているところもあり、直接コーディングを行う場合はあえてこの機能を利用するメリットは薄いかと思われます。

(4) SpeechRecog.RecogResult getAbortResult()
→スレッドセーフでしょうか?

getAbortResultメソッド自体は、ライブラリ内に記録されている最新の中断が行われた時点の認識結果を返すのみなので、スレッドセーフかと思われます。
Sotaサポート
2023.07.10
(5) java.lang.String getName(int timeout, int retry)
→「名前の取得」の名前とは何を指しますか?
  →・timeoutのデフォルト値はいくつでしょうか?
→・retryのデフォルト値はいくつでしょうか?
 
(6)java.lang.String getNamewithAbort(int timeout, int retry)名前の取得
→・メソッド(5)と処理がどのように異なるのでしょうか?
  →・timeoutのデフォルト値はいくつでしょうか?
→・retryのデフォルト値はいくつでしょうか?
 
(7) java.lang.String[] getNameswithAbort(int timeout, int retry) 名前の取得(複数候補)
→・メソッド(6)と処理がどのように異なるのでしょうか?
  →・timeoutのデフォルト値はいくつでしょうか?
→・retryのデフォルト値はいくつでしょうか?


「名前」に該当するかの判定は、音声認識エンジンの結果を形態素解析された語句のラベル情報で「名」「姓」に該当するものを名前と判定しております。
ただ、音声認識エンジン側の仕様変更に伴い、現在形態素解析情報が取得できないため、本機能は実質利用できないものになっております。
認識結果の文字列を何らかの方法で形態素解析しラベル情報を得られる方法を別途ご用意いただくと、同様の情報を得ることは可能かと思われます。

デフォルト値についてはライブラリで設定している値はありませんが、VstoneMagicなどのブロックのデフォルト値に基づき、timeout=60000(1分)、retry=3が妥当かと思われます。

それぞれのメソッドの差異ですが、abortの有無については、先にお答えした中断ワードに関する処理(例外の発生)の有無になります。
また、メソッド名におけるNameとNamesの差異は、Nameは得られた名前候補リストのうち配列の先頭にあるものだけを返し、Namesは配列すべてを返す挙動になります。
Sotaサポート
2023.07.10
(8)java.lang.Long getNumber(SpeechRecog.RecogResult recogresult) 数値の取得
→「数値」と具体的にはどんな意味をもつ値でしょうか?
 

こちらは、聞き取れた単語が数字に該当する語句だった場合に、Long型に変換された数値を返すもので、音声認識ベースで数字を取得したい場合に使用する想定の機能です。
Sotaサポート
2023.07.10
(9)SpeechRecog.RecogResult getRecognition(int timeout) 音声認識実行
→・スレッドセーフでしょうか?
→・timeoutのデフォルト値はいくつでしょうか?
→・べき等性はありますか?※何回コールしても問題ないかどうか
 
(10)SpeechRecog.RecogResult getRecognitionwithAbort(int timeout) 
→・スレッドセーフでしょうか?
→・timeoutのデフォルト値はいくつでしょうか?
→・メソッド(9)と処理がどのように異なるのでしょうか?
 
(11)java.lang.String getResponse(int timeout, int retry) 返答を取得。
→・timeoutのデフォルト値はいくつでしょうか?
→・retryのデフォルト値はいくつでしょうか?
 
(12)java.lang.String getResponsewithAbort(int timeout, int retry)返答を取得。
  →・timeoutのデフォルト値はいくつでしょうか?
→・retryのデフォルト値はいくつでしょうか?
  →・メソッド(11)と処理がどのように異なるのでしょうか?
 
(13)void stopRecognitionRequest()
→・スレッドセーフでしょうか?
→・べき等性はありますか?(※何回コールしても問題ないかどうか)



各メソッドのスレッドセーフに対する点については、音声認識(もしくはマイクを使う処理)はロボットの性能上同時に1つしか実行できないため、その点ではスレッドセーフではないと考えられます。
withAbortの有無によるメソッドの違いは、先にお答えした通り中断ワードに反応して例外をthrowするか否かになります。
デフォルト値については、先にお答えしたものと同様、ライブラリで設定している値はありませんが、VstoneMagicなどのブロックのデフォルト値に基づき、timeout=60000(1分)、retry=3が妥当かと思われます。

べき等性については、音声認識の実行上限数に達していなければ、基本的に内部では同じ処理が実行されます。
ただし、音声認識の入力自体が、実行毎に全く同じ音素波形が入力されるものではないため、もし「同じように話しかければ同じ結果が得られる」ということを期待されているのであれば、そのようにならない可能性が高いと思われます。
逆に、まったく同じ波形の音声が入力されたと仮定すれば、認識結果は同じになると思われます(ただし、音素波形を直接Sotaに入力する手段がないため、実現は不可能になります)。
dev
2023.07.10
Sotaサポートさま
ご回答ありがとうございました。

これはあくまで個人的意見ですが、
もし可能であればJavaDocの内容を上記回答粒度程度で更新いただけますと幸いです。
(ディベロッパー全体に有益なのかは分かりませんが)
ーー
・何を意図したメソッドなのか。
・各定数、各メソッド引数のデフォルト値の有無。
・メソッド返却値の具体的説明。
ーー
引き続き、宜しくおねがいします。
この質問に回答する
 

Page Top