精华内容
下载资源
问答
  • 说话人性别识别

    2020-06-07 20:19:53
    让人类来分辨说话人的性别是件十分简单的事情,对于机器来说也不是什么难事,下面介绍使用BiRNN进行说话人性别识别。 1. 性别判定特征 说道男女声音的差异很多人第一反应就是音高,这里的音高指的是基音的频率,...

    让人类来分辨说话人的性别是件十分简单的事情,对于机器来说也不是什么难事,下面介绍使用BiRNN进行说话人性别识别。

    1. 性别判定特征

    说道男女声音的差异很多人第一反应就是音高,这里的音高指的是基音的频率,我们采用基音周期作为判决男声女声的特征之一,如下图所示。我们可以看到女性的基音周期和男性基音周期有一定的差别。

    下一个特征我们使用常用于语音信号处理的梅尔频率倒谱系数,这里我们使用13个梅尔滤波器然后将输出结果进行一阶差分得到12维动态的梅尔频率倒谱系数,因此我们的MFCC特征总共有13+12=25维,  如下图所示。

     

    我们再添加两个特征分别为谱质心和谱对比度特征。其中谱质心描述了声音的明亮度,具有阴暗、低沉品质的声音倾向有较多低频内容,谱质心相对较低,具有明亮、欢快品质的多数集中在高频,谱质心相对较高

     谱对比度将频谱的每个帧都分为子带。对于每个子带,通过将顶部分位数的平均能量(峰值能量)与底部分位数的平均能量(谷能量)进行比较来估计能量对比。高对比度值通常对应于清晰的窄带信号,而低对比度值则对应于宽带噪声。

    这样我们就有了用于判定说话人性别的特征集{基音周期, MFCC, 谱质心,谱对比度}一共32维。

    2. 模型训练 

    在这个任务中静音帧部分的特征是没有意义的,因此我们需要对数据进行预处理删除样本中的静音部分。但是这会带来一个问题——数据集中的每个样本长度不一样。为了解决这个问题,我们需要使用Pytorch中的pad_sequence, pack_padded_sequence, pad_packed_sequence,下面简单介绍一下它们的用法。在Dataloader中有一个collate_fn的属性,默认的collate_fn函数是要求一个batch中的样本都具有相同size,但是我们的样本长度不一样,这里我们就需要自定义一个函数传给collate_fn。

    
    def pad_collate(batch):
        x, y, lens = zip(*batch)
        x_pad = pad_sequence(x, batch_first=True, padding_value=0)
        return x_pad, torch.tensor(y, dtype=torch.float32), torch.tensor(lens)

    这样每个batch的输出大小都是一样的,这里注意我们的每个batch包含三个内容,第一是用于检测性别的特征,第二是每个样本对应的标签,第三是每个样本的长度,以上就解决了数据加载过程中样本长度不一致的问题。

    在模型前向传播的过程中,我们需要将样本特征和每个样本的长度使用pack_padded_sequence进行“打包”成batch,然后将神经网络的输出使用pad_packed_sequence进行“解包”得出真正的输出。因此我们的网络定义如下,使用了双向LSTM。这里我们就解决了BP过程中样本长度不一致的问题。

    
    class GCNet(nn.Module):
        def __init__(self, in_dim=32, hidden_dim=64, n_layer=2, n_class=1):
            super(GCNet, self).__init__()
            self.n_layer = n_layer
            self.hidden_dim = hidden_dim
            self.lstm = nn.LSTM(in_dim, hidden_dim, n_layer, batch_first=True, bidirectional=True)
            self.classifier = nn.Linear(2 * hidden_dim, n_class)
    
        def forward(self, x, lens):
            lens = torch.as_tensor(lens, dtype=torch.int64)
            x = pack_padded_sequence(x, lens, batch_first=True,enforce_sorted=False)
            out, _ = self.lstm(x)
            out, lens = pad_packed_sequence(out, batch_first=True)
            out = out[:, -1, :]
            out = self.classifier(out)
            out = F.torch.sigmoid(out)
            return out

                                                                

                                         

    展开全文
  • windows 10; vs2013; 说话人识别和说话人性别识别SDK,利用GUMM-UBM算法实现。https://blog.csdn.net/u012594175/article/details/89003815
  • android版本说话人性别识别以及声纹识别,对应博客https://blog.csdn.net/u012594175/article/details/89003815
  • 利用GMM-UBM算法,可以进行说话人识别,或者性别识别,可以参考<声纹识别之Alize入门教程(二):GMM-UBM>。 进行性别识别的时候,将不同的性别视为不同的说话人即可。 1.Windows Win10 and VS2013。 新建空...

    根据语音片段进行性别判断,以及说话人识别的SDK,c/c++实现。

    利用GMM-UBM算法,可以进行说话人识别,或者性别识别,可以参考<声纹识别之Alize入门教程(二):GMM-UBM>。

    进行性别识别的时候,将不同的性别视为不同的说话人即可。

    1.Windows 

    Win10 and VS2013。

    新建空项目=>选择项目,右键属性=>c/c++=>常规=>附加包含目录添加

    属性=>链接器=>输入=>附加依赖项

    属性=>链接器=>常规=>附加库目录:..\..\lib\Debug or ..\..\lib\Release 根据当前新建项目类型进行选择

    属性=>c/c++=>代码生成=>运行库:根据当前新建项目类型进行选择,如果是Debug选择/MTd;Release选择/MT

    1.1性别识别

    #include <iostream>
    #include "speaker_recognizer.h"
    using namespace std;
    int main(int argc, char *argv[])
    {
    	SpeakerRecognizer spk;
    	bool ret = spk.Init("ubm.gmm", { "female.gmm", "male.gmm" }, { "female", "male" });
    	if (!ret)
    		return -1;
    	std::string gender = spk.RecognizeSpeaker("BAC009S0002W0123.wav");
    	std::cout << gender << std::endl;
    	return 0;
    }

    1.2说话人识别

    #include <iostream>
    #include "speaker_recognizer.h"
    using namespace std;
    
    int main(int argc, char *argv[])
    {
    	SpeakerRecognizer spk;
    	bool ret = spk.Init("ubm.gmm");
    	if (!ret)
    		return -1;
    
    	ret = spk.RegisterSpeaker("BAC009S0002W0123.wav", "s2");
    	ret = spk.RegisterSpeaker("BAC009S0003W0121.wav", "s3");
    
    	std::string res = spk.RecognizeSpeaker("BAC009S0003W0122.wav"); // s3
    	std::cout << res << std::endl;
    	return 0;
    
    }
    

     

    2.Android

    通过Android Studio 加载.so库,在项目里新建libs文件夹,拷贝目录 arm64-v8a、armeabi-v7a、x86、x86_64到libs文件夹下

    在build.gradle文件里添加

    android {
    sourceSets{
            main{
                jniLibs.srcDirs = ['libs']
            }
        }
    }

    新建Package(com.spkrec),将以下文件拷贝到该package目录

    SpeakerRecognizer.java
    spkrec_module.java
    spkrec_moduleJNI.java
    SWIGTYPE_p_std__vectorT_std__string_t.java
    vectors.java

     

     

    2.1性别识别

    整个流程以及API同windows c++版本,进行说话人识别可自行修改代码。

    import com.spkrec.*;
    static {// 加载so文件
            System.loadLibrary("spkrec");   }
    String recordDir = String.format(Locale.getDefault(), "%s/Record/",Environment.getExternalStorageDirectory().getAbsolutePath());
    SpeakerRecognizer SpkRec = new SpeakerRecognizer();
    // 模型路径
    vectors reg_path = new vectors();
    reg_path.add(recordDir+"female.gmm");
    reg_path.add(recordDir+"male.gmm");
    // 模型对应的性别
    vectors reg_names=new vectors();
    reg_names.add("female");
    reg_names.add("male");
    boolean init_ret =  SpkRec.Init(recordDir+"ubm.gmm",reg_path,reg_names);
    if(!init_ret) // fail
    {
    return ...
    }
    String recg_ret = SpkRec.RecognizeSpeaker(result.getAbsolutePath());// 传入wav文件路径

    使用网友的demo简单调试了一下几个API,主要就是在MainActivity.java添加了以上部分代码,程序启动的时候将三个gmm文件拷贝到了recordDir目录,生成了识别性别的小例子,如果识别结果为空的话,退出重新再打开app应该就好了。录音时间长一点,声音大一点,应该效果好一点:(。

    android代码实在不会写,感谢网友的demo:

    https://www.jianshu.com/p/c0222de2faed  

    https://github.com/zhaolewei/ZlwAudioRecorder

    修改后的Android Studio工程,以及.so和apk文件下载地址:https://download.csdn.net/download/u012594175/11201103

    https://github.com/NonDay/FreeSR

    Windows完整代码下载地址  https://download.csdn.net/download/u012594175/11088482

    声纹识别交流QQ群:875705987

    展开全文
  • 基于MFCC和SVM的说话人性别识别 建立了普通话语音性别数据库 ,提出联合梅尔频率频谱系数(Mel-frequency Cepstrum Coefficients,MFCC)的特征提取方法和支持向量机(Support Vector Machine,SVM)的分类方法进行说话人...
  • 建立了普通话语音性别数据库,提出联合梅尔频率频谱系数(Mel
  • 本项目建立了一个小的语音库(8男8女),编写mfcc函数提取出语音的mfcc特征,然后利用svm进行训练和测试,实现性别识别,并创建gui进行功能展示,正确率为93.75%。本代码功能尚比较简单,有待继续完善。
  • 提取声音特征的文件,代码可参考:http://blog.csdn.net/u011599639
  • 基于C++实现的ivector说话人识别SDK

    千次阅读 2019-04-09 20:16:52
    根据语音片段进行说话人识别的SDK,c/c++实现。 利用ivector算法,进行说话人识别,包含...环境配置参考《说话人识别和说话人性别识别SDK-通过语音判断说话人,及说话人的性别》。因为ivector比gmm-ubm计算量更大,...

    根据语音片段进行说话人识别的SDK,c/c++实现。

    利用ivector算法,进行说话人识别,包含了一个基础的ivector模型(6M),效果一般优于gmm-ubm算法。

    wav文件不要超过1M大小。

    1.Windows 

    Win10 and VS2013

    环境配置参考《说话人识别和说话人性别识别SDK-通过语音判断说话人,及说话人的性别》。因为ivector比gmm-ubm计算量更大,debug模式可能会比较慢。

    // main.cpp

    #include <iostream>
    #include "speaker_recognizer.h"
    int main()
    {
    	SpeakerRecognizer spk;
    	bool ret = spk.Init("iv.model");
    	if (!ret)
    		return -1;
    
    	ret = spk.RegisterSpeaker("BAC009S0002W0123.wav", "s2");
    	
    	ret = spk.RegisterSpeaker("BAC009S0003W0121.wav", "s3");
    
    	std::string rec = spk.RecognizeSpeaker("BAC009S0003W0122.wav"); // s3
    	std::cout << rec << std::endl;
    
    	return 0;
    }

    2.Android

    待更新...

     

    https://github.com/NonDay/FreeSR

    完整代码下载地址:https://download.csdn.net/download/u012594175/11100773

    声纹识别交流QQ群:875705987

    展开全文
  • function varargout = GUI(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @...
    function varargout = GUI(varargin)
    gui_Singleton = 1;
    gui_State = struct('gui_Name',       mfilename, ...
                       'gui_Singleton',  gui_Singleton, ...
                       'gui_OpeningFcn', @GUI_OpeningFcn, ...
                       'gui_OutputFcn',  @GUI_OutputFcn, ...
                       'gui_LayoutFcn',  [] , ...
                       'gui_Callback',   []);
    if nargin && ischar(varargin{1})
        gui_State.gui_Callback = str2func(varargin{1});
    end
     
    if nargout
        [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
    else
        gui_mainfcn(gui_State, varargin{:});
    end
    function GUI_OpeningFcn(hObject, eventdata, handles, varargin)
    handles.output = hObject;
    guidata(hObject, handles);
     
    function varargout = GUI_OutputFcn(hObject, eventdata, handles) 
    varargout{1} = handles.output;
     
     
    function pushbutton1_Callback(hObject, eventdata, handles)
    set(handles.text1,'Visible','off');
    [filename pathname]=uigetfile({'*.WAV';'*.*'},'¿ªÊ¼');   %%读取音频文件
    str=[pathname filename];
    [Y,fs]=audioread(str);
     
    L=length(Y);        %原信号点数
    N=fix(fs*0.015);    %帧长
    frameN=fix(L/N);    %帧数
    Y=Y/max(abs(Y));        %归一化
     
    %%
    %%%%%%短时能量%%%%%%%%
    En=zeros(1,frameN);
    Mn=zeros(1,frameN);
    for i=1:frameN
        Yn=Y(((i-1)*N+1):i*N);
       En(i)=sum(Yn.*Yn);
    end
    %%
    %%%%%%浊音提取%%%%%%%%
    Emax=max(En);
    ref=0.08*Emax;
    for i=1:frameN
     if(En(i)>ref)
        Mn(i)=1;     
     end
    end
    %%
    %%%%%%基音频率%%%%%%%%
    for i=1:frameN
        if(Mn(i)==1)
        Yn=Y(((i-1)*N+1):i*N);   
        Yn0=Yn;
        R=Relation(Yn0,N);
        [Rmax1,Rdot1]=max(R(18:160));
        f1(i)=fs/(Rdot1+17);
       
    end
    end
     %%%%%%某帧采样点%%%
    for i=140:140
        if(Mn(i)==1)
        Yn=Y(((i-1)*N+1):i*N);   
        Yn0=Yn;
        R1=Relation(Yn0,N);   
        end
    end
    
    axes(handles.axes1);
    plot(Y),xlabel('帧数'),ylabel('幅度'),title('原信号');   
    axes(handles.axes2);
    plot(En),xlabel('帧数'),ylabel('En'),title('短时能量');
    axes(handles.axes3); 
    plot(f1),xlabel('帧数'),ylabel('f'),title('基音频率');
    axes(handles.axes4);
    plot(R1),xlabel('帧数'),title('自相关');
    
    %%%%男女声判断%%%%
    sum1=0;
    s=0;
    for i=1:frameN
        if(Mn(i)==1)
       s=s+1;
       sum1=sum1+f1(i);
        end
    end
    Final=mean(sum1);
    if Final>200
       set(handles.text2,'String','判断结果:女声');
    else
       set(handles.text2,'String','判断结果:男声');
    end
     
    function pushbutton2_Callback(hObject, eventdata, handles)
    close;
    

    自相关函数另外编写(放在主程序里运行时间长)

    function Re=Relation(X,N)
    for i=0:(N-1)
        Re(i+1)=0;
        for n=1:(N-i)
            Re(i+1)=Re(i+1)+X(n)*X(n+i);
        end
    end
    

    展开全文
  • 开集文本无关的说话人识别 开集文本无关的说话人识别旨在利用语音技术来检测某一语音是否来自系统中的已注册人员,并确定是来自其中的哪一名说话人。该任务也可以称之为多目标说话人检测。相应的解决方法包含两个...
  • 说话人识别的基于MATLAB GUI的界面制作,程序已经经过验证可以实现,里面包含了语音识别的文件库,也可以自己建立文件库进行语音识别,主要用了DTW和VQ的说话人识别
  • Robust Speaker Recognition from Distant Speech under Real Reverberant Environments Using Speaker Embeddings ...我们使用三种不同的说话人识别系统,包括传统的基于UBM i-vector的系统,基于DNN...
  • 说话人识别应用广泛,现已应用到通信、消费电子产品等各个领域。本文将把语音进行数字化传输、存储、然后进行识别等。说话人识别系统主要包括预处理、特征提取、训练和识别四个模块。其中预处理和特征提取尤为重要。...
  • 通过神经网络对声音进行分类,比对声纹特征,实时判断说话人性别特征,识别准确率高达99%以上,并可应对各种不同口音,尤其适用于无法进行人脸识别的场合...多年来,人脸性别因为实际场景的需求,如在身份认证、...
  • 在kaldi说话人识别示例(egs/sre10,egs/sre16)中,数据总共有两大类,一是训练集(training),二是评估数据集(evaluation)。对于评估数据集又分为两类,一是用来注册(enrollment)的数据集,二是测试(test)集...
  • 为了简化系统模型训练方法,提高性别识别系统的整体效率,提出了一种基于改进Citation-KNN算法的说话人性别识别方法。该方法将连续语音切分,训练每段语音的高斯混合模型(Gaussian Mixture Model,GMM)作为多示例包,其...
  • 为了简化系统模型训练方法,提高性别识别系统的整体效率,提出了一种基于改进Citation-KNN算法的说话人性别识别方法。该方法将连续语音切分,训练每段语音的高斯混合模型(Gaussian Mixture Model,GMM)作为多示例...
  • 说话人识别之GMM-UBM系统

    千次阅读 2019-07-17 09:10:06
    GMM-UBM, 最经典代表作: Speaker Verification Using Adapted Gaussian Mixture Models ...一:说话人识别流程 先进行特征提取,然后训练模型,最后是打分判决. 这其中特征提取包括 预加重,分帧加窗,傅里叶变换...
  • 学习说话人识别和验证的判别特征

    千次阅读 2018-11-15 19:37:21
    学习说话人识别和验证的判别特征 摘要 任何文本独立的说话者识别和/或验证系统的成功依赖于系统学习辨别特征的能力。 在本文中,我们提出了一种基于流行的非常深VGG [1] CNN的卷积神经网络(CNN)架构,通过关键...
  •  本文主要是对自动说话人识别技术的概述,重点强调文本无关的说话人识别技术。说话人识别已经研究了几十年。我们给出了经典和先进的说话人识别方法。我们从自动说话人识别基础开始谈起,主要从特征提取到说话人建模...
  • 从零开始使用CNN进行性别识别 我们使用CNN来预测30位说话者(15位男性和15位女性)中的性别,我们从头开始设计CNN,而无需使用任何tensorflow或keras库,并且在对模型从未听过的说话者性别进行分类时获得了93.47%的...
  • VoxCeleb2:深度说话人识别

    千次阅读 2018-11-17 20:08:06
    现有说话人识别数据集通常受到以下一个或多个限制:(i)它们是在受控条件下接收的(例如,来自电话[23,24]或声学实验室[25,26,27]), (ii)它们是手动注释的,因此尺寸有限[8],或(iii)社区不能免费获取[28,27]...
  • 本文介绍基于朴素贝叶斯分类器的语音性别识别,本文基于kaggle上的一个数据集,采用朴素贝叶斯分类器,实现了通过语音识别说话人性别的功能。文章的主要内容包括背景说明、数据集介绍 、代码实现以及实验与结果分析...
  • 论文 论文:TIME DELAY DEEP NEURAL NETWORK-BASED UNIVERSAL BACKGROUND MODELS FOR SPEAKER RECOGNITION 摘要   DNN被引入i-vector说话人识别系统并取得了显著的性能提升。
  • 微软说话人识别工具箱1 (MSR Identity Toolbox) 是由微软研究院开 源的声纹识别工具,使用 MATLAB 语言编写。主要包含了 GMM-UBM 和 I-Vector 两种声纹识别核心算法源代码以及说明文档,但是并不涉及特征提 取、语音...
  • 文章还引入了VoxCeleb2数据集,它比任何说话人识别数据集都要大好几倍,并对VoxCeleb1数据集进行了重新定位,使该整个数据集可以作为说话人验证任务的测试集。 本文已整理pdf文件及word版本,如有需要可私信联系。...
  • 人脸实时情绪与性别识别

    千次阅读 2017-10-19 16:22:25
    最近弄一个情绪识别与性别识别的东东。 opencv + keras opencv用于人脸检测 keras用于训练出识别模型数据集用于kaggle的(FER2013)CNN进行训练。代码如下:import cv2 import sys import json import time ...
  • Note: ...性别比例分布极不平衡 采样率一样么?(16k?44.1K?) 音量是否有过大过小情况? 语速是否有过快过慢情况? 时长差异大么? 是否有情绪变化包含在内? 是否有仿冒攻击情况?
  • 语音识别识别性别

    千次阅读 2020-10-27 18:21:27
    广告关闭腾讯云双11爆品提前享,精选热门... 腾讯云语音识别服务开放实时语音识别、一句话识别和录音文件识别三种服务形式,满足不同类型开发者需求... 语音识别 简介 腾讯云语音识别 为企业提供极具性价比的语音...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,407
精华内容 962
关键字:

说话人性别识别