首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Android上运行Vosk (Kaldi)提高语音识别精度

在Android上运行Vosk (Kaldi)提高语音识别精度
EN

Stack Overflow用户
提问于 2022-01-04 21:04:20
回答 1查看 1.5K关注 0票数 0

我正在开发一个应用程序来收集在Android设备上使用语音识别的数据。有五个“目标词”,以及几个被识别的数字(0,1,10,100等)。

我增加了同音词(同音词)和白话同义词,提高了目标词的准确性。目标词是Chinook,sockeye,coho,粉红色和chum。这是相关代码,

代码语言:javascript
复制
 public void parseWords() {
    List<String> szlNumbers = Arrays.asList(new String[]{"ONE", "TEN", "ONE HUNDRED", "ONE THOUSAND", "TEN THOUSAND"});
    //species with phonemes and vernacular names
    List<String> szlChinook = Arrays.asList("CHINOOK", "CHINOOK SALMON", "KING", "KINGS", "KING SALMON", "KING SALMAN");
    List<String> szlSockeye = Arrays.asList("SOCKEYE", "SOCCER", "SOCKEYE SALMON", "SOCK ICE", "SOCCER ICE", "SOCK I SAID", "SOCCER IS", "OKAY SALMON", "RED SALMON", "READ SALMON", "RED", "REDS");
    List<String> szlCoho = Arrays.asList("COHO", "COHO SALMON", "COVER SALMON", "SILVER SALMON", "SILVER", "SILVERS", "CO", "KOBO", "GO HOME", "COMO", "COVER", "GO");
    List<String> szlPink = Arrays.asList("PINK", "A PINK", "PINKS", "PINK SALMON", "HANK SALMON", "EXAMINE", "HUMPY", "HOBBY", "HUMPIES", "HUM BE", "HUM P", "BE", "HUMPTY", "HOBBIES", "HUMVEE", "THE HUMVEES", "POMPEY");
    List<String> szlChum = Arrays.asList("CHUM", "JOHN", "JUMP", "SHARMA", "CHARM", "COME", "CHARM SALMON", "COME SALMON", "CHUM SALMON", "JUMP SALMON", "TRUMP SALMON", "KETA SALMON", "KETA", "DOG", "DOGS", "DOG SALMON", "GATOR", "GATORS", "CALICO", "A CALICO");

    //Collections.sort(szlChinook); //what is this?
    szVoskOutput=szVoskOutput.toUpperCase();

    if (szVoskOutput.compareTo("")==0){
        //do nothing, this is a blank string
        return;
    }
    if(szVoskOutput==null){//...and this is a null string
        return;
    }
    //pink
    if (szlPink.contains(szVoskOutput)) {
        szSpecies = "Pink";
        populateSpecies();
        return;
    }
    //chum
    if (szlChum.contains(szVoskOutput)) {
        szSpecies = "Chum";
        populateSpecies();
        return;
    }
    //sockeye
    if (szlSockeye.contains(szVoskOutput)) {
        szSpecies = "Sockeye";
        populateSpecies();
        return;
    }
    //coho
    if (szlCoho.contains(szVoskOutput)) {
        szSpecies = "Coho";
        populateSpecies();
        return;
    }
    //Chinook
    if (szlChinook.contains(szVoskOutput)) {
        szSpecies = "Chinook";
        populateSpecies();
        return;
    }
    if(szlNumbers.contains(szVoskOutput)) {//then this is a number, put in count txt box
        tvCount.setText(szVoskOutput);
       return;
    }else{
            Toast.makeText(this, "Please repeat clearly. Captured string is:" + szVoskOutput, Toast.LENGTH_SHORT).show();
    }
}//end parseWords()

我有一个精简版的应用程序,在GitHub:https://github.com/portsample/salmonTalkerLite上有源代码,在Google上有最新的完整版本:https://play.google.com/store/apps/details?id=net.blepsias.salmontalker

使用目标词和同音词,我可以在4到5秒内得到点击。我想让这个更快一些。我能做些什么来进一步调整速度?

EN

回答 1

Stack Overflow用户

发布于 2022-01-14 21:36:03

这对我们有很大的帮助。识别时间现在一直保持在1.5秒左右。

代码语言:javascript
复制
  private void recognizeMicrophone() {
    if (speechService != null) {
        setUiState(iSTATE_DONE);
        speechService.stop();
        speechService = null;
    } else {
        setUiState(iSTATE_MIC);
        try {
        Recognizer rec = new Recognizer(model, 16000.f, "[\"sockeye pink coho chum chinook atlantic salmon\","[unk]"]");
            speechService = new SpeechService(rec, 16000.0f);
            speechService.startListening(this);
        } catch (IOException e) {
            setErrorState(e.getMessage());
        }
    }
}

这清除了上游的外显Vosk输出,只留下指定的目标词。这将消除对原帖子中所示的复杂同音词排序条件的需要。多亏了尼可莱·谢米列夫。我仍在寻找其他方法来加速识别,或以其他方式改进这一过程。

更新和改进将反映在GitHub:https://github.com/portsample/salmonTalkerLite上的源代码中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70585046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档