引言
现阶段,语音自动识别功能已趋于完善,对与大部分用户来说,能说能听足矣!在说听的同时还能看,岂不美哉?对此,Google提供了语音转为文字的应用——Cloud Speech API。本文将从使用该API的前提条件,注意事项,在.net开发环境下实现从本地读取音频文件解析为文字,从Google Cloud Storage中读取音频文件解析文字,以及上传本地音频文件到Google Cloud Storage。
调用API前提条件
一. 既然是用Google的API,在内地你首先保证能(fq)访问Google官网,具体操作此处就省略操作关于翻墙软件,代理服务的文字。
二. 注册Google帐号,登录Google Cloud Platform,创建项目,在API管理器中添加项目凭据。凭据1为服务账号密匙,OAuth客户端ID。其具体操作见文档–Google Cloud Speech API 调用注意事项,里面有详细操作步骤及步骤截图。因该API为付费产品,需在创建项目后对其付费,Google推出免费60天使用及300刀的赠金,对与初次研究者来说就是注册Google云平台的事罢了。
三.满足上面两条件,基本可以保证对一定规则的音频文件调用Cloud Speech API后转换成文字。对与音频文件的要求如下:
1.音频的编码格式:1声道,PCM;
2. 采样频率:16000HZ;
3. 读取本地的音频文件播放时长小于60s,读取云存储中的音频文件播放时长小于80min。
以上条件是最基本的,对于其它详细内容请访问该地址。
四.在VS2015中使用该接口,首先需要安装并引用如下DLL到项目中:
获取以上DLL方式:
1.通过在项目引用中点击Nuget程序包中搜寻Dll名字进行下载安装,
2.通过Nuget的程序包管理器控制平台输入命令进行安装。
命令有Install-Package Google.Apis;Install-Package Google.Apis.Core;Install-Package Google.Apis.CloudSpeechAPI.v1beta1等。
如果安装或下载均不方便,可以从这里获取一系列DLL。完成以上步骤后,接下来就用代码展示该API的魅力吧。
读取本地音频文件转换为文字
注:如下Demo是windows应用程序,所有方法都为static
- 创建类型为CloudSpeechAPIService的方法,目的是通过环境变量获取Google的凭证,连接在云平台建立的项目。PS:如果此方法出现异常,请查看前提条件二。
static public CloudSpeechAPIService CreateAuthorizedClient()
{
GoogleCredential credential =GoogleCredential.GetApplicationDefaultAsync().Result;//读取环境变量中的GOOGLE_APPLICATION_CREDENTIALS
if (credential.IsCreateScopedRequired)
{
credential = credential.CreateScoped(new[]
{
CloudSpeechAPIService.Scope.CloudPlatform
});//获取认证
}
return new CloudSpeechAPIService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "DotNet Google Cloud Platform Speech Sample",
});
}
2.读取本地音频文件,调用Cloud Speech API进行文字转换。ps:音频文件格式最好为1声道PCM,播放长度小于60s,否则不易获取正确转换结果。
static public void Main(string[] args)
{
var service = CreateAuthorizedClient();//获取云服务认证
string audio_file_path = "本地文件路径";
//配置参数
var request = new Google.Apis.CloudSpeechAPI.v1beta1.Data.SyncRecognizeRequest()
{
Config = new Google.Apis.CloudSpeechAPI.v1beta1.Data.RecognitionConfig()
{
Encoding = "LINEAR16",//编码格式
SampleRate = 16000,//采样频率
LanguageCode = "en-US"//英文播放内容
//LanguageCode = "cmn-Hans-CN"中文播放内容
},
Audio = new Google.Apis.CloudSpeechAPI.v1beta1.Data.RecognitionAudio()
{
Content = Convert.ToBase64String(File.ReadAllBytes(audio_file_path))//读取文件转换为Base64字符串
}
};
// 配置完成
// 调用GloudSpeechAPI进行请求
StringBuilder sb = new StringBuilder();
Console.WriteLine("Starte Time :" + startTime);
try
{
var asyncResponse = service.Speech.Asyncrecognize(request).Execute();
var name = asyncResponse.Name;
Google.Apis.CloudSpeechAPI.v1beta1.Data.Operation op;
do
{
Console.WriteLine("Waiting for server processing...");
Thread.Sleep(1000);
op = service.Operations.Get(name).Execute();
if (op.Error?.Message != null)
{
Console.WriteLine(op.Error.Message);
}
} while (!(op.Done.HasValue && op.Done.Value));
dynamic results = op.Response["results"];
foreach (var result in results)
{
foreach (var alternative in result.alternatives)
{
sb.Append(alternative.transcript);//将转换结果放入StringBuilder中
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
DateTime endTime = DateTime.Now;
var timeTaken = endTime - startTime;
sb.Append("\r\nEnd Time:" + endTime + "\t" + "Time-taken:" + (timeTaken));
Console.WriteLine( sb.ToString());
Console.ReadKey();
// 结束请求
}
通过如上方法,就可以获取到音频文件播放内容。
读取云存储中的音频文件转换为文字及上传本地文件到云存储,在下章内容中具体描述。