1. 程式人生 > >Google Cloud Speech API 呼叫注意事項及呼叫方式__.Net版1

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();
            // 結束請求
        }

通過如上方法,就可以獲取到音訊檔案播放內容。
這裡寫圖片描述
讀取雲端儲存中的音訊檔案轉換為文字及上傳本地檔案到雲端儲存,在下章內容中具體描述。