Java 限制语音识别词典以实现更快的匹配和更好的准确性

Java 限制语音识别词典以实现更快的匹配和更好的准确性,java,android,voice-recognition,voice,Java,Android,Voice Recognition,Voice,我正在尝试制作一个基于android的应用程序,其中一个部分是语音识别。我有一个非常有限的语音命令的应用程序将工作。因此,我想以某种方式限制字典或创建一个新的应用程序将使用的单词字典,这样应用程序将具有非常好的准确性和更快的匹配。 例如,如果我说“B”,结果可以是“B”、“be”或“Bee”,但我的应用程序应该只查找“B”,而不是任何其他类似的声音。 如何在android中实现这一点 编辑:我是android新手,到目前为止,我只在网上阅读了一篇教程,应用了基本的谷歌语音识别。 说真的,我需要一

我正在尝试制作一个基于android的应用程序,其中一个部分是语音识别。我有一个非常有限的语音命令的应用程序将工作。因此,我想以某种方式限制字典或创建一个新的应用程序将使用的单词字典,这样应用程序将具有非常好的准确性和更快的匹配。 例如,如果我说“B”,结果可以是“B”、“be”或“Bee”,但我的应用程序应该只查找“B”,而不是任何其他类似的声音。 如何在android中实现这一点

编辑:我是android新手,到目前为止,我只在网上阅读了一篇教程,应用了基本的谷歌语音识别。
说真的,我需要一些提示来完成这项任务,这样我以后就不会浪费更多的时间去寻找不相关的东西了。

Lol,我刚刚意识到他们的语音识别软件显然是基于云的。不会有你可以使用的数据,一切都在谷歌的数据中心


这里有一些基本的解释:

Android语音识别系统可以离线和在线工作。只是离线时,识别效果不是很好,而且你没有多种选择的结果。对于在线,谷歌语音识别器将返回一系列可能的结果以及置信度,因此如果您有:

choice 1: Bee 0.6522 confidence choice 2: Be 0.1 confidence choice 3: B 0.0 confidence 选择1:Bee 0.6522置信度 选择2:信心为0.1 选择3:B 0.0置信度 您的软件可以决定忽略Bee(即使具有很高的置信度),并选择您认为适合您的应用程序的Bee

代码片段:

/**
*在你的活动中
*/
公共无效开始窗口(视图){
意向意向=新意向(识别意向、行动、识别言语);
intent.putExtra(RecognizerIntent.EXTRA语言模型,RecognizerIntent.LANGUAGE模型自由形式);
intent.putExtra(RecognizerIntent.EXTRA_提示符,“继续,说点什么…”);
intent.putExtra(识别器intent.EXTRA_最大结果,100);
startActivityForResult(意向书,111);
}
受保护的void onActivityResult(int请求代码、int结果代码、意图数据)
{
if(requestCode==111){
if(resultCode==RESULT\u OK)
{
ArrayList matches=data.getStringArrayListExtra(RecognizerIntent.EXTRA_结果);
float[]分数=data.getFloatArrayExtra(RecognizerIntent.EXTRA\u CONFIDENCE\u分数);
//TODO:循环可能的匹配项,
//选择你认为合适的
}
}
}  

如果你有与Android字典中的电话相关的数据,那么删除一些数据并只保留其中的一个子集可能“很容易”。否则,创建一个电话列表是一项漫长而乏味的任务,要想让它准确无误。你能发布你尝试过但不起作用的东西吗?事实上,我对安卓是新手。我不知道从哪里开始做这个任务。我搜索了很多,最后把它贴在这里,以便有人能告诉我正确的路径。你能把你的工作代码片段贴在这里吗?你能把语音命令和应用程序命令相匹配吗?即使它不准确,根据您的要求,它可以。另外,请记住,不同的人可能会对“B”的发音略有不同。额外信心分数仅返回浮点数组,其中只有1的值在0-1之间,其余的都是0.0。为什么会这样?看起来你的代码正常工作了。在信心方面,是的,我知道这一点,但希望谷歌能尽快解决。在这里,其他人也遇到了信心问题:官方关于信心级别的Android bug报告是
/**
 *  in your Activity
 */
public void startVoice(View view) {

    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,  RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Go on, say something...");
    intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 100);

    startActivityForResult(intent, 111);
}

protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    if (requestCode == 111) {
        if (resultCode == RESULT_OK)
        {
            ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
            float [] scores = data.getFloatArrayExtra(RecognizerIntent.EXTRA_CONFIDENCE_SCORES);
            //  TODO:  loop through possible matches, 
            //         and choose what you think is appropriate 
        }
    }
}