govpr 基于 GMM-UBM 说话人识别引擎(声纹识别) govpr

agolangf • 3960 次点击    
这是一个分享于 的项目,其中的信息可能已经有所发展或是发生改变。
## 简介 govpr是golang 实现的基于 GMM-UBM 说话人识别引擎(声纹识别),可用于语音验证,身份识别的场景. 目前暂时仅支持汉语数字的语音,语音格式为wav格式(比特率16000,16bits,单声道) 安装 go get github.com/liuxp0827/govpr 示例 如下是一个简单的示例. 可跳转至 [example](https://github.com/liuxp0827/govpr/blob/master/example) 查看详细的例子,示例中的语音为纯数字8位数字.语音验证后得到一个得分,可设置阈值来判断验证语音是否为注册训练者本人. <pre class="brush:cpp ;toolbar: true; auto-links: false;">package main import (     &#34;github.com/liuxp0827/govpr&#34;     &#34;github.com/liuxp0827/govpr/log&#34;     &#34;github.com/liuxp0827/govpr/waveIO&#34;     &#34;io/ioutil&#34; ) type engine struct {     vprEngine *govpr.VPREngine } func NewEngine(sampleRate, delSilRange int, ubmFile, userModelFile string) *engine {     return &amp;engine{         vprEngine: govpr.NewVPREngine(sampleRate, delSilRange, ubmFile, 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 &lt; 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(&#34;vpr score: %f&#34;, Score)     return nil } func main() {     log.SetLevel(log.LevelDebug)     vprEngine := NewEngine(16000, 50, &#34;../ubm/ubm&#34;, &#34;model/test.dat&#34;)     trainlist := []string{         &#34;wav/train/01_32468975.wav&#34;,         &#34;wav/train/02_58769423.wav&#34;,         &#34;wav/train/03_59682734.wav&#34;,         &#34;wav/train/04_64958273.wav&#34;,         &#34;wav/train/05_65432978.wav&#34;,     }     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(&#34;wav/verify/34986527.wav&#34;)     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 }</pre>
授权协议:
BSD
开发语言:
Google Go 查看源码»
操作系统:
跨平台
3960 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传