__init__.py 5.93 KB
Newer Older
Anthony Larcher's avatar
Initial  
Anthony Larcher committed
1
# -*- coding: utf-8 -*-
Anthony Larcher's avatar
Anthony Larcher committed
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#
# This file is part of SIDEKIT.
#
# SIDEKIT is a python package for speaker verification.
# Home page: http://www-lium.univ-lemans.fr/sidekit/
#
# SIDEKIT is a python package for speaker verification.
# Home page: http://www-lium.univ-lemans.fr/sidekit/
#    
# SIDEKIT is free software: you can redistribute it and/or modify
# it under the terms of the GNU LLesser General Public License as 
# published by the Free Software Foundation, either version 3 of the License, 
# or (at your option) any later version.
#
# SIDEKIT is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with SIDEKIT.  If not, see <http://www.gnu.org/licenses/>.
Anthony Larcher's avatar
Initial  
Anthony Larcher committed
23
24

"""
Anthony Larcher's avatar
v1.3.7    
Anthony Larcher committed
25
Copyright 2014-2021 Anthony Larcher and Sylvain Meignier
Anthony Larcher's avatar
Anthony Larcher committed
26
"""
Anthony Larcher's avatar
Initial  
Anthony Larcher committed
27

Anthony Larcher's avatar
Anthony Larcher committed
28
29
from ctypes import *
from ctypes.util import find_library
Anthony Larcher's avatar
Anthony Larcher committed
30
import importlib
Anthony Larcher's avatar
svm    
Anthony Larcher committed
31
import logging
Anthony Larcher's avatar
Anthony Larcher committed
32
import numpy
Anthony Larcher's avatar
Anthony Larcher committed
33
import os
Anthony Larcher's avatar
svm    
Anthony Larcher committed
34
import sys
Anthony Larcher's avatar
Anthony Larcher committed
35

Anthony Larcher's avatar
Anthony Larcher committed
36
37

# Read environment variable if it exists
38
SIDEKIT_CONFIG={"libsvm":True,
Anthony Larcher's avatar
Anthony Larcher committed
39
                "mpi":False,
Anthony Larcher's avatar
Anthony Larcher committed
40
                "cuda":True
Anthony Larcher's avatar
Anthony Larcher committed
41
                }
Anthony Larcher's avatar
Anthony Larcher committed
42

Anthony Larcher's avatar
Anthony Larcher committed
43
44
45
if 'SIDEKIT' in os.environ:
    for cfg in os.environ['SIDEKIT'].split(","):
        k, val = cfg.split("=")
46
        if k == "libsvm":
Anthony Larcher's avatar
Anthony Larcher committed
47
48
           if val == "false":
                SIDEKIT_CONFIG["libsvm"] = False 
Anthony Larcher's avatar
Anthony Larcher committed
49
50
        elif k == "mpi":
            if val == "true":
Anthony Larcher's avatar
Anthony Larcher committed
51
52
53
               SIDEKIT_CONFIG["mpi"] = True
        if k == "cuda":
            if val == "true":
Anthony Larcher's avatar
sad    
Anthony Larcher committed
54
                SIDEKIT_CONFIG["cuda"] = True
Anthony Larcher's avatar
Anthony Larcher committed
55

Anthony Larcher's avatar
Anthony Larcher committed
56

Anthony Larcher's avatar
Anthony Larcher committed
57
PARALLEL_MODULE = 'multiprocessing'  # can be , threading, multiprocessing MPI is planned in the future
Anthony Larcher's avatar
Anthony Larcher committed
58
PARAM_TYPE = numpy.float32
59
STAT_TYPE = numpy.float64  # can be numpy.float32 to speed up the computation but can lead to numerical issuess
Anthony Larcher's avatar
Anthony Larcher committed
60

Anthony Larcher's avatar
Anthony Larcher committed
61
# Import bosaris-like classes
Anthony Larcher's avatar
Anthony Larcher committed
62
63
64
65
66
67
68
69
from .bosaris import IdMap
from .bosaris import Ndx
from .bosaris import Key
from .bosaris import Scores
from .bosaris import DetPlot
from .bosaris import effective_prior
from .bosaris import logit_effective_prior
from .bosaris import fast_minDCF
Anthony Larcher's avatar
Anthony Larcher committed
70
71

# Import classes
Anthony Larcher's avatar
Anthony Larcher committed
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
from .features_extractor import FeaturesExtractor
from .features_server import FeaturesServer
from .mixture import Mixture, vad_energy
from .statserver import StatServer
from .factor_analyser import FactorAnalyser

from .frontend.io import write_pcm
from .frontend.io import read_pcm
from .frontend.io import pcmu2lin
from .frontend.io import read_sph
from .frontend.io import write_label
from .frontend.io import read_label
from .frontend.io import read_spro4
from .frontend.io import read_audio
from .frontend.io import write_spro4
from .frontend.io import read_htk
from .frontend.io import write_htk

from .frontend.vad import vad_energy
from .frontend.vad import vad_snr
from .frontend.vad import label_fusion
from .frontend.vad import speech_enhancement

