// PaddleOCR车牌检测 #ifndef __OCR_DB_H__ #define __OCR_DB_H__ #include #include #include #include namespace migraphxSamples { typedef struct _DBParameter { float BinaryThreshold; float BoxThreshold; float UnclipRatio; int LimitSideLen; std::string ScoreMode; } DBParameter; class DB { public: DB(); ~DB(); ErrorCode Initialize(InitializationParameterOfDB InitializationParameterOfDB); ErrorCode Infer(const cv::Mat& img, std::vector& imgList); private: cv::FileStorage configurationFile; migraphx::program net; cv::Size inputSize; std::string inputName; migraphx::shape inputShape; DBParameter dbParameter; }; class DBPostProcessor { public: void GetContourArea(const std::vector>& box, float unclip_ratio, float& distance); cv::RotatedRect UnClip(std::vector> box, const float& unclip_ratio); float** Mat2Vec(cv::Mat mat); std::vector> OrderPointsClockwise(std::vector> pts); std::vector> GetMiniBoxes(cv::RotatedRect box, float& ssid); float BoxScoreFast(std::vector> box_array, cv::Mat pred); float PolygonScoreAcc(std::vector contour, cv::Mat pred); std::vector>> BoxesFromBitmap(const cv::Mat pred, const cv::Mat bitmap, const float& box_thresh, const float& det_db_unclip_ratio, const std::string& det_db_score_mode); std::vector>> FilterTagDetRes(std::vector>> boxes, float ratio_h, float ratio_w, cv::Mat srcimg); private: static bool XsortInt(std::vector a, std::vector b); static bool XsortFp32(std::vector a, std::vector b); std::vector> Mat2Vector(cv::Mat mat); inline int _max(int a, int b) { return a >= b ? a : b; } inline int _min(int a, int b) { return a >= b ? b : a; } template inline T clamp(T x, T min, T max) { if(x > max) return max; if(x < min) return min; return x; } inline float clampf(float x, float min, float max) { if(x > max) return max; if(x < min) return min; return x; } }; } // namespace migraphxSamples #endif