2010-02-23 89 views
29

我已经使用Android上的语音识别功能,我喜欢它。这是我的客户最受赞誉的功能之一。但是,格式有些限制。你必须调用识别器的意图,让它把录音发送给谷歌,然后等待文本回来。带有录制声音剪辑的android上的语音识别?

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

有没有什么办法可以发送音频片段进行语音处理?

+0

你知道这是否已经包含在API中?如果没有,您是否找到了将自己的录音发送给Google的解决方法? – ahsteele 2011-01-22 20:35:13

+0

我想知道同样的事情。我无法相信Android是如此高的水平,在媒体看来,API严重缺乏API。 – Tom 2011-01-23 11:06:19

+0

Android未提供任何图书馆做这件事。 – sravan 2013-02-19 05:11:22

回答

3

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

如果这是您想要查看的内容,请在http://b.android.com处提交功能请求。这也与现有的issue 4541切线相关。

+2

Google是否提供任何工具来评估识别器或语言模型的准确性?我们通常通过运行预先录制的已知转录样本来评估识别器的准确性。有没有一种方法可以测试Google识别器,以了解它是否对我的应用程序有效?我还想根据预先记录的样本测试两种语言模型,以确定哪种模型提供了更好的准确性。有什么办法可以做到这一点? – 2010-07-30 14:35:03

+0

不公开,不。 – 2010-08-02 22:47:22

+1

没有任何方法可以从麦克风回送给定的声音吗?像套接字/文件/流重定向? – Snicolas 2013-11-24 22:10:10

1

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

以下示例代码应在Activity中定义,因为SpeechRecognizer的方法必须在主应用程序线程中运行。您还需要将RECORD_AUDIO权限添加到您的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); 
    } 
 

您还可以通过扩展RecognitionService定义自己的语音识别服务,但是这超出了这个答案:)

+0

有没有人试过这个,并取得成功?您是否需要等待整个播放持续时间才能识别长音频文件? – rmooney 2013-06-26 21:11:50

+0

虽然这是前段时间发布的,但我已经证实(有更多的代码),这个想法确实有效(在Android N上)。调用'startListening()'后,等待'RecognitionListener.onReadyForSpeech()'回调并播放音频剪辑(大声!)。 – adelphus 2016-11-08 12:26:46

+0

@adelphus你能上传源代码吗? – Hamza 2018-03-07 01:30:00

10

我得到了运作良好有语音识别和音频录制解决方案的范围。下面是我创建的一个简单的Android项目link,以显示解决方案的工作。另外,我在项目中放置了一些打印屏幕来说明应用程序。

我会尽量简单地解释我使用的方法。我在该项目中结合了两个功能:Google Speech API和Flac录制。

Google Speech API通过HTTP连接调用。 Mike Pultz提供了有关API的更多详细信息:

“(...)新的[Google] API是一个全双工流API,这意味着它实际上使用两个HTTP连接 - 一个POST请求上传作为“实时”分块流的内容,以及访问结果的第二个GET请求,这对于较长的音频采样或流式音频更为合理。“

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

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

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

我创建的项目具有使其工作的基本原则,并且可以针对特定情况进行改进。为了使它在不同的场景下工作,有必要获得Google Speech API密钥,该密钥由Google Chromium-dev组的一部分获得。我在该项目中留下了一把钥匙,以显示它正在工作,但我最终会将其删除。如果有人需要更多关于它的信息,让我知道原因,我不能在这篇文章中添加2个以上的链接。

+0

@Isantsan我需要实现类似的功能,但我发现的第二部分(记录在FLAC)真的很难,你能帮助我。我也研究过AudioBoo项目,但不知道从哪里开始。 – 2016-01-15 12:01:03

+0

实际上有变化的API和上面的代码崩溃时,当我试图测试,这是真的可能有记录的声音以及在android – KOTIOS 2016-02-29 04:35:30

+0

测试语音如果API已更改,该项目可能需要一些调整。我有一段时间没有跟上API。然而,当这个答案发布时,一切都如上所述。 – lsantsan 2016-03-04 04:15:09