我的应用程序中有一个代码可以识别“波斯语”语言并实现语音转文本功能:
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "fa");
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speak...");
但现在它突然停止工作并且只将我的 STT 识别为英语!我没有改变任何东西。当我将
RecognizerIntent.EXTRA_LANGUAGE
更改为任何其他语言(例如意大利语 intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "it");
)时,它也无法识别这种语言!
怎么了?
尝试使用 Locale 对象显式设置区域设置,而不仅仅是语言代码:
Locale persianLocale = new Locale("fa");
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, persianLocale.toLanguageTag());
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
Additionally, you can set the EXTRA_LANGUAGE_PREFERENCE and EXTRA_ONLY_RETURN_LANGUAGE_PREFERENCE:
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, "fa");
intent.putExtra(RecognizerIntent.EXTRA_ONLY_RETURN_LANGUAGE_PREFERENCE, "fa");
或
设备的默认语言可能会影响识别。
解决方案: 尝试暂时将设备的默认语言更改为波斯语:
进入设置 → 系统 → 语言和输入法 → 语言。 添加波斯语并将其设置为主要语言。 重新启动设备并测试您的应用程序。
有时,Android 操作系统的权限更改或更新可能会导致 STT 问题。
解决方案: 确保您的应用程序具有录制音频和使用麦克风的必要权限:
xml
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.INTERNET"/>
检查是否授予运行时权限:
if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECORD_AUDIO}, REQUEST_CODE);
}