PascalResults.cpp 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. /**
  2. * @file PascalResults.cpp
  3. * @brief read and write pascal style results
  4. * @author Erik Rodner
  5. * @date 09/09/2008
  6. */
  7. #include <iostream>
  8. #include "core/basics/StringTools.h"
  9. #include "PascalResults.h"
  10. using namespace OBJREC;
  11. using namespace std;
  12. // refactor-nice.pl: check this substitution
  13. // old: using namespace ice;
  14. using namespace NICE;
  15. void PascalResults::write ( char *templatefn,
  16. // refactor-nice.pl: check this substitution
  17. // old: const string & imgfn,
  18. const std::string & imgfn,
  19. const LocalizationResult & l,
  20. const ClassNames & classNames )
  21. {
  22. for ( LocalizationResult::const_iterator i = l.begin(); i != l.end(); i++ )
  23. {
  24. const SingleLocalizationResult *sr = *i;
  25. const ClassificationResult *r = sr->r;
  26. int classno = r->classno;
  27. // refactor-nice.pl: check this substitution
  28. // old: string classname = classNames.text(classno);
  29. std::string classname = classNames.text(classno);
  30. double score = r->scores.get(classno);
  31. int xi, yi, xa, ya;
  32. sr->getBoundingBox ( xi, yi, xa, ya );
  33. char filename[1024];
  34. sprintf ( filename, templatefn, classname.c_str() );
  35. ofstream os ( filename, ios_base::app );
  36. if ( !os.good() ) {
  37. fprintf (stderr, "Error writing to filename %s\n", filename );
  38. exit(-1);
  39. }
  40. // refactor-nice.pl: check this substitution
  41. // old: string filetag = StringTools::baseName ( imgfn, false );
  42. std::string filetag = StringTools::baseName ( imgfn, false );
  43. os << filetag << " "
  44. << score << " "
  45. << xi << " "
  46. << yi << " "
  47. << xa << " "
  48. << ya << " " << endl;
  49. os.close();
  50. }
  51. }
  52. void PascalResults::read ( map<string, LocalizationResult *> & results,
  53. // refactor-nice.pl: check this substitution
  54. // old: string filename,
  55. std::string filename,
  56. int classno, int backgroundClassno, bool calibrate )
  57. {
  58. ifstream ifs ( filename.c_str(), ios::in );
  59. if ( ! ifs.good() ) {
  60. fprintf (stderr, "Unable to read file %s\n", filename.c_str() );
  61. exit(-1);
  62. }
  63. // refactor-nice.pl: check this substitution
  64. // old: string id;
  65. std::string id;
  66. double confidence;
  67. double xi, yi, xa, ya;
  68. double minconfidence = numeric_limits<double>::max();
  69. double maxconfidence = - numeric_limits<double>::max();
  70. long objects_count = 0;
  71. vector<SingleLocalizationResult *> slrresults;
  72. while (!ifs.eof())
  73. {
  74. if ( ! (ifs >> id) ) break;
  75. ifs >> confidence;
  76. ifs >> xi;
  77. ifs >> yi;
  78. ifs >> xa;
  79. ifs >> ya;
  80. if ( confidence < minconfidence )
  81. minconfidence = confidence;
  82. if ( confidence > maxconfidence )
  83. maxconfidence = confidence;
  84. map<string, LocalizationResult *>::iterator j = results.find(id);
  85. LocalizationResult *l;
  86. if ( j == results.end() )
  87. {
  88. l = new LocalizationResult( ); // FIXME
  89. results.insert ( pair<string, LocalizationResult *> ( id, l ) );
  90. } else {
  91. l = j->second;
  92. }
  93. SparseVector scores;
  94. scores.insert ( pair<int, double> ( classno, confidence ) );
  95. scores.insert ( pair<int, double> ( backgroundClassno, 1.0 - confidence ) );
  96. SingleLocalizationResult *slr = new SingleLocalizationResult (
  97. new ClassificationResult( classno, scores ), (int)xi, (int)yi, (int)xa, (int)ya );
  98. if ( calibrate )
  99. slrresults.push_back ( slr );
  100. l->push_back ( slr );
  101. objects_count++;
  102. }
  103. ifs.close();
  104. fprintf (stderr, "max %f min %f\n", maxconfidence, minconfidence );
  105. if ( calibrate )
  106. {
  107. if ( fabs(maxconfidence-minconfidence) < 1e-10 ) return;
  108. for ( vector<SingleLocalizationResult *>::iterator i = slrresults.begin();
  109. i != slrresults.end(); i++ )
  110. {
  111. SingleLocalizationResult *slr = *i;
  112. FullVector & scores = slr->r->scores;
  113. double s = scores.get ( classno );
  114. s = (s-minconfidence)/(maxconfidence-minconfidence);
  115. s = 0.1 + 0.9*s;
  116. scores.reinit ( (backgroundClassno > classno) ? backgroundClassno + 1 : classno + 1 );
  117. scores[classno] = s;
  118. scores[classno] = 1.0 - s;
  119. }
  120. }
  121. fprintf (stderr, "PascalResults::read(%s) objects count %ld\n", filename.c_str(), objects_count );
  122. }