govpr,基於golang實現的gmm-ubm演算法的說話人識別(聲紋識別)引擎
再次推下自己的開源專案 govpr,基於golang實現的gmm-ubm演算法的說話人識別(聲紋識別)引擎,後續考慮推出java版本,c/c++版本,甚至是swift版本。gmm-ubm在聲紋識別上已經是比較落後的演算法了,完全沒法跟現在的i-vector對比,但是gmm-ubm仍然是基礎,也是聲紋識別入門的重中之重。如果條件允許,也有可能用go再去寫一些i-vector演算法,甚至是DNN演算法的語音識別開源專案。
進入主題:
簡介
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
}
前幾天已上傳基於beego和mysql簡單實現的httpapi,功能實現比較倉促所以很戳,有空再優化哈,順便詳細寫寫文件~~
相關文章
- 好玩的github專案-golang實現的gmm-ubm演算法的說話人識別(聲紋識別)引擎GithubGolang演算法
- govpr--golang實現的gmm-ubm演算法說話人識別引擎Golang演算法
- 基於MATLAB的指紋識別演算法模擬實現Matlab演算法
- 基於TensorflowLite的人聲識別在端上的實現
- 基於MindSpore實現BERT對話情緒識別情緒識別
- 虹膜識別和眼紋識別的區別 虹膜識別和眼紋識別哪個好?
- 工信部:支援構建基於指紋識別、人臉識別等技術的網路身份認證
- 基於Android平臺實現人臉識別Android
- 人工智慧界的逃犯剋星不止人臉識別,聲紋識別也能助力公安追逃人工智慧
- 只對你有感覺:谷歌用聲紋識別實現定向人聲分離谷歌
- 模式識別hw2-------基於matconvnet,用CNN實現人臉圖片性別識別模式CNN
- 【基於PCA的人臉識別演算法】從QR分解到PCA,再到人臉識別PCA演算法
- 別隻盯著谷歌亞馬遜,美國國安局才是聲紋識別的「無形之手」谷歌亞馬遜
- 如何基於實時聲紋變聲實現對聲音的“克隆”
- 基於OCaml的識別程式
- CMS指紋識別
- android 簡單實現指紋識別功能Android
- C++ LibCurl實現Web指紋識別C++Web
- 谷歌再獲語音識別新進展:利用序列轉導來實現多人語音識別和說話人分類谷歌
- 知物由學 | 聽聲辨人,看聲紋識別技術如何保障內容安全?
- 聲紋識別前景可好,初創公司聲揚科技獲千萬融資
- 如何理解並實現一個簡單的人臉識別演算法(下):人臉識別演算法
- Mars演算法實踐——人臉識別演算法
- matlab實現人臉識別(數學基礎原理)Matlab
- 基於深度學習的人臉識別系統系列(Caffe+OpenCV+Dlib)——【六】設計人臉識別的識別類深度學習OpenCV
- 基於mtcnn/facenet/tensorflow實現人臉識別登入系統CNN
- 基於Yolov3的口罩識別YOLO
- 【實戰】基於OpenCV的水錶字元識別(OCR)OpenCV字元
- 生物特徵識別之指紋識別,偽造,指紋裝置缺陷設計特徵
- 除了菊紋識別,AI還有哪些奇奇怪怪的識別能力?AI
- [OpenCV實戰]1 基於深度學習識別人臉性別和年齡OpenCV深度學習
- 機器學習實戰-SVM模型實現人臉識別機器學習模型
- 純前端實現人臉識別-提取-合成前端
- 如何設計APP的指紋識別功能APP
- Android 指紋識別,指紋支付demoAndroid
- 基於MATLAB公式識別Matlab公式
- Python實現AI影像識別-身份證識別PythonAI
- 識別特定影象的AI玻璃來了,未來或可用於人臉識別AI