Google Cloud Speech API 呼叫注意事項及呼叫方式__.Net版1
引言
現階段,語音自動識別功能已趨於完善,對與大部分使用者來說,能說能聽足矣!在說聽的同時還能看,豈不美哉?對此,Google提供了語音轉為文字的應用——Cloud Speech API。本文將從使用該API的前提條件,注意事項,在.net開發環境下實現從本地讀取音訊檔案解析為文字,從Google Cloud Storage中讀取音訊檔案解析文字,以及上傳本地音訊檔案到Google Cloud Storage。
呼叫API前提條件
一. 既然是用Google的API,在內地你首先保證能(fq)訪問Google官網,具體操作此處就省略操作關於翻牆軟體,代理服務的文字。
二. 註冊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();
// 結束請求
}
通過如上方法,就可以獲取到音訊檔案播放內容。
讀取雲端儲存中的音訊檔案轉換為文字及上傳本地檔案到雲端儲存,在下章內容中具體描述。