alphacep / vosk-android-demo

Offline speech recognition for Android with Vosk library.
Apache License 2.0
734 stars 194 forks source link

中文语言模型准确性低到让人泪目 #56

Open xiaooquanwu opened 4 years ago

xiaooquanwu commented 4 years ago

我下载的是这个模型,vosk-model-small-cn-0.3 准确性基本为0 ,请问下什么原因?

nshmyrev commented 4 years ago

请提供一些带有注释的示例音频文件以进行测试

xiaooquanwu commented 4 years ago

手上没有相应的wav文件,我是通过mic拾音的,另外,英文模型准确性大概是50%左右

nshmyrev commented 4 years ago

首先请记录一些wav文件进行测试

xiaooquanwu commented 4 years ago

我这边试了下wav音频文件,也是一样,准确性为0 call.zip

nshmyrev commented 4 years ago

我检查一下

她在档案中怎么说?

xiaooquanwu commented 4 years ago

请注意接听钉钉免费电话

nshmyrev commented 4 years ago

在处理之前,必须将文件转换为单声道。

我得到的结果非常接近。除了丁丁。您确定结果不同吗?

LOG (VoskAPI:ComputeDerivedVars():ivector-extractor.cc:183) Computing derived variables for iVector extractor LOG (VoskAPI:ComputeDerivedVars():ivector-extractor.cc:204) Done. LOG (VoskAPI:RemoveOrphanNodes():nnet-nnet.cc:948) Removed 1 orphan nodes. LOG (VoskAPI:RemoveOrphanComponents():nnet-nnet.cc:847) Removing 2 orphan components. LOG (VoskAPI:Collapse():nnet-utils.cc:1472) Added 1 components, removed 2 LOG (VoskAPI:CompileLooped():nnet-compile-looped.cc:345) Spent 0.0320599 seconds in looped compilation. LOG (VoskAPI:ReadDataFiles():vosk/model.cc:259) Loading HCL and G from model/HCLr.fst model/Gr.fst LOG (VoskAPI:ReadDataFiles():vosk/model.cc:281) Loading winfo model/word_boundary.int { "partial" : "" } { "partial" : "" } { "partial" : "" } { "partial" : "请" } { "partial" : "请 注意" } { "partial" : "请 注意" } { "partial" : "请 注意 接听" } { "partial" : "请 注意 接听" } { "partial" : "请 注意 接听 丁丁" } { "partial" : "请 注意 接听 丁丁" } { "partial" : "请 注意 接听 丁丁 免费" } { "partial" : "请 注意 接听 丁丁 免费" } { "partial" : "请 注意 接听 丁丁 免费 电话" } { "result" : [{ "conf" : 1.000000, "end" : 0.450000, "start" : 0.000000, "word" : "请" }, { "conf" : 1.000000, "end" : 0.780000, "start" : 0.450000, "word" : "注意" }, { "conf" : 1.000000, "end" : 1.350000, "start" : 0.810000, "word" : "接听" }, { "conf" : 1.000000, "end" : 1.890000, "start" : 1.350000, "word" : "丁丁" }, { "conf" : 1.000000, "end" : 2.370000, "start" : 1.890000, "word" : "免费" }, { "conf" : 1.000000, "end" : 3.090000, "start" : 2.370000, "word" : "电话" }], "text" : "请 注意 接听 丁丁 免费 电话" }

nshmyrev commented 4 years ago

对于电话问题,请尝试使用其他型号的电话,某些设备存在问题。 也让我知道您的手机型号。

xiaooquanwu commented 4 years ago

我的是rk3399 android7.1 ,除了更换模型文件,其他代码不需要修改吗? 比如这个地方 KaldiRecognizer(activityReference.get().model, 16000.f, "你 好");

xiaooquanwu commented 4 years ago
  1. 转成单声道,依旧不行 Input File : 'mono.wav' Channels : 1 Sample Rate : 44100 Precision : 16-bit Duration : 00:00:03.20 = 141312 samples = 240.327 CDDA sectors File Size : 283k Bit Rate : 706k Sample Encoding: 16-bit Signed Integer PCM

  2. 转成单声道,并在创建KaldiRecognizer 的时候把采样率设置成44100,也是不行

xiaooquanwu commented 4 years ago

改成这个样子可以设别wav文件了 KaldiRecognizer(activityReference.get().model, 44100 );

那如果mic需要怎么改?

nshmyrev commented 4 years ago

改成这个样子可以设别wav文件了 KaldiRecognizer(activityReference.get().model, 44100 );

恭喜你

那如果mic需要怎么改?

抱歉,问题是什么?

xiaooquanwu commented 4 years ago

就是MIC的识别准确性不怎么高,大概只有20%的准确性

nshmyrev commented 4 years ago

您需要转储麦克风中的音频以进行分析 我还需要有关手机型号和操作系统的信息

xiaooquanwu commented 4 years ago
public SpeechRecognizer(Model model) throws IOException {
    this.recognizer = new KaldiRecognizer(model, 16000.0F);
    this.sampleRate = 16000;
    this.bufferSize = Math.round((float)this.sampleRate * 0.4F);
    this.recorder = new AudioRecord(6, this.sampleRate, 16, 2, this.bufferSize * 2);
    if(this.recorder.getState() == 0) {
        this.recorder.release();
        throw new IOException("Failed to initialize recorder. Microphone might be already in use.");
    }
}