from .frontend.normfeat import cms
from .frontend.normfeat import cmvn
from .frontend.normfeat import stg
from .frontend.normfeat import rasta_filt

from .frontend.features import compute_delta
from .frontend.features import framing
from .frontend.features import pre_emphasis
from .frontend.features import trfbank
from .frontend.features import mel_filter_bank
from .frontend.features import mfcc
from .frontend.features import pca_dct
from .frontend.features import shifted_delta_cepstral

from .iv_scoring import cosine_scoring
from .iv_scoring import mahalanobis_scoring
from .iv_scoring import two_covariance_scoring
from .iv_scoring import PLDA_scoring
Anthony Larcher's avatar
Anthony Larcher committed
113
from .iv_scoring import fast_PLDA_scoring
Anthony Larcher's avatar
Anthony Larcher committed
114
115
116
117
118

from .gmm_scoring import gmm_scoring

from .jfa_scoring import jfa_scoring

Anthony Larcher's avatar
Anthony Larcher committed
119
120
121
122
123
from .score_normalization import znorm
from .score_normalization import tnorm
from .score_normalization import ztnorm
from .score_normalization import snorm

Anthony Larcher's avatar
Anthony Larcher committed
124
125
126
127
128
from .sidekit_io import write_norm_hdf5
from .sidekit_io import write_matrix_hdf5


from .sv_utils import clean_stat_server
Anthony Larcher's avatar
Anthony Larcher committed
129

Anthony Larcher's avatar
svm    
Anthony Larcher committed
130
libsvm_loaded = False
Anthony Larcher's avatar
Anthony Larcher committed
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
if SIDEKIT_CONFIG["libsvm"]:
    try:
        dirname = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'libsvm')
        if sys.platform == 'win32':
            libsvm = CDLL(os.path.join(dirname, r'libsvm.dll'))
            libsvm_loaded = True
        else:
            libsvm = CDLL(os.path.join(dirname, 'libsvm.so.2'))
            libsvm_loaded = True
    except:
        # For unix the prefix 'lib' is not considered.
        if find_library('svm'):
            libsvm = CDLL(find_library('svm'))
            libsvm_loaded = True
        elif find_library('libsvm'):
            libsvm = CDLL(find_library('libsvm'))
            libsvm_loaded = True
        else:
            libsvm_loaded = False
            logging.warning('WARNNG: libsvm is not installed, please refer to the' +
                            ' documentation if you intend to use SVM classifiers')
Anthony Larcher's avatar
svm    
Anthony Larcher committed
152
153
154
155
156
157

if libsvm_loaded:
    from sidekit.libsvm import *
    from sidekit.svm_scoring import *
    from sidekit.svm_training import *

Anthony Larcher's avatar
Anthony Larcher committed
158

Anthony Larcher's avatar
Anthony Larcher committed
159
160
161
162
163
164
CUDA = False
if SIDEKIT_CONFIG["cuda"]:
    CUDA = True


if CUDA:
Anthony Larcher's avatar
Anthony Larcher committed
165
166
167
168
    from .nnet import FForwardNetwork
    from .nnet import kaldi_to_hdf5
    from .nnet import Xtractor
    from .nnet import xtrain
Anthony Larcher's avatar
Anthony Larcher committed
169
    from .nnet import extract_embeddings
Anthony Larcher's avatar
Anthony Larcher committed
170
    from .nnet import extract_sliding_embedding
Anthony Larcher's avatar
Anthony Larcher committed
171
    from .nnet import ResBlock
Anthony Larcher's avatar
Anthony Larcher committed
172
    from .nnet import SincNet
Anthony Larcher's avatar
Anthony Larcher committed
173

Anthony Larcher's avatar
sad    
Anthony Larcher committed
174
175
else:
    print("Don't import Torch")
Anthony Larcher's avatar
Anthony Larcher committed
176

Anthony Larcher's avatar
Anthony Larcher committed
177
178
179
if SIDEKIT_CONFIG["mpi"]:
    found_mpi4py = importlib.find_loader('mpi4py') is not None
    if found_mpi4py:
Anthony Larcher's avatar
Anthony Larcher committed
180
181
182
        from .sidekit_mpi import EM_split
        from .sidekit_mpi import total_variability
        from .sidekit_mpi import extract_ivector
Anthony Larcher's avatar
Anthony Larcher committed
183
184
185
        print("Import MPI")
        

Anthony Larcher's avatar
Anthony Larcher committed
186
__author__ = "Anthony Larcher and Sylvain Meignier"
Anthony Larcher's avatar
v1.3.7    
Anthony Larcher committed
187
__copyright__ = "Copyright 2014-2021 Anthony Larcher and Sylvain Meignier"
Anthony Larcher's avatar
Initial  
Anthony Larcher committed
188
189
190
191
192
__license__ = "LGPL"
__maintainer__ = "Anthony Larcher"
__email__ = "anthony.larcher@univ-lemans.fr"
__status__ = "Production"
__docformat__ = 'reStructuredText'
Anthony Larcher's avatar
Anthony Larcher committed
193
__version__="1.3.8.5.2"
Anthony Larcher's avatar
Initial  
Anthony Larcher committed
194