00001
00049 #include <stdio.h>
00050 #include <stdlib.h>
00051 #include <time.h>
00052
00053 #include <DAG.h>
00054 #include <DAGDatabase.h>
00055 #include <ShockGraph.h>
00056 #include <GestureGraph.h>
00057 #include <VisualDAG.h>
00058 #include <LEDA/window.h>
00059
00060 #include <Exceptions.h>
00061 #include <HelperFunctions.h>
00062 #include <Debug.h>
00063 #include <DirWalker.h>
00064 #include <UnixFuncPrototypes.h>
00065
00066 #include <algorithm>
00067 #include <string>
00068
00069 #include "CmdLineParser.h"
00070 #include "ViewSubsampler.h"
00071 #include "Stats.h"
00072
00073 struct MATCHINFO
00074 {
00075 double idxtau, matchtau, idxrange, modelSimWeight;
00076 int idxKBest, computeStats, asyncCompu, showResults, saveResults;
00077 };
00078
00079 struct SGRECINFO
00080 {
00081 SGCP sgparams;
00082 int usenewcode, timeout;
00083 };
00084
00085 class DAGCmdLineParser : public CmdLineParser
00086 {
00087 typedef bool (DAGCmdLineParser::*DAG_ACTION)();
00088
00089 MATCHINFO m_matchInfo;
00090 SGRECINFO m_sgInfo;
00091
00092 double m_maxOcclusionRate, m_dNeigRange;
00093 int m_iterations, m_maxdags, m_imgstep, m_from, m_to;
00094 int m_nVerbose, m_saveSubsamplingInfo, m_nSplitProportion, m_nSplitByObject;
00095
00096 LPCSTR m_target, m_objName, m_delobj,
00097 m_createObj, m_viewDag, m_szMatrixFileName;
00098
00099 public:
00100 DAG::MatchParams m_matchParams;
00101
00102 public:
00103 DAGDatabase dagDB;
00104
00105 public:
00106 bool AddObjsToDB();
00107 bool CreateDBIndex();
00108 bool Match();
00109 bool CreateMatrix();
00110 bool ViewDAGs();
00111 bool ViewDAG();
00112 bool ListDAGs();
00113 bool ShowDBSize();
00114 bool CreateAffinityMatrix();
00115 bool PlotNodeInfo();
00116 bool SplitDB();
00117 bool MergeDB();
00118 bool UpdateDB();
00119 bool RecomputeSG();
00120 bool Test();
00121 bool ListObjectNames();
00122 bool DeleteObj();
00123 bool EnterDbgMode();
00124 bool DeleteDAG();
00125 bool DeleteObjects();
00126 bool ClosestNeigList();
00127 bool GetNeig();
00128 bool ShowHelp();
00129
00130 bool Verbose() { return m_nVerbose != 0; }
00131
00132 virtual void InitOptions();
00133 virtual void ShowUsageExamples();
00134
00135 virtual bool ExecAction(CLP_ACTION pAction)
00136 {
00137 DAG_ACTION action = (DAG_ACTION) pAction;
00138 return (this->*action)();
00139 }
00140
00141 void SetSGComputationSyncMode() { m_matchInfo.asyncCompu = 0; }
00142 bool IsSGComputationSyncMode() const { return m_matchInfo.asyncCompu == 0; }
00143 };
00144
00145
00146 int AsyncIndexDAG(const DAG* pQueryDag, DAGDatabase& dagDB, MATCHINFO& info, STATINFO& idxSt);
00147 double AsyncMatchDAG(const DAG* pQueryDag, const DAG* pModelDag, DAGNodeMap& nodeMap);
00148 time_t MatchDAG(const DAG* pTargetDag, DAGDatabase& dagDB, MATCHINFO& info, STATINFO& idxSt, STATINFO& matSt);
00149 void MatchDAG(const DAG* pImgDag, DAGDatabase& dagDB, MATCHINFO& info, streamoff nModelDagOffset, STATINFO& matSt);
00150 void ProcessFile(const char* szFileName, DAGDatabase& dagDB, fstream& logFile, SGRECINFO& info, bool bAsyncProcessing);
00151 void SaveResults(const DAG* pTarget, DAGDatabase& dagDB, STATINFO& idxSt, STATINFO& matSt, ostream& os);
00152 bool ShowResults(const DAG* pTarget, STATINFO& matSt, DAGDatabase& queryDB, DAGDatabase& modelDB, int nTgtID =-1);
00153 double OccludeDAG(DAGPtr& ptrDag, double dMaxOcclusionRate);
00154
00155 bool AskBool(const char* szQuestion);
00156 int AskInt(const char* szQuestion);
00157 void OnAlarm(int param);
00158 void MakeSquare(const char* szPPMFileName);
00159 void ShowMatch(const DAG* pDag1, const DAG* pDag2);
00160 void ShowMatch(DAGDatabase& dagDB1, int nDag1Id, DAGDatabase& dagDB2, int nDag2Id);
00161 void ShowSkeletonMatch(const DAG* pDag1, const DAG* pDag2, DAGNodeMap& nodeMap);
00162 void ShowSkeleton(const DAG* pDag);
00163 void AddSubsamplingInfo(ViewSubsampler& vs, const DAG* pTarget, STATINFO& matSt, int kBest);
00164 void SaveSubsamplingInfo(ViewSubsampler& vs, String strDBFileName);
00165 SmartArray<int> GetFarthestViews(int i, int res, double deg);
00166 SmartArray<int> Complement128(int tgt, const int* views, int n);