声纹识别引擎 govpr

码农软件 · 软件分类 · TTS/语音合成和处理 · 2019-10-04 06:58:22

软件介绍

简介

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

安装

go get github.com/liuxp0827/govpr

示例

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

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[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
}

本文地址:https://www.codercto.com/soft/d/15992.html

算法分析导论(第2版)(英文版)

算法分析导论(第2版)(英文版)

[美]Robert Sedgewick(罗伯特•塞奇威克)、[美]Philippe Flajolet(菲利普•弗拉若莱) / 电子工业出版社 / 2015-6 / 128.00元

《算法分析导论(第2版)(英文版)》全面介绍了算法的数学分析中所涉及的主要技术。涵盖的内容来自经典的数学课题(包括离散数学、初等实分析、组合数学),以及经典的计算机科学课题(包括算法和数据结构)。《算法分析导论(第2版)(英文版)》的重点是“平均情况”或“概率性”分析,书中也论述了“最差情况”或“复杂性”分析所需的基本数学工具。 《算法分析导论(第2版)(英文版)》第 1 版为行业内的经典著......一起来看看 《算法分析导论(第2版)(英文版)》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具