govpr--golang实现的gmm-ubm算法的说话人识别(声纹识别)引擎
发布时间:2020-12-16 18:24:43 所属栏目:大数据 来源:网络整理
导读:简介 govpr是golang 实现的基于 GMM-UBM 说话人识别引擎(声纹识别),可用于语音验证,身份识别的场景. 目前暂时仅支持汉语数字的语音,语音格式为wav格式(比特率16000,16bits,单声道) 安装 go get github.com/liuxp0827/govpr 示例 如下是一个简单的示例. 可跳
简介govpr是golang 实现的基于 GMM-UBM 说话人识别引擎(声纹识别),可用于语音验证,身份识别的场景. 安装go get github.com/liuxp0827/govpr 示例如下是一个简单的示例. 可跳转至 example package main import ( "github.com/liuxp0827/govpr" "github.com/liuxp0827/govpr/log" "github.com/liuxp0827/govpr/waveIO" "io/ioutil" ) type engine struct { vprEngine *govpr.VPREngine } func NewEngine(sampleRate,delSilRange int,ubmFile,userModelFile string) *engine { return &engine{ vprEngine: govpr.NewVPREngine(sampleRate,delSilRange,userModelFile),} } func (this *engine) DestroyEngine() { this.vprEngine = nil } func (this *engine) TrainSpeech(buffers [][]byte) error { var err error count := len(buffers) for i := 0; i < count; i++ { err = this.vprEngine.AddTrainBuffer(buffers[i]) if err != nil { log.Error(err) return err } } defer this.vprEngine.ClearTrainBuffer() defer this.vprEngine.ClearAllBuffer() err = this.vprEngine.TrainModel() if err != nil { log.Error(err) return err } return nil } func (this *engine) RecSpeech(buffer []byte) error { err := this.vprEngine.AddVerifyBuffer(buffer) defer this.vprEngine.ClearVerifyBuffer() if err != nil { log.Error(err) return err } err = this.vprEngine.VerifyModel() if err != nil { log.Error(err) return err } Score := this.vprEngine.GetScore() log.Infof("vpr score: %f",Score) return nil } func main() { log.SetLevel(log.LevelDebug) vprEngine := NewEngine(16000,50,"../ubm/ubm","model/test.dat") trainlist := []string{ "wav/train/01_32468975.wav","wav/train/02_58769423.wav","wav/train/03_59682734.wav","wav/train/04_64958273.wav","wav/train/05_65432978.wav",} trainBuffer := make([][]byte,0) for _,file := range trainlist { buf,err := loadWaveData(file) if err != nil { log.Error(err) return } trainBuffer = append(trainBuffer,buf) } verifyBuffer,err := waveIO.WaveLoad("wav/verify/34986527.wav") if err != nil { log.Error(err) return } vprEngine.TrainSpeech(trainBuffer) vprEngine.RecSpeech(verifyBuffer) } func loadWaveData(file string) ([]byte,error) { data,err := ioutil.ReadFile(file) if err != nil { return nil,err } // remove .wav header info 44 bits data = data[44:] return data,nil } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |