守望者--AIR技术交流

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: ANE FlasCC 炼金术
查看: 191|回复: 0

[音频分析] 声纹识别引擎 govpr

[复制链接]
  • TA的每日心情
    擦汗
    7 天前
  • 签到天数: 431 天

    [LV.9]以坛为家II

    1738

    主题

    2089

    帖子

    12万

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    威望
    447
    贡献
    16
    金币
    50896
    钢镚
    1418

    开源英雄守望者

    发表于 2016-11-9 13:42:12 | 显示全部楼层 |阅读模式

    简介

    govpr是golang 实现的基于 GMM-UBM 说话人识别引擎(声纹识别),可用于语音验证,身份识别的场景. 目前暂时仅支持汉语数字的语音,语音格式为wav格式(比特率16000,16bits,单声道)

    安装

    1
    go get github.com/liuxp0827/govpr

    示例

    如下是一个简单的示例. 可跳转至 example 查看详细的例子,示例中的语音为纯数字8位数字.语音验证后得到一个得分,可设置阈值来判断验证语音是否为注册训练者本人.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    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, 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 < count; i++ {
            err = this.vprEngine.AddTrainBuffer(buffers)
            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
    }

    https://www.oschina.net/img/github_logo.gif") left center no-repeat;">liuxp0827 / govpr

    Watch3 Star47 Fork7

    Voiceprint Recognition by golang — More...

    守望者AIR技术交流社区(www.airmyth.com)
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    
    关闭

    站长推荐上一条 /4 下一条

    QQ|手机版|Archiver|网站地图|小黑屋|守望者 ( 京ICP备14061876号

    GMT+8, 2017-10-18 08:22 , Processed in 1.343750 second(s), 31 queries .

    守望者AIR

    守望者AIR技术交流社区

    本站成立于 2014年12月31日

    快速回复 返回顶部 返回列表