FreeSR (A Free Library for Speaker Recognition),免費的聲紋識别/性别識别SDK,支援Android/Windows/Linux等平台。
https://github.com/NonDay/FreeSR
1.實作算法:
gmm-ubm/i-vector/x-vector
2.功能
說話人識别(驗證),包括注冊/識别兩個階段 (gmm-ubm/i-vector)
性别識别,根據語音片段判斷性别(gmm-ubm/x-vector)
3.支援平台
Windows/ Linux/ Android
4.使用方法
4.1Windows
4.2 Android
通過Android Studio 加載.so庫,在項目裡建立libs檔案夾,根據debug/release選擇對應的so庫,拷貝目錄 arm64-v8a、armeabi-v7a、x86、x86_64到libs檔案夾下

在build.gradle檔案裡添加
android {
......
sourceSets{
main{
jniLibs.srcDirs = ['libs']
}
}
}
建立Package(com.freesr),将以下檔案拷貝到該package目錄
可進行說話人性别識别以及說話人識别,支援gmm-ubm和ivector,更詳細的方法可參考java檔案:
import com.freesr.*;
static {
System.loadLibrary("freesr");
}
//1. gener recognition
int sample_rate = 8000;
SpeakerRecognizerGMM SpkRec = new SpeakerRecognizerGMM(sample_rate);
ArrayListStr spk_models = new ArrayListStr();
ArrayListStr spk_names = new ArrayListStr();
spk_names.add("female");
spk_models.add("female.model");
spk_names.add("male");
spk_models.add("male.model");
boolean init = SpkRec.Init("freesr-gender-model.bin", spk_names, spk_models);
if(!init)
{
// failed to init
return ;
}
String rec_result = SpkRec.RecognizeSpeaker("english.wav");
double score = SpkRec.GetScore()
//2. speaker recognition
int sample_rate = 8000;
// SpeakerRecognizerIVector SpkRec = new SpeakerRecognizerIVector(sample_rate)
// boolean init = SpkRec.Init("freesr-ivector-model.bin", spk_names, spk_models);
SpeakerRecognizerGMM SpkRec = new SpeakerRecognizerGMM(sample_rate);
boolean init = SpkRec.Init("freesr-ubm-model.bin", spk_names, spk_models);
if(!init)
{
// failed to init
return ;
}
ArrayListStr fpaths = new ArrayListStr();
fpaths.add("english.wav");
fpaths.add("english.wav");
......
String reg_name = "spkA";
String reg_path = "spkA.model"
boolean ret = SpkRec.RegisterSpeaker(fpaths,reg_name,reg_path)
String rec_result = SpkRec.RecognizeSpeaker("english.wav");
double score = SpkRec.GetScore()
Android示例工程:https://download.csdn.net/download/u012594175/12296957
Android相關so檔案下載下傳位址:https://share.weiyun.com/5O9BdLP
位址:https://github.com/NonDay/FreeSR