采样率设置能否开一个api出来?怀疑和采样率有关,

我的系统是RK3399 Android7.1 系统

nshmyrev commented 4 years ago

采样率设置能否开一个api出来?怀疑和采样率有关,

我同意。 我可以在代码中的某个时候更改它。 也许您可以做得更快。

我的系统是RK3399 Android7.1 系统

您也可以尝试其他可能与手机有关的手机型号。 我尝试使用小米手机。

xiaooquanwu commented 4 years ago

vosk_api 我这边编译不过android 版本 CMake Error: CMake can not determine linker language for target: kaldi_jni

nshmyrev commented 4 years ago

请提供完整的输出

什么是cmake版本

什么是ndk版本

您是否尝试更新到较新版本

xiaooquanwu commented 4 years ago

应该是我在windows android stduio 编译的原因,linux 编译环境没有搭建

xiaooquanwu commented 4 years ago

sad

nshmyrev commented 4 years ago

好吧,我会检查未来几天

xiaooquanwu commented 4 years ago

我这边在linux编译了vosk_api,改了采样率,依然准确性不高

另外,我又找了一些wav文件测试,准确性也不是很高,测试了4个wav文件,只成功识别一个 wav文件都是44100,16bit的 Input File : 'kaldi-android-demo/models/src/main/assets/4.wav' Channels : 1 Sample Rate : 44100 Precision : 16-bit Duration : 00:00:02.83 = 124810 samples = 212.262 CDDA sectors File Size : 250k Bit Rate : 706k Sample Encoding: 16-bit Signed Integer PCM

xiaooquanwu commented 4 years ago

assets.zip

nshmyrev commented 4 years ago

@xiaooquanwu

这里的声音不寻常

对于第一个例子

{
  "result" : [{
      "conf" : 1.000000,
      "end" : 0.150000,
      "start" : 0.060000,
      "word" : "我"
    }, {
      "conf" : 1.000000,
      "end" : 0.510000,
      "start" : 0.150000,
      "word" : "喜欢"
    }, {
      "conf" : 1.000000,
      "end" : 0.840000,
      "start" : 0.510000,
      "word" : "你"
    }],
  "text" : "我 喜欢 你"
}

你有什么不同吗?

xiaooquanwu commented 4 years ago

第一个是可以识别到了,其他几个识别不到

JiaDeng-Git commented 4 years ago

你好,我这边采用rk3326/Android9.0测试,识别率一开始也很低。 后来,将安卓程序烧录到手机上,说话字正腔圆普通话标准一些,识别率在95%以上。 经过分析后发现,不是vosk-android-demo的问题。而是,rk3326硬件资源带不起该软件。

JiaDeng-Git commented 4 years ago

好吧,我会检查未来几天

您好,很感谢您贡献了优秀的代码,让我感受到了语音识别之美!请问,我可以加入你们,一起为了这个项目的发展,贡献一份力量吗?

PeterLocas commented 4 years ago

@xiaooquanwu 怎么弄的中文识别啊

PeterLocas commented 4 years ago

我下载的是这个模型,vosk-model-small-cn-0.3 准确性基本为0 ,请问下什么原因? 这个模型在哪下载

nshmyrev commented 4 years ago

@PeterLocas 为了获得准确性的帮助,请提供您要识别的音频。 和文字。

PeterLocas commented 4 years ago

@PeterLocas 为了获得准确性的帮助,请提供您要识别的音频。 和文字。

@nshmyrev 这么严格吗,vosk-model-small-cn-0.3 这个不全吗? 我想进微信群可以推荐一下吗,我就用哪个cn

PeterLocas commented 4 years ago

@nshmyrev 还想问下这个,vosk-model-small-cn-0.3 放在项目什么地方啊

nshmyrev commented 4 years ago

没有音频示例我无能为力

PeterLocas commented 4 years ago

@nshmyrev 就是中文普通话

chenguohai commented 2 years ago

1.zip

可以帮助我一下吗?我使用vosk-model-small-cn-0.3,测试出来的正确率不乐观。我使用环境中的中文是只有几百个词汇,包含一些专业词汇。原文是真空制动器下方制动硬管脱卡。

chenguohai commented 2 years ago

或者是说我可以使用自己的词汇集和采样的语音进行数据标注,该如何做?谢谢

chenguohai commented 2 years ago

可否推荐用于中文训练的模型

nshmyrev commented 2 years ago

@chenguohai 你必须自己训练你的模型,或者你可以给我们发邮件,描述你的项目的细节,我们会给你链接到中文词汇更新包

chenguohai commented 2 years ago

@chenguohai 你必须自己训练你的模型,或者你可以给我们发邮件,描述你的项目的细节,我们会给你链接到中文词汇更新包

多谢。是哪个邮箱?

IClient commented 1 year ago

@nshmyrev 还想问下这个,vosk-model-small-cn-0.3 放在项目什么地方啊

请问你找到中文模型了吗?

nshmyrev commented 1 year ago

@IClient 你的问题是什么。 请提供详细信息。

IClient commented 1 year ago

@IClient 你的问题是什么。 请提供详细信息。

已解决,