我正在通过Intent使用SpeechRecognizer:

Intent i = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
i.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
        RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);

i.putExtra(RecognizerIntent.EXTRA_PROMPT,
        "straight talk please");

i.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 5);
i.putExtra(RecognizerIntent.EXTRA_LANGUAGE,
            "en-US";

startActivityForResult(i, 0);

我在onActivityResults()中得到的结果是这样的:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == 0 && resultCode == RESULT_OK) {

        // List with the results from the Voice Recognition API
        ArrayList<String> results = data
                .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);

        // The confidence array
        float[] confidence = data.getFloatArrayExtra(
                RecognizerIntent.EXTRA_CONFIDENCE_SCORES);

        // The confidence results
        for (int i = 0; i < confidence.length; i++) {
            Log.v("oAR", "confidence[" + i + "] = " + confidence[i]);
        }
    }

    super.onActivityResult(requestCode, resultCode, data);
}

但是float数组总是返回0.0作为结果,但是第一个元素是这样的:
confidence[0] = any value between 0 and 1
confidence[1] = 0.0
confidence[2] = 0.0
and so on

我希望每个结果的置信度值都在0到1之间。否则,这似乎毫无用处,因为默认情况下,具有最高置信度的结果将是第一个元素,而无需使用EXTRA_CONFIDENCE_SCORES。有什么我想念的吗?

此外,应该在RecognizerIntent.EXTRA_CONFIDENCE_SCORES中使用API Level 14++。但这与我在哪个8以上的API上使用无关紧要,结果保持不变。那时的文档是否过时了?

最佳答案

根据我对文档的解释:

identifierrIntent.Extra_Results返回一个排序的 array字符串列表,每个字符串都是关于所讲内容的建议,的索引为0的字符串是Recognizer最有信心的建议。

identifierrIntent.Extra_Confidence_Scores返回与每个建议对应的浮点数组。

因此,如果您得到的结果是正确的(否则这可能是一个错误),
则识别器只有1个暗示对它有信心,其他几个则只有微不足道或没有信心。

我得到了类似的结果。我从未有过一组结果,其中有一个建议像您一样具有不可忽略的信心。
例如
0.7435,
0.0,
0.0,
0.0,
......

但是,有时我会得到一组结果,其中所有结果的置信度都可以忽略不计。例如0.0、0.0、0.0、0.0、0.0,......

因此,是的,“结果”中的第一个元素将始终是“识别器”最有信心的元素。

关于android - Android SpeechRecognizer “confidence”值令人困惑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18765419/

10-09 01:42