【发布时间】:2015-12-10 01:09:39
【问题描述】:
我正在通过 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++。但不管我使用哪个 API 高于 8,结果保持不变。那个时候文档已经过时了吗?
【问题讨论】:
-
不确定您希望得到什么样的答案。它的工作方式与 Google 实现的方式相同,您几乎无法在当前版本中对其进行更改。也许它会在未来的版本中得到支持。最好重新考虑您正在尝试构建的应用程序并选择正确的工具来实现它。开源语音识别工具包在这方面更加灵活,至少您可以使用它们获得一些东西。
-
@NikolayShmyrev 我发现此功能不能用作文档声明中的描述。因此,我期望得到的答案是,您使用错误,这不受您所想的支持,或者这是不可能的,因为它只是未来实现的占位符。我尝试使用 Android 框架的实现,因为通常用户熟悉它。但看起来第三个库是唯一的选择。我只是想确保文档在这一点上需要更新。
-
文档没有过期,正如您在类似问题的回答中已经解释的那样,请参阅:stackoverflow.com/questions/18694497/…
标签: android speech-recognition