StatServer.h

Go to the documentation of this file.
00001 /*
00002         This file is part of ALIZE which is an open-source tool for 
00003         speaker recognition.
00004 
00005     ALIZE is free software: you can redistribute it and/or modify
00006     it under the terms of the GNU Lesser General Public License as 
00007     published by the Free Software Foundation, either version 3 of 
00008     the License, or any later version.
00009 
00010     ALIZE is distributed in the hope that it will be useful,
00011     but WITHOUT ANY WARRANTY; without even the implied warranty of
00012     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013     GNU Lesser General Public License for more details.
00014 
00015     You should have received a copy of the GNU Lesser General Public 
00016     License along with ALIZE.
00017     If not, see <http://www.gnu.org/licenses/>.
00018         
00019         ALIZE is a development project initiated by the ELISA consortium
00020         [alize.univ-avignon.fr/] and funded by the French Research 
00021         Ministry in the framework of the TECHNOLANGUE program 
00022         [www.technolangue.net]
00023 
00024         The ALIZE project team wants to highlight the limits of voice
00025         authentication in a forensic context.
00026         The "Person  Authentification by Voice: A Need of Caution" paper 
00027         proposes a good overview of this point (cf. "Person  
00028         Authentification by Voice: A Need of Caution", Bonastre J.F., 
00029         Bimbot F., Boe L.J., Campbell J.P., Douglas D.A., Magrin-
00030         chagnolleau I., Eurospeech 2003, Genova].
00031         The conclusion of the paper of the paper is proposed bellow:
00032         [Currently, it is not possible to completely determine whether the 
00033         similarity between two recordings is due to the speaker or to other 
00034         factors, especially when: (a) the speaker does not cooperate, (b) there 
00035         is no control over recording equipment, (c) recording conditions are not 
00036         known, (d) one does not know whether the voice was disguised and, to a 
00037         lesser extent, (e) the linguistic content of the message is not 
00038         controlled. Caution and judgment must be exercised when applying speaker 
00039         recognition techniques, whether human or automatic, to account for these 
00040         uncontrolled factors. Under more constrained or calibrated situations, 
00041         or as an aid for investigative purposes, judicious application of these 
00042         techniques may be suitable, provided they are not considered as infallible.
00043         At the present time, there is no scientific process that enables one to 
00044         uniquely characterize a person=92s voice or to identify with absolute 
00045         certainty an individual from his or her voice.]
00046         Contact Jean-Francois Bonastre for more information about the licence or
00047         the use of ALIZE
00048 
00049         Copyright (C) 2003-2010
00050         Laboratoire d'informatique d'Avignon [lia.univ-avignon.fr]
00051         ALIZE admin [alize@univ-avignon.fr]
00052         Jean-Francois Bonastre [jean-francois.bonastre@univ-avignon.fr]
00053 */
00054 
00055 #if !defined(ALIZE_StatServer_h)
00056 #define ALIZE_StatServer_h
00057 
00058 #if defined(_WIN32)
00059 #if defined(ALIZE_EXPORTS)
00060 #define ALIZE_API __declspec(dllexport)
00061 #else
00062 #define ALIZE_API __declspec(dllimport)
00063 #endif
00064 #else
00065 #define ALIZE_API
00066 #endif
00067 
00068 #include "Object.h"
00069 #include "alizeString.h"
00070 #include "LKVector.h"
00071 #include "ViterbiAccum.h"
00072 #include "MixtureStat.h"
00073 
00074 #if defined(__GNUC__)
00075 #define DEPRECATED(func) func __attribute__ ((deprecated))
00076 #elif defined(_MSC_VER)
00077 #define DEPRECATED(func) __declspec(deprecated) func
00078 #else
00079 #pragma message("WARNING: You need to implement DEPRECATED for this compiler")
00080 #define DEPRECATED(func) func
00081 #endif
00082 
00083 namespace alize
00084 {
00085   class Config;
00086   class FrameAcc;
00087   class FrameAccGD;
00088   class FrameAccGF;
00089   class MixtureGDStat;
00090   class MixtureGFStat;
00091   class MixtureServer;
00092   class Mixture;
00093   class MixtureGF;
00094   class MixtureGD;
00095   class MixtureStat;
00096 
00103 
00104   class ALIZE_API StatServer : public Object
00105   {
00106     friend class TestStatServer;
00107     friend class TestMixtureGDStat;
00108 
00109   public :
00110 
00115     explicit StatServer(const Config& c);
00116 
00122     explicit StatServer(const Config& c, MixtureServer& ms);
00123 
00124     virtual ~StatServer();
00125 
00128     void reset();
00129     
00135     lk_t computeLLK(const Mixture& m, const Feature& f) const;
00136     
00144     lk_t computeLLK(const Mixture& m, const Feature& f, unsigned long idx) const;
00145 
00152     void computeAllDistribLK(const Feature& f);
00153 
00158     const LKVector& getTopDistribIndexVector() const;
00159 
00165     void setTopDistribIndexVector(const ULongVector& indexVect,
00166                                   real_t sumNonTopDistribWeights,
00167                                   real_t sumNonTopDistribLK);
00168 
00175     DEPRECATED(real_t getAccumulatedOccFeatureCount(const Mixture& m));
00176 
00186     void resetLLK(const Mixture& m);
00187     
00195     DEPRECATED(lk_t getLLK(const Mixture& m));
00196     
00209     lk_t computeAndAccumulateLLK(const Mixture& m, const Feature& f,
00210                      const TopDistribsAction& a = TOP_DISTRIBS_NO_ACTION);
00211 
00224     lk_t computeAndAccumulateLLK(const Mixture& m, const Feature& f,
00225              double w, const TopDistribsAction& a = TOP_DISTRIBS_NO_ACTION);
00226 
00235     DEPRECATED(void accumulateLLK(const Mixture& m, double l, double w = 1.0));
00236     
00247     lk_t getMeanLLK(const Mixture& m);
00248     
00258     DEPRECATED(lk_t computeAndAccumulateLLK(const Mixture& m));
00259 
00269     DEPRECATED(void resetOcc(const Mixture& m));
00270 
00278     DEPRECATED(real_t computeAndAccumulateOcc(const Mixture& m, const Feature& f));
00279 
00287     DEPRECATED(occ_t* getMeanOccVect(const Mixture& m));
00288 
00296     DEPRECATED(occ_t* getAccumulatedOccVect(const Mixture& m));
00297 
00303     DEPRECATED(occ_t getAccumulatedOcc(const Mixture& m));
00304 
00310     DEPRECATED(void resetEM(const Mixture& m));
00311   
00319     DEPRECATED(occ_t computeAndAccumulateEM(const Mixture& m, const Feature&));
00320 
00328     DEPRECATED(const Mixture& getEM(const Mixture& m));
00329 
00330     //--------------------------------------------------------------------
00331 
00337     MixtureStat& createAndStoreMixtureStat(const Mixture& m);
00338 
00344     MixtureGDStat& createAndStoreMixtureStat(MixtureGD& m);
00345 
00351     MixtureGFStat& createAndStoreMixtureStat(MixtureGF& m);
00352 
00359     MixtureGDStat& createAndStoreMixtureGDStat(Mixture& m);
00360 
00367     MixtureGFStat& createAndStoreMixtureGFStat(Mixture& m);
00368 
00372     unsigned long getMixtureStatCount() const;
00373 
00378     MixtureStat& getMixtureStat(unsigned long idx);
00379 
00384     MixtureGDStat& getMixtureGDStat(unsigned long idx);
00385 
00390     MixtureGFStat& getMixtureGFStat(unsigned long idx);
00391 
00395     void deleteMixtureStat(MixtureStat& m);
00396 
00401     void deleteMixtureStat(unsigned long begin, unsigned long end);
00402 
00405     void deleteAllMixtureStat();
00406 
00412     unsigned long getMixtureStatIndex(MixtureStat& m) const;
00413     
00414     //--------------------------------------------------------------------
00415 
00419     ViterbiAccum& createViterbiAccum();
00420 
00421     //--------------------------------------------------------------------
00422 
00425     static FrameAccGD createFrameAccGD();
00426 
00429     static FrameAccGF createFrameAccGF();
00430 
00431     //--------------------------------------------------------------------
00432     
00433     const String& getServerName() const;
00434 
00435     void setServerName(const String& s);
00436 
00437     virtual String getClassName() const;
00438 
00439     virtual String toString() const;
00440 
00441     // INTERNAL USAGE
00442     
00443     const DoubleVector& getDistribLKVector(const K&) const;
00444     LKVector& getTopDistribIndexVector(const K&);
00445     lk_t computeLLK(const K&, const Mixture&) const;
00446     lk_t computeLLK(const K&, const Mixture& m, const Feature& f,
00447                               const TopDistribsAction& a);
00448         // LIUM, sylvain
00449     lk_t computeLLK(const K&, const Mixture& m, const Feature& f,
00450                               const LKVector & lkVect);                                                   
00451   private :
00452 
00453     String                  _serverName;
00454     const Config&           _config;
00455     DoubleVector            _distribLKVect;
00456     MixtureServer*          _pMixtureServer;
00457     RefVector<MixtureStat>  _mixtureStatVect;
00458     RefVector<ViterbiAccum> _viterbiAccumVect;
00459     const Mixture*          _pLastMixture;
00460     MixtureStat*            _pLastMixtureStat;
00461     LKVector                _topDistribsVect; // For top distributions management
00462     const lk_t              _minLLK;
00463     const lk_t              _maxLLK;
00464 
00465     lk_t computeLLK(lk_t lk) const;
00466 
00469     MixtureStat& getMixtureStat(const Mixture& m); 
00470     StatServer(const StatServer&); 
00471     const StatServer& operator=(const StatServer&); 
00472     bool operator==(const StatServer&) const; 
00473     bool operator!=(const StatServer&) const; 
00474   };
00475 
00476 } // end namespace alize
00477 
00478 #endif // !defined(ALIZE_StatServer_h)