UDN-企业互联网技术人气社区

板块导航

浏览  : 1383
回复  : 0

[其它] govpr:Golang 实现的 GMM-UBM 算法的说话人识别引擎

[复制链接]
哥屋恩的头像 楼主
发表于 2016-11-5 20:11:40 | 显示全部楼层 |阅读模式
  简介

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

  安装

  去获得github.com/liuxp0827/govpr

  示例

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

  1.   包主

  2.   进口(

  3.   “ github.com/liuxp0827/govpr ”

  4.   “ github.com/liuxp0827/govpr/log ”

  5.   “ github.com/liuxp0827/govpr/waveIO ”

  6.   “ IO / ioutil ”

  7.   )

  8.   型发动机结构 {

  9.   vprEngine * govpr。VPREngine

  10.   }

  11.   FUNC NewEngine(采样率,delSilRange INT,ubmFile,userModelFile 字符串)* 引擎 {

  12.   回报与引擎{

  13.   vprEngine:govpr NewVPREngine(采样率,delSilRange,ubmFile,userModelFile)

  14.   }

  15.   }

  16.   FUNC (此 * 引擎)DestroyEngine(){

  17.   这一点。vprEngine = 零

  18.   }

  19.   FUNC (此 * 引擎)TrainSpeech(缓冲区 [] [] 字节)错误 {

  20.   VAR ERR 错误

  21.   计数 := LEN(缓冲区)

  22.   为 我 := 0 ; I <计数; 我++ {

  23.   ERR =这一点。vprEngine。AddTrainBuffer(缓冲区[I])

  24.   如果 ERR!= 零 {

  25.   登录。错误(ERR)

  26.   返回 ERR

  27.   }

  28.   }

  29.   推迟这一点。vprEngine。ClearTrainBuffer()

  30.   推迟这一点。vprEngine。ClearAllBuffer()

  31.   ERR =这一点。vprEngine。TrainModel()

  32.   如果 ERR!= 零 {

  33.   登录。错误(ERR)

  34.   返回 ERR

  35.   }

  36.   回 零

  37.   }

  38.   FUNC (此 * 引擎)RecSpeech(缓冲 [] 字节)错误 {

  39.   ERR :=。这个vprEngine。AddVerifyBuffer(缓冲)

  40.   推迟这一点。vprEngine。ClearVerifyBuffer()

  41.   如果 ERR =!无 {

  42.   登录。错误(ERR)

  43.   返回 ERR

  44.   }

  45.   ERR =这一点。vprEngine。VerifyModel()

  46.   如果 ERR!= 零 {

  47.   登录。错误(ERR)

  48.   返回 ERR

  49.   }

  50.   得分 :=。这个vprEngine。GetScore()

  51.   日志。Infof(“ VPR分数:%F ”,分数)

  52.   的回报 为零

  53.   }

  54.   FUNC 主要(){

  55.   日志。执行setLevel(日志。LevelDebug)

  56.   vprEngine := NewEngine(16000,50,“ ../ubm/ubm ”,“模型/ TEST.DAT ”)

  57.   trainlist := [] 字符串 {

  58.   “ WAV /火车/ 01_32468975.wav ”,

  59.   “ WAV /火车/ 02_58769423。 WAV “,

  60.   ” WAV /火车/ 03_59682734.wav “,

  61.   ” WAV /火车/ 04_64958273.wav “,

  62.   ” WAV /火车/ 05_65432978.wav “,

  63.   }

  64.   trainBuffer := 令([] [] 字节,0)

  65.   为 _,文件 := 范围 trainlist {

  66.   BUF,ERR := loadWaveData(文件)

  67.   ,如果犯错!= 零 {

  68.   登录。错误(ERR)

  69.   回报

  70.   }

  71.   trainBuffer = 追加(trainBuffer,BUF)

  72.   }

  73.   verifyBuffer,ERR :=。waveIO WaveLoad(“ WAV /验证/ 34986527.wav ”)

  74.   如果 ERR =!无 {

  75.   登录。错误(ERR)

  76.   回报

  77.   }

  78.   vprEngine。TrainSpeech(trainBuffer)

  79.   vprEngine。RecSpeech(verifyBuffer)

  80.   }

  81.   FUNC loadWaveData(文件 字符串)([] 字节,错误){

  82.   数据,ERR :=。ioutil 的ReadFile(文件)

  83.   ,如果!ERR = 零 {

  84.   回报 为零,ERR

  85.   }

  86.   //删除.WAV头信息44位

  87.   数据=数据[ 44:]

  88.   返回数据,零

  89.   }
复制代码


原文作者:佚名  来源:开发者头条

相关帖子

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

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部