//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CCSPlayerResource::UpdatePlayerData( void ) { int i; m_iPlayerC4 = 0; m_iPlayerVIP = 0; for ( i = 1; i <= gpGlobals->maxClients; i++ ) { CCSPlayer *pPlayer = (CCSPlayer*)UTIL_PlayerByIndex( i ); if ( pPlayer && pPlayer->IsConnected() ) { if ( pPlayer->IsVIP() ) { // we should only have one VIP Assert( m_iPlayerVIP == 0 ); m_iPlayerVIP = i; } if ( pPlayer->HasC4() ) { // we should only have one bomb m_iPlayerC4 = i; } } } CBaseEntity *c4 = NULL; if ( m_iPlayerC4 == 0 ) { // no player has C4, update C4 position if ( g_C4s.Count() > 0 ) { c4 = g_C4s[0]; m_vecC4 = c4->GetAbsOrigin(); } else { m_vecC4.Init(); } } //int numHostages = g_Hostages.Count(); for ( i = 0; i < MAX_HOSTAGES; i++ ) { /*if ( i >= numHostages ) { // engine->Con_NPrintf( i, "Dead" ); m_bHostageAlive.Set( i, false ); m_isHostageFollowingSomeone.Set( i, false ); continue; } // CHostage* pHostage = g_Hostages[i]; //m_bHostageAlive.Set( i, pHostage->IsRescuable() ); /*if ( pHostage->IsValid() ) { m_iHostageX.Set( i, (int) pHostage->GetAbsOrigin().x ); m_iHostageY.Set( i, (int) pHostage->GetAbsOrigin().y ); m_iHostageZ.Set( i, (int) pHostage->GetAbsOrigin().z ); m_iHostageEntityIDs.Set( i, pHostage->entindex() ); //m_isHostageFollowingSomeone.Set( i, pHostage->IsFollowingSomeone() ); // engine->Con_NPrintf( i, "ID:%d Pos:(%.0f,%.0f,%.0f)", pHostage->entindex(), pHostage->GetAbsOrigin().x, pHostage->GetAbsOrigin().y, pHostage->GetAbsOrigin().z ); } else { // engine->Con_NPrintf( i, "Invalid" ); }*/ } if( !m_foundGoalPositions ) { // We only need to update these once a map, but we need the client to know about them. CBaseEntity* ent = NULL; while ( ( ent = gEntList.FindEntityByClassname( ent, "func_bomb_target" ) ) != NULL ) { const Vector &pos = ent->WorldSpaceCenter(); CNavArea *area = TheNavMesh->GetNearestNavArea( pos, true ); const char *placeName = (area) ? TheNavMesh->PlaceToName( area->GetPlace() ) : NULL; if ( placeName == NULL ) { // The bomb site has no area or place name, so just choose A then B if ( m_bombsiteCenterA.Get().IsZero() ) { m_bombsiteCenterA = pos; } else { m_bombsiteCenterB = pos; } } else { // The bomb site has a place name, so choose accordingly if( FStrEq( placeName, "BombsiteA" ) ) { m_bombsiteCenterA = pos; } else { m_bombsiteCenterB = pos; } } m_foundGoalPositions = true; } int hostageRescue = 0; while ( (( ent = gEntList.FindEntityByClassname( ent, "func_hostage_rescue" ) ) != NULL) && (hostageRescue < MAX_HOSTAGE_RESCUES) ) { const Vector &pos = ent->WorldSpaceCenter(); m_hostageRescueX.Set( hostageRescue, (int) pos.x ); m_hostageRescueY.Set( hostageRescue, (int) pos.y ); m_hostageRescueZ.Set( hostageRescue, (int) pos.z ); hostageRescue++; m_foundGoalPositions = true; } } bool bombSpotted = false; if ( c4 ) { Spotter spotter( c4, m_vecC4, TEAM_CT ); ForEachPlayer( spotter ); if ( spotter.Spotted() ) { bombSpotted = true; } } for ( int i=0; i < MAX_PLAYERS+1; i++ ) { CCSPlayer *target = ToCSPlayer( UTIL_PlayerByIndex( i ) ); if ( !target || !target->IsAlive() ) { m_bPlayerSpotted.Set( i, 0 ); continue; } Spotter spotter( target, target->EyePosition(), (target->GetTeamNumber()==TEAM_CT) ? TEAM_TERRORIST : TEAM_CT ); ForEachPlayer( spotter ); if ( spotter.Spotted() ) { if ( target->HasC4() ) { bombSpotted = true; } m_bPlayerSpotted.Set( i, 1 ); } else { m_bPlayerSpotted.Set( i, 0 ); } } if ( bombSpotted ) { m_bBombSpotted = true; } else { m_bBombSpotted = false; } BaseClass::UpdatePlayerData(); }
int main(int argc, char** argv) { //VL_PRINT ("Hello world!") ; try { TCLAP::CmdLine cmd("EmbAttSpotter tester", ' ', "0.1"); TCLAP::SwitchArg evalF("e","eval","Evaluate against dataset", cmd, false); TCLAP::SwitchArg evalSubF("s","evalSubwordSpotting","Evaluate subword spotting results", cmd, false); TCLAP::SwitchArg evalSubCombF("a","evalSubwordSpottingCombine","Evaluate subword spotting results when combining exemplars", cmd, false); TCLAP::ValueArg<int> primeSubwordArg("p","primeSubword","save the cca att for the given string length", false, -1,"int"); cmd.add( primeSubwordArg ); TCLAP::ValueArg<string> modelArg("l","location","load/save prefix", false,"model/evalGW","string"); cmd.add( modelArg ); TCLAP::SwitchArg testF("t","test","Run unit tests", cmd, false); TCLAP::ValueArg<int> imageArg("i","image","show visual result", false,-1,"int"); cmd.add( imageArg ); TCLAP::ValueArg<int> image2Arg("c","image2","compare images", false,-1,"int"); cmd.add( image2Arg ); TCLAP::ValueArg<string> compare1Arg("1","compare1","1st image for comparison", false,"","string"); cmd.add( compare1Arg ); TCLAP::ValueArg<string> compare2Arg("2","compare2","2nd image for comparison", false,"","string"); cmd.add( compare2Arg ); TCLAP::SwitchArg retrainAttReprTrF("6","attReprTr","Retrain attReprTr", cmd, false); TCLAP::SwitchArg retrainEmbeddingF("5","embedding","Retrain embedding", cmd, false); TCLAP::ValueArg<string> trainFileArg("9","trainfile","training file: *.gtp for 'docimagefile lx ty rx by gt', *.txt for 'imagefile gt'", false,"test/queries_train.gtp","string"); cmd.add( trainFileArg ); TCLAP::ValueArg<string> testFileArg("8","testfile","testing file: *.gtp for 'docimagefile lx ty rx by gt', *.txt for 'imagefile gt'", false,"test/queries_test.gtp","string"); cmd.add( testFileArg ); TCLAP::ValueArg<string> exemplarFileArg("7","exemplars","exemplar file: *.gtp for 'docimagefile lx ty rx by gt', *.txt for 'imagefile gt'", false,"test/exemplars.txt","string"); cmd.add( exemplarFileArg ); //TCLAP::ValueArg<string> exemplarLocArg("7","exemplar_locations","exemplar locations file", false,"test/exemplars.txt","string"); //cmd.add( exemplarLocArg ); TCLAP::ValueArg<string> imageDirArg("d","images","directory containing images", false,"/home/brian/intel_index/brian_handwriting/EmbeddedAtt_Almazan/datasets/GW/images/","string"); cmd.add( imageDirArg ); TCLAP::ValueArg<string> exemplarDirArg("x","exemplarsDir","directory containing exemplar images", false,"/home/brian/intel_index/data/gw_20p_wannot/bigrams_clean_deslant/","string"); cmd.add( exemplarDirArg ); TCLAP::ValueArg<string> fullFileArg("f","full","do a full sliding window subword spotting on this image", false,"","string"); cmd.add( fullFileArg ); TCLAP::ValueArg<float> hyarg("y","hybridalpha","hybrid alpha, 0 text only, 1 image only", false,-1,"float"); cmd.add( hyarg ); TCLAP::ValueArg<string> charSegCSVArg("3","charSeg","char seg csv file: 'word,pageId,x1,y1,x2,y2,char1start,char1end,char2start,...'", false,"","string"); cmd.add( charSegCSVArg ); cmd.parse( argc, argv ); if ( testF.getValue() ) { EmbAttSpotter spotter("testing",false,true,1); spotter.test(); } if ( evalF.getValue() ) { EmbAttSpotter spotter(modelArg.getValue()); GWDataset train(trainFileArg.getValue(),imageDirArg.getValue()); GWDataset test(testFileArg.getValue(),imageDirArg.getValue()); spotter.setTraining_dataset(&train); if ( retrainAttReprTrF.getValue() ) spotter.attReprTr(true); if ( retrainEmbeddingF.getValue() ) spotter.embedding(true); spotter.eval(&test); } if (primeSubwordArg.getValue()>=0) { EmbAttSpotter spotter(modelArg.getValue()); GWDataset train(trainFileArg.getValue(),imageDirArg.getValue()); GWDataset test(testFileArg.getValue(),imageDirArg.getValue()); spotter.setTraining_dataset(&train); spotter.setCorpus_dataset(&test); spotter.primeSubwordSpotting(primeSubwordArg.getValue()); } if ( evalSubF.getValue() || evalSubCombF.getValue()) { EmbAttSpotter spotter(modelArg.getValue()); GWDataset train(trainFileArg.getValue(),imageDirArg.getValue()); GWDataset test(testFileArg.getValue(),imageDirArg.getValue()); GWDataset exemplars(exemplarFileArg.getValue(),exemplarDirArg.getValue()); spotter.setTraining_dataset(&train); if ( retrainAttReprTrF.getValue() ) spotter.attReprTr(true); if ( retrainEmbeddingF.getValue() ) spotter.embedding(true); if (charSegCSVArg.getValue().length()>0) { vector< vector<int> > corpusXLetterStartBoundsRel; vector< vector<int> > corpusXLetterEndBoundsRel; ifstream in (charSegCSVArg.getValue()); string line; //getline(in,line);//header while (getline(in,line)) { string s; std::stringstream ss(line); getline(ss,s,','); getline(ss,s,','); getline(ss,s,',');//x1 int x1=stoi(s); getline(ss,s,','); getline(ss,s,',');//x2 getline(ss,s,','); vector<int> lettersStartRel, lettersEndRel; while (getline(ss,s,',')) { lettersStartRel.push_back(stoi(s)-x1); getline(ss,s,','); lettersEndRel.push_back(stoi(s)-x1); //getline(ss,s,',');//conf } corpusXLetterStartBoundsRel.push_back(lettersStartRel); corpusXLetterEndBoundsRel.push_back(lettersEndRel); } in.close(); spotter.evalSubwordSpottingWithCharBounds(&exemplars, &test, &corpusXLetterStartBoundsRel, &corpusXLetterEndBoundsRel, hyarg.getValue()); } else if ( evalSubF.getValue() ) spotter.evalSubwordSpotting(&exemplars, &test, hyarg.getValue()); else spotter.evalSubwordSpottingCombine(&exemplars, &test, hyarg.getValue()); } if ( imageArg.getValue()>=0 ) { EmbAttSpotter spotter(modelArg.getValue()); GWDataset train(trainFileArg.getValue(),imageDirArg.getValue()); GWDataset test(testFileArg.getValue(),imageDirArg.getValue()); spotter.setTraining_dataset(&train); spotter.setCorpus_dataset(&test); int ex=imageArg.getValue(); if ( image2Arg.getValue()>=0 ) { int ex2= image2Arg.getValue(); double score = spotter.compare(test.image(ex),test.image(ex2)); cout <<"score: "<<score<<endl; } else { cout <<"test word "<<test.labels()[ex]<<endl; imshow("test word",test.image(ex)); vector<float> scores = spotter.spot(test.image(ex), "", 1); multimap<float, int> ranked; for (int i=0; i<scores.size(); i++) ranked.emplace(scores[i],i); auto iter = ranked.end(); for (int i=1; i<=5; i++) { iter--; cout<<"I rank "<<i<<" is "<<iter->second<<" with score "<<iter->first<<endl; imshow("I "+to_string(i),test.image(iter->second)); } scores = spotter.spot(test.image(ex), test.labels()[ex], 0); ranked.clear(); for (int i=0; i<scores.size(); i++) ranked.emplace(scores[i],i); iter = ranked.end(); for (int i=1; i<=5; i++) { iter--; cout<<"T rank "<<i<<" is "<<iter->second<<" with score "<<iter->first<<endl; imshow("T "+to_string(i),test.image(iter->second)); } waitKey(); } } if (compare1Arg.getValue().length()>0 && compare2Arg.getValue().length()>0) { EmbAttSpotter spotter(modelArg.getValue()); Mat im1 = imread(compare1Arg.getValue(),CV_LOAD_IMAGE_GRAYSCALE); Mat im2 = imread(compare2Arg.getValue(),CV_LOAD_IMAGE_GRAYSCALE); //im1 = GWDataset::preprocess(im1); //im2 = GWDataset::preprocess(im2); cout<<spotter.compare(im1,im2)<<endl;; } if (fullFileArg.getValue().length()>0) { assert(compare1Arg.getValue().length()>0); EmbAttSpotter spotter(modelArg.getValue()); StrideDataset im(fullFileArg.getValue()); spotter.setCorpus_dataset_fullSub(&im); Mat ex = imread(compare1Arg.getValue(),CV_LOAD_IMAGE_GRAYSCALE); clock_t start = clock(); time_t start2 = time(0); vector< SubwordSpottingResult > res = spotter.subwordSpot_full(ex,"",1); clock_t end = clock(); time_t end2 = time(0); double time = (double) (end-start) / CLOCKS_PER_SEC; double time2 = difftime(end2, start2) * 1000.0; cout<<"Took "<<time<<" secs."<<endl; cout<<"Took "<<time2<<" secs."<<endl; Mat img = imread(fullFileArg.getValue()); Mat orig = img.clone(); int top=100; float maxS = res[0].score; float minS = res[top].score; for (int i=0; i<top; i++) { float s = 1-((res[i].score-minS)/(maxS-minS)); //cout <<res[i].score<<": "<<s<<endl; for (int x=res[i].startX; x<=res[i].endX; x++) for (int y=res[i].imIdx*3; y<res[i].imIdx*3 +65; y++) { Vec3b& p = img.at<Vec3b>(y,x); Vec3b o = orig.at<Vec3b>(y,x); p[0] = min(p[0],(unsigned char)(o[0]*s)); } } imwrite("spotting.png",img); imshow("spotting",img); waitKey(); } } catch (TCLAP::ArgException &e) // catch any exceptions { std::cerr << "error: " << e.error() << " for arg " << e.argId() << std::endl; } }