|
- //
- // Created by 庾金科 on 20/09/2017.
- //
-
- #ifndef SWIFTPR_PLATEINFO_H
- #define SWIFTPR_PLATEINFO_H
- #include <opencv2/opencv.hpp>
- namespace pr {
-
- typedef std::vector<cv::Mat> Character;
-
- enum PlateColor { BLUE, YELLOW, WHITE, GREEN, BLACK,UNKNOWN};
- enum CharType {CHINESE,LETTER,LETTER_NUMS,INVALID};
-
-
- class PlateInfo {
- public:
- std::vector<std::pair<CharType,cv::Mat>> plateChars;
- std::vector<std::pair<CharType,cv::Mat>> plateCoding;
- float confidence = 0;
- PlateInfo(const cv::Mat &plateData, std::string plateName, cv::Rect plateRect, PlateColor plateType) {
- licensePlate = plateData;
- name = plateName;
- ROI = plateRect;
- Type = plateType;
- }
- PlateInfo(const cv::Mat &plateData, cv::Rect plateRect, PlateColor plateType) {
- licensePlate = plateData;
- ROI = plateRect;
- Type = plateType;
- }
- PlateInfo(const cv::Mat &plateData, cv::Rect plateRect) {
- licensePlate = plateData;
- ROI = plateRect;
- }
- PlateInfo() {
-
- }
-
- cv::Mat getPlateImage() {
- return licensePlate;
- }
-
- void setPlateImage(cv::Mat plateImage){
- licensePlate = plateImage;
- }
-
- cv::Rect getPlateRect() {
- return ROI;
- }
-
- void setPlateRect(cv::Rect plateRect) {
- ROI = plateRect;
- }
- cv::String getPlateName() {
- return name;
-
- }
- void setPlateName(cv::String plateName) {
- name = plateName;
- }
- int getPlateType() {
- return Type;
- }
-
- void appendPlateChar(const std::pair<CharType,cv::Mat> &plateChar)
- {
- plateChars.push_back(plateChar);
- }
-
- void appendPlateCoding(const std::pair<CharType,cv::Mat> &charProb){
- plateCoding.push_back(charProb);
- }
-
- // cv::Mat getPlateChars(int id) {
- // if(id<PlateChars.size())
- // return PlateChars[id];
- // }
- std::string decodePlateNormal(std::vector<std::string> mappingTable) {
- std::string decode;
- for(auto plate:plateCoding) {
- float *prob = (float *)plate.second.data;
- if(plate.first == CHINESE) {
-
- decode += mappingTable[std::max_element(prob,prob+31) - prob];
- confidence+=*std::max_element(prob,prob+31);
-
-
- // std::cout<<*std::max_element(prob,prob+31)<<std::endl;
-
- }
-
- else if(plate.first == LETTER) {
- decode += mappingTable[std::max_element(prob+41,prob+65)- prob];
- confidence+=*std::max_element(prob+41,prob+65);
- }
-
- else if(plate.first == LETTER_NUMS) {
- decode += mappingTable[std::max_element(prob+31,prob+65)- prob];
- confidence+=*std::max_element(prob+31,prob+65);
- // std::cout<<*std::max_element(prob+31,prob+65)<<std::endl;
-
- }
- else if(plate.first == INVALID)
- {
- decode+='*';
- }
-
- }
- name = decode;
-
- confidence/=7;
-
- return decode;
- }
-
- private:
- cv::Mat licensePlate;
- cv::Rect ROI;
- std::string name ;
- PlateColor Type;
- };
- }
-
-
- #endif //SWIFTPR_PLATEINFO_H
|