00001 #ifndef __LOCATOR_TAG
00002 #define __LOCATOR_TAG
00003
00004 #include "locator_defines.h"
00005 #include "frame.h"
00006 #include "annie/annie.h"
00007
00009 #define VERBOSE false
00010
00013 #define INPUT_NODES 345
00014
00018 #define ITERATIONS 500
00019
00021 #define LEARNING_RATE 0.25
00022
00023 #define MOMENTUM 0.15
00024
00029 #define OK_ERROR 0.015
00030
00033 #define TRUE_OUTPUT 0.95
00034
00036 #define FALSE_OUTPUT 0.05
00037
00040 #define CUT_OFF ((TRUE_OUTPUT + FALSE_OUTPUT)/2.0)
00041
00044 #define MAX_OK_ERROR ((TRUE_OUTPUT - CUT_OFF) - .05)
00045
00050 #define MAX_COUNTER_PER_CYCLE 500
00051
00053 #define MAX_FACES_PER_CYCLE 100
00054
00056 #define FACE_DISTANCE 6
00057
00060 #define FACE_MIN 15
00061
00065 class face_locator_network
00066 {
00067 public:
00070 face_locator_network(int hidden);
00071
00074 face_locator_network(string FileName);
00075
00076 ~face_locator_network();
00081 bool save(string FileName);
00082
00087 float run_net(annie::VECTOR & data);
00088
00093 float run_net(double * data);
00094
00095 private:
00097 annie::TwoLayerNetwork * net;
00098 bool is_set;
00099 };
00100
00108 annie::TrainingSet * make_face_training_set(string FaceDir, string fileName);
00109
00110
00124 bool training_set_guess(string FaceDir, string NonFaceDir, string fileName, int num_images);
00125
00126 bool add_non_training_set(string NonFaceDir, annie::TrainingSet & T );
00127 void newTrain(annie::TrainingSet & ts,unsigned int hidden);
00128
00131 void trainNN(string NonFaceDir, annie::TrainingSet & all, annie::TrainingSet & ts, string fileName, int hidden);
00132
00135 class locator_filter: public Filter
00136 {
00137 public:
00142 locator_filter(string FileName);
00143
00145 locator_filter();
00146
00148 virtual ~locator_filter();
00149
00150
00160 virtual bool filter_frame(FrameClass & frame);
00161 virtual void property_changed();
00162
00163 private:
00164 string filename;
00165 face_locator_network * net;
00166 bool set;
00167 };
00168
00169
00174 extern unsigned int start_stop[INPUT_HEIGHT*2];
00175
00176 #ifdef DYNAMIC_LINK
00177 extern "C"{
00178 Filter * create_instance();
00179 #ifndef NO_GUI
00180 GdkPixmap *create_icon(GtkWidget *drawing_area);
00181 #endif
00182 }
00183 #endif
00184
00185 #endif