00001 #ifndef _VISION_MODULE_H
00002 #define _VISION_MODULE_H
00003
00004 #include <Capability.H>
00005 #include <opencv/cv.h>
00006 #include <vector>
00007 #include <map>
00008 #include <WURDECam.H>
00009 #include <string>
00010 #include <Logger.H>
00011 #include <ImageSource.H>
00012 #include <dlfcn.h>
00013
00014 namespace WURDEVision {
00015
00019
00020
00025 typedef struct CameraConfig_t {
00026 std::string name;
00027 std::map<std::string,std::string> options;
00028 } CameraConfig;
00029
00033 std::vector<CameraConfig> parseCameraFile(std::string config);
00034
00039 typedef struct {
00040 std::string name;
00041 std::string type;
00042 std::multimap<std::string,std::string> options;
00043 std::vector<CameraConfig> cameras;
00044 } OperatorConfig;
00045
00050 typedef struct {
00051 std::vector<CameraConfig> cameras;
00052 std::vector<OperatorConfig> operators;
00053 std::vector<std::string> plugins;
00054 } VisionModuleConfig;
00055
00063 class VisionOperator {
00064 public:
00065 VisionOperator(std::string name){m_name=name;};
00066 ~VisionOperator(){}
00067
00073 virtual void initOperator()=0;
00074
00080 virtual void runOperator(WURDE::WURDEImage image)=0;
00081
00087 virtual void runOperator(WURDE::WURDEImage image1, WURDE::WURDEImage image2)=0;
00088
00092 virtual void quitOperator()=0;
00093
00097 std::list<WURDE::Capability *> *getSuppliers(){WURDE::g_debug("returning supppliers"); return &m_supplierList;}
00098
00102 std::list<WURDE::Capability *> *getConsumers(){return &m_consumerList;}
00103
00107 WURDE::RunState getState(){return m_state;}
00108
00112 bool isStereoModule(){return m_stereo;}
00113
00117 std::string getName(){return m_name;}
00118
00122 void setName(std::string name){m_name=name;}
00123
00127 void setFormat(WURDE::ImageFormat format){ m_format=format;}
00128
00132 WURDE::ImageFormat getFormat(){return m_format;}
00133
00137 void setCameras(std::vector<WURDEVision::CameraConfig> cams){m_cameras=cams;}
00138
00142 std::string getCamera0(){return m_cameras[0].name;}
00143
00147 std::string getCamera1(){if(m_cameras.size()>1){return m_cameras[1].name;}else{return "Null";}}
00148 protected:
00152 WURDE::RunState m_state;
00156 void registerSupplier(WURDE::Capability *someObject){m_supplierList.push_back(someObject);}
00157
00161 void registerConsumer(WURDE::Capability *someObject){m_consumerList.push_back(someObject);}
00162 std::string m_name;
00163
00167 bool m_stereo;
00168
00172 WURDE::ImageFormat m_format;
00173
00174 private:
00175 std::vector<WURDEVision::CameraConfig> m_cameras;
00176 std::list<WURDE::Capability *> m_supplierList;
00177 std::list<WURDE::Capability *> m_consumerList;
00178 };
00179
00180 VisionModuleConfig parseVisionFile(std::string config, std::string modName, std::vector<CameraConfig> &cameras);
00181
00182 void loadOperators(VisionModuleConfig &theConfig,std::list<VisionOperator *> &theOperators,bool fakeit);
00183 void loadCameras(VisionModuleConfig &theConfig, std::vector<WURDECamera *> &cameras);
00184
00189 void loadOperatorMap(std::vector<std::string> operatorLibs);
00190 }
00191
00195 typedef WURDEVision::VisionOperator *voperatorloader_ptr(std::string name);
00196
00200 extern "C" {
00201 extern std::map<std::string, voperatorloader_ptr *, std::less<std::string> > operatorFactory;
00202 }
00203
00204 #endif