提交Android版实时识别功能
parent
74a7bdf649
commit
581d93e99c
@ -0,0 +1,126 @@
|
||||
//
|
||||
// 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
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue