ASRT golang SDK demo (golang 语言识别客户端demo)
生活随笔
收集整理的這篇文章主要介紹了
ASRT golang SDK demo (golang 语言识别客户端demo)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
demo整合了AI檸檬的SDK例程和golang?調(diào)用winmm.dll?實現(xiàn)windows系統(tǒng)下錄音的例程;該例程提供了windows系統(tǒng)下錄音到訪問ASRT?服務(wù)器實現(xiàn)語音識別的思路。
注:golang?調(diào)用winmm.dll 的例程 ,也參考了AI檸檬作者C# 例程“C#基于winmm實現(xiàn)錄音功能”
package mainimport ("fmt""log""syscall""unsafe""github.com/nl8590687/asrt-sdk-go/sdk""os""time""github.com/cryptix/wav" )var (winmm = syscall.MustLoadDLL("winmm.dll")mciSendString = winmm.MustFindProc("mciSendStringW") )func MCIWorker(lpstrCommand string, lpstrReturnString string, uReturnLength int, hwndCallback int) uintptr {i, _, _ := mciSendString.Call(uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(lpstrCommand))),uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(lpstrReturnString))),uintptr(uReturnLength), uintptr(hwndCallback))return i }func main() {fmt.Println("winmm.dll Record Audio to .wav file")i := MCIWorker("open new type waveaudio alias capture", "", 0, 0)if i != 0 {log.Fatal("Error Code A: ", i)}i = MCIWorker("set capture bitspersample 16", "", 0, 0)if i != 0 {log.Fatal("Error Code A1: ", i)}i = MCIWorker("set capture channels 1", "", 0, 0)if i != 0 {log.Fatal("Error Code A2: ", i)}i = MCIWorker("set capture samplespersec 16000", "", 0, 0)if i != 0 {log.Fatal("Error Code A3: ", i)}// i = MCIWorker("set capture bytespersec 32000", "", 0, 0)// if i != 0 {// log.Fatal("Error Code A4: ", i)// }i = MCIWorker("set capture alignment 2", "", 0, 0)if i != 0 {log.Fatal("Error Code A5: ", i)}i = MCIWorker("record capture", "", 0, 0)if i != 0 {log.Fatal("Error Code B: ", i)}fmt.Println("Listening...")time.Sleep(10 * time.Second)i = MCIWorker("save capture mic2.wav", "", 0, 0)if i != 0 {log.Fatal("Error Code C: ", i)}i = MCIWorker("close capture", "", 0, 0)if i != 0 {log.Fatal("Error Code D: ", i)}fmt.Println("Audio saved to mic2.wav")testInfo, err := os.Stat("mic2.wav")checkErr(err)testWav, err := os.Open("mic2.wav")checkErr(err)wavReader, err := wav.NewReader(testWav, testInfo.Size())checkErr(err)fmt.Println("mic2.wav info")fmt.Println(wavReader) //.wav 詳細信息httpDemo() }func httpDemo() {// 初始化host := "127.0.0.1" //ASRT 服務(wù)器地址port := "20001"protocol := "http"sr := sdk.GetSpeechRecognizer(host, port, protocol)// ======================================================// 識別文件filename := "mic2.wav"resultFile, err := sr.RecogniteFile(filename)if err != nil {fmt.Println(err)}for index, res := range resultFile {fmt.Println("Wav文件語音識別結(jié)果 ", index, ":", res.Result)}byteData := sdk.LoadFile(filename)wave, err := sdk.DecodeWav(byteData)if err != nil {fmt.Println(err)}// ======================================================// 識別一段Wave音頻序列result, err := sr.Recognite(wave.GetRawSamples(), wave.FrameRate, wave.Channels, wave.SampleWidth)if err != nil {fmt.Println(err)}fmt.Println("語音識別結(jié)果:", result.Result)// ======================================================// 調(diào)用聲學模型識別一段Wave音頻序列result, err = sr.RecogniteSpeech(wave.GetRawSamples(), wave.FrameRate, wave.Channels, wave.SampleWidth)if err != nil {fmt.Println(err)}fmt.Println("語音識別聲學模型結(jié)果:", result.Result)// ======================================================// 調(diào)用語言模型1pinyinResult := []string{}for i := 0; i < len(result.Result.([]interface{})); i += 1 {pinyinResult = append(pinyinResult, result.Result.([]interface{})[i].(string))}result, err = sr.RecogniteLanguage(pinyinResult)if err != nil {fmt.Println(err)}fmt.Println("語言模型結(jié)果:", result.Result)// ======================================================// 調(diào)用語言模型2sequencePinyin := []string{"ni3", "hao3", "a1"}result, err = sr.RecogniteLanguage(sequencePinyin)if err != nil {fmt.Println(err)}fmt.Println("語言模型結(jié)果:", result.Result) }func checkErr(err error) {if err != nil {panic(err)} }總結(jié)
以上是生活随笔為你收集整理的ASRT golang SDK demo (golang 语言识别客户端demo)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: maya 切换 点、线、面、对象、模式
- 下一篇: 老男孩GO语言线下培训班1期整套教程(完