From b448fbfe04e050df7324a837adccffd2a92f0d7d Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Sun, 26 Oct 2014 16:43:27 -0400 Subject: [PATCH] Added scorekeeper class to manage scores/weights for platecorners --- src/openalpr/edges/scorekeeper.cpp | 75 ++++++++++++++++++++++++++++++ src/openalpr/edges/scorekeeper.h | 48 +++++++++++++++++++ 2 files changed, 123 insertions(+) create mode 100644 src/openalpr/edges/scorekeeper.cpp create mode 100644 src/openalpr/edges/scorekeeper.h diff --git a/src/openalpr/edges/scorekeeper.cpp b/src/openalpr/edges/scorekeeper.cpp new file mode 100644 index 0000000..a7fcfe3 --- /dev/null +++ b/src/openalpr/edges/scorekeeper.cpp @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2014 New Designs Unlimited, LLC + * Opensource Automated License Plate Recognition [http://www.openalpr.com] + * + * This file is part of OpenAlpr. + * + * OpenAlpr is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License + * version 3 as published by the Free Software Foundation + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . +*/ + +#include + +#include "scorekeeper.h" + +ScoreKeeper::ScoreKeeper() { +} + + +ScoreKeeper::~ScoreKeeper() { +} + +void ScoreKeeper::setScore(std::string weight_id, float score, float weight) { + + // Assume that we never set this value twice + weight_ids.push_back(weight_id); + scores.push_back(score); + weights.push_back(weight); +} + + +float ScoreKeeper::getTotal() { + + float score = 0; + + for (unsigned int i = 0; i < weights.size(); i++) + { + score += scores[i] * weights[i]; + } + + return score; +} + +void ScoreKeeper::printDebugScores() { + + int longest_weight_id = 0; + for (unsigned int i = 0; i < weight_ids.size(); i++) + { + if (weight_ids[i].length() > longest_weight_id) + longest_weight_id = weight_ids[i].length(); + } + + float total = getTotal(); + + for (unsigned int i = 0; i < weight_ids.size(); i++) + { + float percent_of_total = (scores[i] * weights[i]) / total * 100; + + std::cout << " - " << std::setw(longest_weight_id + 1) << std::left << weight_ids[i] << + " Weighted Score: " << std::setw(10) << std::left << (scores[i] * weights[i]) << + " Orig Score: " << std::setw(10) << std::left << scores[i] << + " (" << percent_of_total << "% of total)" << std::endl; + } + + + std::cout << "Total: " << total << std::endl; +} \ No newline at end of file diff --git a/src/openalpr/edges/scorekeeper.h b/src/openalpr/edges/scorekeeper.h new file mode 100644 index 0000000..9bc773f --- /dev/null +++ b/src/openalpr/edges/scorekeeper.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2014 New Designs Unlimited, LLC + * Opensource Automated License Plate Recognition [http://www.openalpr.com] + * + * This file is part of OpenAlpr. + * + * OpenAlpr is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License + * version 3 as published by the Free Software Foundation + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . +*/ + +#ifndef OPENALPR_SCOREKEEPER_H +#define OPENALPR_SCOREKEEPER_H + +#include +#include +#include + +class ScoreKeeper { +public: + ScoreKeeper(); + virtual ~ScoreKeeper(); + + void setScore(std::string weight_id, float score, float weight); + + float getTotal(); + + void printDebugScores(); + +private: + + std::vector weight_ids; + std::vector weights; + + std::vector scores; + +}; + +#endif /* OPENALPR_SCOREKEEPER_H */ +