Google Cloud Speech API 调用注意事项及调用方式__.Net版1

引言

现阶段,语音自动识别功能已趋于完善,对与大部分用户来说,能说能听足矣!在说听的同时还能看,岂不美哉?对此,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

  1. 创建类型为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();
            // 结束请求
        }

通过如上方法,就可以获取到音频文件播放内容。
这里写图片描述
读取云存储中的音频文件转换为文字及上传本地文件到云存储,在下章内容中具体描述。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值