Azure OpenAI Service 11 - Azure OpenAI Whisper 介紹和實做串接

Whisper 是 OpenAI 推出的一個語音辨識的模型,而在 Azure OpenAI Service 也推出了這一個模型,所以我們也可以透過 Azure 使用這一個模型來做語音辨識了,後面就來介紹這個模型跟實做串接的程式。

要使用 Whisper 一樣透過 Azure OpenAI Studio 來部署模型,選擇 Whisper 來部署。

我們也可以透過 Azure AI 的 Speech Studio。點選登入之後就會列出帳號底下的 OpenAI 服務,選擇剛剛建立的模型來做測試。

然後選擇謄寫,也就是針對語音來辨識成文字,為了驗證對中文的支持程度,所以用語言辨識,看是否可以正確辨識出來。

選擇了一個語音檔,等了一下子之後就辨識出來了,基本上辨識的都蠻正確的,但是本語音檔後面有一段是空白的,這一段空白的辨識結果也很有趣的被補上了如紅框中的文字,而點到 Jason 也可以看到回傳的 Json 呈現的模樣。

當然還是要來寫點程式,一樣使用官方套件 Azure OpenAI client library for .NET 來開發。

一樣開了 ASP.NET Core Web 的 Razor Page 專案來做測試,畫面上簡單的放上了選取檔案表單並且上傳。

程式部分也很簡單,透過 IFormFile 來接收檔案,然後使用 OpenAIClient 來呼叫 AudioTranscription 方法來呼叫並取得結果。

public async Task<IActionResult> OnPost(IFormFile voicefile)
{
    var apikey = "{your api key}";
    var apiUrl = "https://{your openai endpoint}.openai.azure.com";
    var deploymentName = "{your deploy}";

    var client = new AzureOpenAIClient(new Uri(apiUrl), new AzureKeyCredential(apikey)).GetAudioClient(deploymentName);
	try
	{
    	var transcriptionOptions = new AudioTranscriptionOptions()
    	{
        	ResponseFormat = AudioTranscriptionFormat.Verbose,
    	};

    	AudioTranscription transcription = await client.TranscribeAudioAsync(voicefile.OpenReadStream(), voicefile.FileName, transcriptionOptions);

    	return Content(transcription.Text);
	}
	catch (Exception ex)
	{
    	return Content(ex.Message);
	}
}

最後也得到了辨識的結果了。

完整範例可以到 GitHub 下載。

結論

透過 Azure OpenAI Service 的 Whisper 可以達到不錯的辨識結果,而微軟也有將此模型整合到原本的 Azure AI Speech Service,所以也可以透過對應的 SDK 來開發和使用,而在 Azure OpenAI Service 內的 Whisper 最多只能上傳 25MB 的檔案,所以如果超過 25MB 的語音檔案就可以透過 Speech Service 的批次謄寫功能來處理超過 25MB 的檔案。

參考資料