当前位置: 首页 > 知识库问答 >
问题:

在Android上自动下载脱机语音识别语言

靳金鹏
2023-03-14

Java中是否有任何方法可以检测Android设备是否安装了脱机语音识别语言,以及它是否不会提示用户下载该语言?

我知道您可以要求语音对文本以选择脱机语音对文本,但您如何知道设备是否安装了该语言?

这个问题不是关于如何使用脱机语音,这是可行的。问题是“如何从Java应用程序代码中检测和下载/安装脱机语音语言”。i、 e.让应用程序检测他们是否安装了离线德语,如果没有,则提示用户下载/安装。

共有2个答案

农建弼
2023-03-14

要检测所需语言(德语)是否可用,请执行以下操作:

>

  • 迭代区域设置列表并检查区域设置是否可用于德语。

    如果您没有得到任何Locale对象作为回报,您可以断定德语离线不可用。然后您可以编写代码来下载和做其他事情。

    我为我的项目做了以下实现。希望下面的代码能帮助你!!!

    private TextToSpeech t1;
    
    private void setForOtherLangAudio() {
    Locale[] locales = Locale.getAvailableLocales();
    Locale loc = null;
    for (Locale locale : locales) {
      // Replace XXX with your German codes
      if (locale.getDisplayCountry().equals("XXX") &&   locale.getDisplayLanguage().equals("XXX")) {
        loc = locale ;
        break;
    }
    }
    final Locale germanLocale = loc;
    t1 = new TextToSpeech(getContext(), new TextToSpeech.OnInitListener() {
        @Override
        public void onInit(int status) {
            if (status != TextToSpeech.ERROR) {
                t1.setLanguage(germanLocale);
            }
        }
    });
    

    }

  • 黄博艺
    2023-03-14

    这不是你所希望的答案,因为在撰写本文时,我不认为有一个直接的解决方案。我非常希望被证明是错的。

    很久以前,我就请求了一个增强功能,以编程方式提供此信息-在这里

    这一增强建议增加一个参数RecognizerIntent。支持的额外\u脱机\u语言:

    以以下方式添加和使用它肯定是微不足道的:

    final Intent vrIntent = new Intent(RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS);
    getContext().sendOrderedBroadcast(vrIntent, null, new BroadcastReceiver() {
    
        @Override
        public void onReceive(final Context context, final Intent intent) {
    
            final ArrayList<String> vrStringLocales = intent.getExtras().getStringArrayList(
                    RecognizerIntent.EXTRA_SUPPORTED_LANGUAGES);
    
            // This would be nice
            final ArrayList<String> vrStringOfflineLocales = intent.getExtras().getStringArrayList(
                    RecognizerIntent.EXTRA_SUPPORTED_OFFLINE_LANGUAGES);
        }
    
    }, null, 1234, null, null);
    

    唉,这从未发生过。

    您还有另外两个选项可以尝试优雅地处理此问题。

    如果应用程序以root权限运行,则可以检查数据/数据/com的位置。谷歌。Androidgooglequicksearchbox/app\u g3\u models/包含脱机文件,可以很方便地根据其区域设置进行标记。

    第二种方法是知道用户何时需要提示来安装丢失的脱机文件。

    根据我的经验,Speech识别器的识别错误。ERROR_SERVER最常表示这一点,但并不是万无一失的。

    @Override
    public void onError(final int error) {
    
        switch (error) {
    
            case SpeechRecognizer.ERROR_SERVER:
                // TODO - prompt to install offline files
                break;
        }
    }
    

    当检测到时,您可以将用户引导到正确的安装屏幕。

    public static final String PACKAGE_NAME_GOOGLE_NOW = "com.google.android.googlequicksearchbox";
    public static final String ACTIVITY_INSTALL_OFFLINE_FILES = "com.google.android.voicesearch.greco3.languagepack.InstallActivity";
    
    public static boolean showInstallOfflineVoiceFiles(@NonNull final Context ctx) {
    
        final Intent intent = new Intent();
        intent.setComponent(new ComponentName(PACKAGE_NAME_GOOGLE_NOW, ACTIVITY_INSTALL_OFFLINE_FILES));
    
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
    
        try {
            ctx.startActivity(intent);
            return true;
        } catch (final ActivityNotFoundException e) {
    
        } catch (final Exception e) {
    
        }
    
        return false;
    }
    

    使用这样的硬编码值当然不理想,但这种情况也不理想!

    一旦你搞乱了以上所有的事情,并且认为你有一个很好的临时解决方案——再想想!无论用户是否正确安装了丢失的脱机文件,它很可能仍然无法工作。。。。。

    我在这里的回答描述了我仍然需要指导用户的过程。这很令人沮丧。

    最后,还要向mix-RecognitionListener添加一个bug。当没有错误时,可以抛出onError(int)。请从这里的答案中查看我的要点,以使用BugRecognitionListener,这样您就可以检查回调是否按正确的顺序发送,并忽略那些没有按正确顺序发送的回调。尽管我的答案建议在以前的版本中进行修复,但这仍然是一个问题。

    上面的内容应该会让你很忙!祝你好运......

     类似资料:
    • 有人能帮我吗? 我正在开发一个通过RecognizerIntent进行语音识别的应用程序。 哪一个Android版本正式带来了API对应用程序的离线识别?有什么声明吗 据我所知,如果语音识别将通过在线服务或离线词典完成,开发人员无法选择。我说得对吗?或者是否有任何记录在案的API可以脱机设置 谢谢

    • 我已经在Python语音识别方面工作了一个多月,制作了一个类似JARVIS的助手。我将语音识别模块与Google语音API和Pocketsphinx一起使用,并且直接使用了Pocketsphinx,没有使用其他模块。虽然识别是准确的,但我很难处理这些软件包处理语音所需的大量时间。它们的工作方式似乎是从一个静默点记录到另一个静默点,然后将记录传递到STT引擎。在录制过程中,无法录制其他声音以进行识别

    • 我正在寻找一个Android语音识别库。我只需要它来理解“是/否”的答案(用不同的语言,如英语、德语、法语)。 有什么建议吗?

    • [可能重复]但我没有找到下面问题的答案。 在过去的两天里,我一直在做一些语音识别方面的研究,但我的问题没有得到答案: 是否可以将语音识别作为一项服务运行?我想实现这样的功能:虽然我的手机处于睡眠模式,但我需要拨打一个号码

    • 我想开发一个模块,它将使用Android中的语音到文本支持。我发现了许多与RecogenerIntent等相关的文档和演示。但我发现所有这些演示都只是在10秒左右的时间里播放声音。但我想让我的演示运行5-10分钟以上。如果不是离线运行,我不会有任何问题,因为我的应用程序总是在线运行。 我也看过Android上的Pocketsphinx,但效果不太好。此外,它只支持Android Studio,而不

    • 我想制作一个语音识别器应用程序来转录用户的语音。我不想在这样做的时候有任何对话,所以是不可能的。(我知道如果我使用这种方法,我可以获得音频) 我正在使用SpeechRecognitor,并调用startListening来收听用户的音频。我在onResults中得到了非常准确的结果。 现在,我还需要在我的设备SD卡中存储用户的音频。为此,我尝试了MediaRecorder和AudioRecord,