RandomObjRecBrain.C
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #include "Image/Image.H"
00039 #include "Image/ColorOps.H"
00040 #include "Image/CutPaste.H"
00041 #include "Image/ShapeOps.H"
00042 #include "Image/Rectangle.H"
00043 #include "Image/MathOps.H"
00044 #include "Image/MatrixOps.H"
00045 #include "Image/Transforms.H"
00046 #include "Image/Convolutions.H"
00047 #include "nub/ref.h"
00048 #include "Util/Types.H"
00049 #include "Util/MathFunctions.H"
00050 #include "Util/log.H"
00051 #include "TestSuite/ObjRecBrain.h"
00052
00053
00054 #include <stdio.h>
00055 #include <vector>
00056 #include <string>
00057
00058 struct ObjectDBData
00059 {
00060 char name[255];
00061 };
00062
00063 class RandomBrain : public ObjRecBrain
00064 {
00065
00066 public:
00067 RandomBrain(std::string dbFile) :
00068 itsObjectsDBFile(dbFile)
00069 {
00070 initRandomNumbersZero();
00071 }
00072
00073 ~RandomBrain()
00074 {
00075 }
00076
00077 void preTraining()
00078 {
00079 itsFP = fopen(itsObjectsDBFile.c_str(), "wb");
00080 if (itsFP == NULL)
00081 LFATAL("Error loading data file");
00082 }
00083
00084 void onTraining(Image<PixRGB<byte> > &img, ObjectData& objData)
00085 {
00086 ObjectDBData obj;
00087 strcpy(obj.name, objData.name.c_str());
00088
00089 fwrite(&obj, 1, sizeof(ObjectDBData), itsFP);
00090
00091 };
00092 void postTraining()
00093 {
00094 fclose(itsFP);
00095 }
00096
00097
00098 void preRecognition()
00099 {
00100 itsFP = fopen(itsObjectsDBFile.c_str(), "r");
00101 if (itsFP == NULL)
00102 LFATAL("Error loading data file");
00103
00104 itsObjects.clear();
00105 while(1)
00106 {
00107 ObjectDBData obj;
00108 int ret = fread(&obj, 1, sizeof(ObjectDBData), itsFP);
00109 if (ret == 0)
00110 break;
00111 itsObjects.push_back(obj.name);
00112 }
00113 fclose(itsFP);
00114 }
00115
00116 ObjectData onRecognition(Image<PixRGB<byte> > &img)
00117 {
00118
00119 ObjectData obj;
00120 if (itsObjects.size() > 0)
00121 obj.name = itsObjects.at(randomUpToNotIncluding(itsObjects.size()));
00122 else
00123 obj.name = "unknown";
00124
00125 obj.confidence = 100;
00126
00127 return obj;
00128 }
00129
00130 void postRecognition()
00131 {
00132 }
00133
00134 private:
00135 FILE* itsFP;
00136 std::vector<std::string> itsObjects;
00137 std::string itsObjectsDBFile;
00138
00139 };
00140
00141
00142 extern "C" ObjRecBrain* createObjRecBrain(std::string dbFile)
00143 {
00144 return new RandomBrain(dbFile);
00145 }
00146
00147 extern "C" void destoryObjRecBrain(ObjRecBrain* brain)
00148 {
00149 delete brain;
00150 }
00151
00152
00153 int main(const int argc, const char **argv)
00154 {
00155 LFATAL("Use test-ObjRec");
00156 return 0;
00157 }
00158
00159
00160
00161
00162
00163