2021年12月19日 星期日

Azure Cognitive Services - Speech to Text Demo 語音轉文字功能

昨天,在 .net conf 2021,明明講的主題是框架設計的延續 - 套件設計,但其中六七個demo當中,大家看起來最有反應和效果的反而是底下這個語音轉文字的CLI Demo。
enter image description here

影片:

這是一個透過CLI呼叫的語音辨識的服務,挺有趣吧,我只是把它變成command line tools, 也就是CLI工具,這個demo只是一個我想做的語音助理的一半,後半段沒demo出來的是一個語音助理的雛型,也就是透過語言來控制電腦。(還需要整合LUIS以及掛上特定 intent 的 actions)

若想要用語音來控制電腦,第一步當然是辨識語音,你可能沒想到過,現在即便 command line, console app也可以辨識語音(Speech to Text)。

拜 azure cognitive 所賜,如今這已經是簡單到不行的技術。主要的程式碼只有底下這幾行:

async static Task FromMic(SpeechConfig speechConfig)
{
	using var audioConfig = AudioConfig.FromDefaultMicrophoneInput();
	using var recognizer = new SpeechRecognizer(speechConfig, "zh-tw", audioConfig);
	Console.WriteLine("嗨~ 請透過語音下達指令...");
	var result = await recognizer.RecognizeOnceAsync();
	Console.WriteLine($"語音命令 = '{result.Text}' ");
}

我把整套 CLI tools的source code放 github上了:
https://github.com/isdaviddong/demo-listenup-VoiceCommand
當然你得自己換掉 Namespace 與 Azure Cognitive Services 的key。

如果要申請 Azure Cognitive Services 的 語音轉文字服務,可以參考:
https://portal.azure.com/#create/Microsoft.CognitiveServicesSpeechServices

enjoy it~

設定 unit test的code coverage report

在預設的 Azure DevOps Pipeline範本當中,針對 .net core的專案,你可以透過 dotnet task來運行單元測試,使用的指令是 dotnet test。底下是Yaml code, 這是一個很標準的做法:

steps:
- task: DotNetCoreCLI@2
  displayName: Test
  inputs:
    command: test
    projects: '$(Parameters.TestProjects)'
    arguments: '--configuration $(BuildConfiguration)'

但使用預設的dotnet rest,並不會產生code coverage報表,雖然我們並沒有想追求很高的unit test code coverage,但出一下報表對我們來說還是很具有參考價值的。

如果你也想要檢視code coverage報表,可以做底下調整。

step 1: 修改 dotnet test task

steps:
- task: DotNetCoreCLI@2
  displayName: Test
  inputs:
    command: test
    projects: '$(Parameters.TestProjects)'
    arguments: '--configuration $(BuildConfiguration) --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=cobertura'

你會發現在參數的地方,我們加上了 --collect 等敍述,主要是告知 dotnet task運行test的時候,要蒐集相關資訊。

step 2: 增加Publish code coverage results task

steps:
- task: PublishCodeCoverageResults@1
  displayName: 'Publish code coverage from $(Agent.TempDirectory)/**/coverage.cobertura.xml'
  inputs:
    codeCoverageTool: Cobertura
    summaryFileLocation: '$(Agent.TempDirectory)/**/coverage.cobertura.xml'

Publish code coverage results task可以幫助我們把報表跟pipeline的GUI做一個整合,呈現出底下這樣的視覺效果:
enter image description here

如此一來,就有可以參考的 code coverage report囉。

底下是操作影片:

===========

相關課程:

敏捷開發專案管理與Azure DevOps實戰
https://www.studyhost.tw/NewCourses/ALM

熱門文章