spyGlasses.C
Go to the documentation of this file.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 <stdio.h>
00039 #include "Component/ModelManager.H"
00040 #include "Image/Image.H"
00041 #include "Image/ImageSet.H"
00042 #include "Image/ShapeOps.H"
00043 #include "Image/DrawOps.H"
00044 #include "Image/ColorOps.H"
00045 #include "Image/MathOps.H"
00046 #include "Image/Layout.H"
00047 #include "GUI/XWinManaged.H"
00048 #include "Corba/ImageOrbUtil.H"
00049 #include "Corba/CorbaUtil.H"
00050 #include "Corba/Objects/SalGlassesSK.hh"
00051 #include "Neuro/EnvVisualCortex.H"
00052
00053 #include <signal.h>
00054 #include <stdio.h>
00055 #include <sys/types.h>
00056 #include <unistd.h>
00057 #include <sys/socket.h>
00058 #include <netinet/in.h>
00059 #include <unistd.h>
00060 #include <netdb.h>
00061 #include <fcntl.h>
00062 #include <arpa/inet.h>
00063 #include <stdlib.h>
00064 #include <ctype.h>
00065
00066
00067 #define UP 98
00068 #define DOWN 104
00069 #define LEFT 100
00070 #define RIGHT 102
00071
00072 #define UDPPORT 9938
00073
00074
00075
00076 int main(int argc, char** argv)
00077 {
00078
00079
00080 MYLOGVERB = LOG_INFO;
00081 ModelManager *mgr = new ModelManager("Test ObjRec");
00082
00083
00084 nub::ref<EnvVisualCortex> evc(new EnvVisualCortex(*mgr));
00085 mgr->addSubComponent(evc);
00086 mgr->exportOptions(MC_RECURSE);
00087
00088 if (mgr->parseCommandLine(
00089 (const int)argc, (const char**)argv, "", 0, 0) == false)
00090 return 1;
00091
00092 mgr->start();
00093
00094
00095 int sock = socket(AF_INET, SOCK_DGRAM, 0);
00096 if (sock == -1)
00097 {
00098 printf("Cannot create server socket\n");
00099 exit(0);
00100 }
00101
00102 struct sockaddr_in addr;
00103 addr.sin_family = AF_INET;
00104 addr.sin_addr.s_addr = htonl(INADDR_ANY);
00105 addr.sin_port = htons(UDPPORT);
00106 if (bind(sock, (struct sockaddr*)(&addr), sizeof(addr)) == -1)
00107 {
00108 printf("Cannot bind server socket\n");
00109 close(sock);
00110 exit(0);
00111 }
00112
00113 printf("Lisening on port %i\n", UDPPORT);
00114
00115
00116 XWinManaged* xwin = new XWinManaged(Dims(320*2,240), -1, -1, "Saliency Glasses");
00117 Image<PixRGB<byte> > img;
00118
00119 int width = 320, height = 240;
00120 char rvcBuf[1024+4];
00121
00122 Image<PixRGB<byte> > img(width, height, NO_INIT);
00123
00124 while(true)
00125 {
00126
00127 struct sockaddr_in fromaddr; unsigned int fromlen = sizeof(fromaddr);
00128 int ret = recvfrom(sock, rvcBuf, , 0,
00129 (struct sockaddr *)(&fromaddr), &fromlen);
00130 printf("Received message %d bytes from %s:%d\n", ret,
00131 inet_ntoa(fromaddr.sin_addr), ntohs(fromaddr.sin_port));
00132
00133 if (ret != 1024+4)
00134 printf("Invalid packet\n");
00135 int pos = *
00136
00137
00138 memcpy(img.getArrayPtr(), imgBuff, width*height*3);
00139
00140
00141 evc->input(img);
00142
00143 Image<float> vcxMap = evc->getVCXmap();
00144
00145 Point2D<int> maxPos; float maxVal;
00146
00147 vcxMap = rescale(vcxMap, img.getDims());
00148 findMax(vcxMap, maxPos, maxVal);
00149 inplaceNormalize(vcxMap, 0.0F, 255.0F);
00150
00151 drawCircle(img, maxPos, 20, PixRGB<byte>(255,0,0));
00152
00153 Layout<PixRGB<byte> > outDisp;
00154 outDisp = vcat(outDisp, hcat(img, toRGB((Image<byte>)vcxMap)));
00155 xwin->drawRgbLayout(outDisp);
00156
00157
00158 int key = xwin->getLastKeyPress();
00159
00160 switch (key)
00161 {
00162 case UP:
00163 break;
00164 case DOWN:
00165 break;
00166 case LEFT:
00167 break;
00168 case RIGHT:
00169 break;
00170 case 65:
00171 break;
00172 case 33:
00173 break;
00174 case 40:
00175 break;
00176 case 27:
00177 break;
00178 default:
00179 if (key != -1)
00180 printf("Unknown Key %i\n", key);
00181 break;
00182 }
00183 }
00184 return 0;
00185 }