Android 上离线模式下的语音转文本

发布于 2024-10-12 17:40:27 字数 2545 浏览 4 评论 0原文

无论如何,我可以在离线模式下使用 Android 的语音转文本功能吗?

在给定的示例 VoiceRecognition.java 中,它以 Intent RecognizerIntent.ACTION_RECOGNIZE_SPEECH 启动和活动。

这是否意味着需要事先安装任何其他 apk 才能正常工作,还是我需要编写自己的应用程序来启动此意图。

我已经搜索了很长时间但感到困惑...

这是我使用的代码..

private static final int VOICE_RECOGNITION_REQUEST_CODE = 1234;

private ListView mList;

/**
 * Called with the activity is first created.
 */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Inflate our UI from its XML layout description.
    setContentView(R.layout.voice_recognition);

    // Get display items for later interaction
    Button speakButton = (Button) findViewById(R.id.btn_speak);

    mList = (ListView) findViewById(R.id.list);

    // Check to see if a recognition activity is present
    PackageManager pm = getPackageManager();
    List<ResolveInfo> activities = pm.queryIntentActivities(
            new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
    if (activities.size() != 0) {
        speakButton.setOnClickListener(this);
    } else {
        speakButton.setEnabled(false);
        speakButton.setText("Recognizer not present");
    }
}

/**
 * Handle the click on the start recognition button.
 */
public void onClick(View v) {
    if (v.getId() == R.id.btn_speak) {
        startVoiceRecognitionActivity();
    }
}

/**
 * Fire an intent to start the speech recognition activity.
 */
private void startVoiceRecognitionActivity() {
    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
            RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speech recognition demo");
    startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);
}

/**
 * Handle the results from the recognition activity.
 */
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) {
        // Fill the list view with the strings the recognizer thought it could have heard
        ArrayList<String> matches = data.getStringArrayListExtra(
                RecognizerIntent.EXTRA_RESULTS);
        mList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,
                matches));
    }

    super.onActivityResult(requestCode, resultCode, data);
}

在运行此代码时,它给出了识别器不存在,这意味着不存在此类活动。如何解决这个问题?

Is there anyway in which I can use the Voice to Text feature of Android in offline mode.

In the given example VoiceRecognition.java, it starts and activity with the intent RecognizerIntent.ACTION_RECOGNIZE_SPEECH.

Does it mean that any other apk needs to be installed before hand for this to work or do I need to write my own application to launch on this intent.

I have been searching for this for a long time but is getting confused...

Here is the code I used..

private static final int VOICE_RECOGNITION_REQUEST_CODE = 1234;

private ListView mList;

/**
 * Called with the activity is first created.
 */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Inflate our UI from its XML layout description.
    setContentView(R.layout.voice_recognition);

    // Get display items for later interaction
    Button speakButton = (Button) findViewById(R.id.btn_speak);

    mList = (ListView) findViewById(R.id.list);

    // Check to see if a recognition activity is present
    PackageManager pm = getPackageManager();
    List<ResolveInfo> activities = pm.queryIntentActivities(
            new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
    if (activities.size() != 0) {
        speakButton.setOnClickListener(this);
    } else {
        speakButton.setEnabled(false);
        speakButton.setText("Recognizer not present");
    }
}

/**
 * Handle the click on the start recognition button.
 */
public void onClick(View v) {
    if (v.getId() == R.id.btn_speak) {
        startVoiceRecognitionActivity();
    }
}

/**
 * Fire an intent to start the speech recognition activity.
 */
private void startVoiceRecognitionActivity() {
    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
            RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speech recognition demo");
    startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);
}

/**
 * Handle the results from the recognition activity.
 */
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) {
        // Fill the list view with the strings the recognizer thought it could have heard
        ArrayList<String> matches = data.getStringArrayListExtra(
                RecognizerIntent.EXTRA_RESULTS);
        mList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,
                matches));
    }

    super.onActivityResult(requestCode, resultCode, data);
}

On running this code it gives Recognizer not present which means no such activity is present. How to resolve this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

初相遇 2024-10-19 17:40:27

我认为你有两个问题。首先,是的,识别器功能并非在所有设备上都可用。确保安装并更新最新的 Android 版 Google 语音搜索。我相信它安装了最新的识别器。请参阅 http://www.google.com/mobile/voice-actions/这可能会有所帮助。

正如Dante Jiang在将语音转换为文本中所说,根据本文Google 语音搜索 是您真正需要的。

Android SDK 使您可以轻松地
将语音输入直接集成到
您自己的应用程序 - 只需复制并
从此示例应用程序粘贴到
开始吧。安卓是一个开放的
平台,因此您的应用程序可以
可能利用任何演讲
设备上的识别服务
已注册接收
识别器意图。谷歌的声音
搜索应用程序,即
预装在许多 Android 设备上,
通过以下方式响应 RecognizerIntent
显示“立即发言”对话框并
将音频流传输至 Google
服务器——与
用户点击麦克风按钮
搜索小部件或启用语音的
键盘。 (您可以检查是否有语音
搜索已安装在“设置”中➝
应用程序➝管理应用程序。)

在代码中,您应该检查识别活动是否存在。我使用过以下代码片段:

// Check to see if a recognition activity is present
PackageManager pm = getPackageManager();
List<ResolveInfo> activities = pm.queryIntentActivities(
        new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
if (activities.size() != 0) 
{
    speakButton.setOnClickListener(this);
} 
else 
{
    speakButton.setEnabled(false);
    speakButton.setText(R.string.recognizer_not_present);
}

第二个问题是 Android 语音识别需要互联网连接。识别不是在设备上执行,而是使用 Google 网络服务。所以,你必须在线。有关网络服务的一些信息,请访问 http://waxy.org/2008/11/deconstructing_google_mobiles_voice_search_on_the_iphone/

I think you have two problems. First, yes the recognizer functionality is not available on all devices. Make sure you install and update the latest Google Voice Search for Android. I believe it installs the latest recognizer. See http://www.google.com/mobile/voice-actions/ it may be helpful.

As Dante Jiang said in Converting speech to text, According to this article, Google Voice Search is what you actually need.

The Android SDK makes it easy to
integrate speech input directly into
your own application—just copy and
paste from this sample application to
get started. Android is an open
platform, so your application can
potentially make use of any speech
recognition service on the device
that's registered to receive a
RecognizerIntent. Google's Voice
Search application, which is
pre-installed on many Android devices,
responds to a RecognizerIntent by
displaying the "Speak now" dialog and
streaming audio to Google's
servers—the same servers used when a
user taps the microphone button on the
search widget or the voice-enabled
keyboard. (You can check if Voice
Search is installed in Settings ➝
Applications ➝ Manage applications.)

In code, you should check to see if the recognition activity is present. I have the following snippet I've used:

// Check to see if a recognition activity is present
PackageManager pm = getPackageManager();
List<ResolveInfo> activities = pm.queryIntentActivities(
        new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
if (activities.size() != 0) 
{
    speakButton.setOnClickListener(this);
} 
else 
{
    speakButton.setEnabled(false);
    speakButton.setText(R.string.recognizer_not_present);
}

The second problem is that the Android voice recognition requires Internet connectivity. The recognition is not performed on the device, but rather uses Google web services. So, you must be online. Some info on the web services is available at http://waxy.org/2008/11/deconstructing_google_mobiles_voice_search_on_the_iphone/.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文