diff --git a/bob/pad/base/algorithm/__init__.py b/bob/pad/base/algorithm/__init__.py index 92decef766c32cd394de36fff2287347116d38ba..8f53803173d9ece72be6fd2a4cb86a6365804bac 100644 --- a/bob/pad/base/algorithm/__init__.py +++ b/bob/pad/base/algorithm/__init__.py @@ -37,6 +37,7 @@ __appropriate__( SVMCascadePCA, Predictions, VideoPredictions, + ScikitClassifier, MLP, PadLDA ) diff --git a/bob/pad/base/test/test_algorithms.py b/bob/pad/base/test/test_algorithms.py index acb2544aa6a6eaea7dad8028f97e0ef8e3007361..7881ca0f4ab5da25b1f4bbe569b0cc4bbd57061f 100644 --- a/bob/pad/base/test/test_algorithms.py +++ b/bob/pad/base/test/test_algorithms.py @@ -14,6 +14,7 @@ from bob.pad.base.algorithm import SVM from bob.pad.base.algorithm import OneClassGMM from bob.pad.base.algorithm import MLP from bob.pad.base.algorithm import PadLDA +from bob.pad.base.algorithm import ScikitClassifier import random @@ -219,3 +220,40 @@ def test_LDA(): lda = PadLDA() lda.train_projector(training_features, '/tmp/lda.hdf5') assert lda.machine.shape == (2, 1) + + + +def test_ScikitClassifier(): + + random.seed(7) + + N = 20000 + mu = 1 + sigma = 1 + real_array = np.transpose( + np.vstack([[random.gauss(mu, sigma) for _ in range(N)], + [random.gauss(mu, sigma) for _ in range(N)]])) + + mu = 5 + sigma = 1 + attack_array = np.transpose( + np.vstack([[random.gauss(mu, sigma) for _ in range(N)], + [random.gauss(mu, sigma) for _ in range(N)]])) + + training_features = [real_array, attack_array] + + from sklearn.preprocessing import StandardScaler + from sklearn.mixture import GaussianMixture + + + _scaler = StandardScaler() + _clf = GaussianMixture(n_components=10, covariance_type='full') + + sk = ScikitClassifier(clf=_clf, scaler=_scaler, frame_level_scores_flag=False, one_class=True) + sk.train_projector(training_features, '/tmp/sk.hdf5') + + # Model path `/tmp/sk_skmodel.obj` + # Scaler path `/tmp/sk_scaler.obj` + + assert sk.clf.n_components==10 +