使用录制的声音片段在android上进行语音识别?

使用录制的声音片段在android上进行语音识别?,android,speech-recognition,voice,voice-recognition,Android,Speech Recognition,Voice,Voice Recognition,我在Android上使用过语音识别功能,我喜欢它。这是我的客户最受好评的功能之一。但是,格式有些限制。你必须调用识别器intent,让它将录音发送到google进行转录,然后等待文本返回 我的一些想法需要在我的应用程序中录制音频,然后将剪辑发送到谷歌进行转录 有什么方法可以发送音频剪辑以进行语音到文本的处理吗?不幸的是,目前没有。Android语音识别服务目前支持的唯一接口是RecognizerIntent,它不允许您提供自己的声音数据 如果这是您希望看到的内容,请在提交功能请求。这也与现有的音

我在Android上使用过语音识别功能,我喜欢它。这是我的客户最受好评的功能之一。但是,格式有些限制。你必须调用识别器intent,让它将录音发送到google进行转录,然后等待文本返回

我的一些想法需要在我的应用程序中录制音频,然后将剪辑发送到谷歌进行转录


有什么方法可以发送音频剪辑以进行语音到文本的处理吗?

不幸的是,目前没有。Android语音识别服务目前支持的唯一接口是
RecognizerIntent
,它不允许您提供自己的声音数据


如果这是您希望看到的内容,请在提交功能请求。这也与现有的音频剪辑有着千丝万缕的联系。

据我所知,目前还没有办法直接将音频剪辑发送到谷歌进行转录。然而,Froyo(API级别8)引入了该类,它提供了对语音识别服务的直接访问。因此,例如,您可以开始播放音频片段,并让您的活动启动语音识别器在后台进行监听,这将在完成后将结果返回给用户定义的侦听器回调方法

以下示例代码应该在活动中定义,因为SpeechRecognitor的方法必须在主应用程序线程中运行。您还需要将权限添加到AndroidManifest.xml中



    boolean available = SpeechRecognizer.isRecognitionAvailable(this);
    if (available) {
        SpeechRecognizer sr = SpeechRecognizer.createSpeechRecognizer(this);
        sr.setRecognitionListener(new RecognitionListener() {
            @Override
            public void onResults(Bundle results) {
                // process results here
            }
            // define your other overloaded listener methods here
        });
        Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
        // the following appears to be a requirement, but can be a "dummy" value
        intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, "com.dummy");
        // define any other intent extras you want

        // start playback of audio clip here

        // this will start the speech recognizer service in the background
        // without starting a separate activity
        sr.startListening(intent);
    }

您也可以通过扩展来定义自己的语音识别服务,但这超出了此答案的范围:)

我找到了一个解决方案,它可以很好地实现语音识别和音频录制。下面是我创建的一个简单Android项目的示例,展示了解决方案的工作情况。此外,我在项目中放置了一些打印屏幕来演示应用程序

我将试着简单地解释一下我使用的方法。我在这个项目中结合了两个功能:谷歌语音API和Flac录音

Google语音API是通过HTTP连接调用的。提供有关API的更多详细信息:

“(…)新的[Google]API是一个全双工流式API。这意味着,它实际上使用了两个HTTP连接——一个POST请求将内容上传为“实时”分块流,另一个GET请求访问结果,这对于较长的音频样本或流式音频更有意义。”

但是,此API需要接收FLAC声音文件才能正常工作。这让我们进入第二部分:Flac录音

在那个项目中,我通过从一个名为AudioBoo的开源应用程序中提取和改编一些代码和库来实现Flac录制。AudioBoo使用本机代码录制和播放flac格式

因此,可以录制flac声音,将其发送到Google语音API,获取文本,并播放刚刚录制的声音


我创建的项目具有使其工作的基本原则,并且可以针对特定情况进行改进。为了使它在不同的场景中工作,有必要获得一个GoogleSpeechAPI密钥,该密钥是通过成为GoogleChromiumDev组的一部分获得的。我在那个项目中留下了一个键,只是为了显示它正在工作,但我最终会删除它。如果有人需要更多信息,请告诉我,因为我无法在这篇文章中添加超过2个链接。

谷歌是否提供任何工具来评估识别器或语言模型的准确性?我们通常通过运行具有已知转录的预记录样本来评估识别器的准确性。是否有一种方法可以测试Google识别器,以了解它是否对我的应用程序有效?我还想根据预先录制的样本测试这两种语言模型,以确定哪种模型更准确。有什么方法可以做到这一点吗?有没有任何方法可以将给定的声音从麦克风传回?类似于套接字/文件/流重定向的东西?您知道API中是否包含了这种重定向吗?如果不是的话,你有没有找到一个办法把你自己的录音发送到谷歌?我也在想同样的事情。我不敢相信Android会达到如此高的水平,在媒体方面似乎严重缺乏API。Android没有提供任何库来实现这一点。有人尝试过并取得了成功吗?您是否需要在整个播放过程中等待较长的音频文件才能识别语音?虽然这是不久前发布的,但我已经确认(使用更多代码)这个想法确实有效(在Android N上)。调用
startListening()
后,等待
RecognitionListener.onReadyForSpeech()
回调并播放音频剪辑(大声!)。是否有人拥有接受音频剪辑并转换所述文本的代码引用@adelphus@Isantsan我需要实现类似的功能,但我找到了第二部分(用FLAC记录)真的很难,你能帮我吗?我也研究过AudioBoo项目,但不知道从哪里开始。实际上api有变化,当我尝试测试时,上面的代码崩溃了,这真的可能有录音语音和语音在Android中测试吗?如果api有变化,项目可能需要一些调整。我没有保留API开发了一段时间。然而,当这个答案发布后,一切都按照描述进行了。