OcrDB.h 2.56 KB
Newer Older
Your Name's avatar
Your Name committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// PaddleOCR车牌检测

#ifndef __OCR_DB_H__
#define __OCR_DB_H__

#include <migraphx/program.hpp>
#include <CommonDefinition.h>
#include <clipper.h>
#include <utility.h>

namespace migraphxSamples
{

typedef struct _DBParameter
{

    float BinaryThreshold;
    float BoxThreshold;
    float UnclipRatio;
    int LimitSideLen;
liucong's avatar
liucong committed
21
    std::string ScoreMode;
Your Name's avatar
Your Name committed
22

liucong's avatar
liucong committed
23
} DBParameter;
Your Name's avatar
Your Name committed
24
25
26

class DB
{
liucong's avatar
liucong committed
27
    public:
Your Name's avatar
Your Name committed
28
29
30
    DB();

    ~DB();
liucong's avatar
liucong committed
31

Your Name's avatar
Your Name committed
32
33
    ErrorCode Initialize(InitializationParameterOfDB InitializationParameterOfDB);

liucong's avatar
liucong committed
34
    ErrorCode Infer(const cv::Mat& img, std::vector<cv::Mat>& imgList);
Your Name's avatar
Your Name committed
35

liucong's avatar
liucong committed
36
    private:
Your Name's avatar
Your Name committed
37
38
39
40
    cv::FileStorage configurationFile;

    migraphx::program net;
    cv::Size inputSize;
liucong's avatar
liucong committed
41
    std::string inputName;
Your Name's avatar
Your Name committed
42
43
44
45
    migraphx::shape inputShape;
    DBParameter dbParameter;
};

liucong's avatar
liucong committed
46
47
48
49
50
class DBPostProcessor
{
    public:
    void
    GetContourArea(const std::vector<std::vector<float>>& box, float unclip_ratio, float& distance);
Your Name's avatar
Your Name committed
51

liucong's avatar
liucong committed
52
    cv::RotatedRect UnClip(std::vector<std::vector<float>> box, const float& unclip_ratio);
Your Name's avatar
Your Name committed
53

liucong's avatar
liucong committed
54
    float** Mat2Vec(cv::Mat mat);
Your Name's avatar
Your Name committed
55

liucong's avatar
liucong committed
56
    std::vector<std::vector<int>> OrderPointsClockwise(std::vector<std::vector<int>> pts);
Your Name's avatar
Your Name committed
57

liucong's avatar
liucong committed
58
    std::vector<std::vector<float>> GetMiniBoxes(cv::RotatedRect box, float& ssid);
Your Name's avatar
Your Name committed
59

liucong's avatar
liucong committed
60
61
    float BoxScoreFast(std::vector<std::vector<float>> box_array, cv::Mat pred);
    float PolygonScoreAcc(std::vector<cv::Point> contour, cv::Mat pred);
Your Name's avatar
Your Name committed
62

liucong's avatar
liucong committed
63
64
65
66
67
68
    std::vector<std::vector<std::vector<int>>>
    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);
Your Name's avatar
Your Name committed
69

liucong's avatar
liucong committed
70
71
72
73
74
    std::vector<std::vector<std::vector<int>>>
    FilterTagDetRes(std::vector<std::vector<std::vector<int>>> boxes,
                    float ratio_h,
                    float ratio_w,
                    cv::Mat srcimg);
Your Name's avatar
Your Name committed
75

liucong's avatar
liucong committed
76
77
    private:
    static bool XsortInt(std::vector<int> a, std::vector<int> b);
Your Name's avatar
Your Name committed
78

liucong's avatar
liucong committed
79
    static bool XsortFp32(std::vector<float> a, std::vector<float> b);
Your Name's avatar
Your Name committed
80

liucong's avatar
liucong committed
81
    std::vector<std::vector<float>> Mat2Vector(cv::Mat mat);
Your Name's avatar
Your Name committed
82

liucong's avatar
liucong committed
83
    inline int _max(int a, int b) { return a >= b ? a : b; }
Your Name's avatar
Your Name committed
84

liucong's avatar
liucong committed
85
    inline int _min(int a, int b) { return a >= b ? b : a; }
Your Name's avatar
Your Name committed
86

liucong's avatar
liucong committed
87
88
89
90
91
92
93
94
95
    template <class T>
    inline T clamp(T x, T min, T max)
    {
        if(x > max)
            return max;
        if(x < min)
            return min;
        return x;
    }
Your Name's avatar
Your Name committed
96

liucong's avatar
liucong committed
97
98
99
100
101
102
103
104
    inline float clampf(float x, float min, float max)
    {
        if(x > max)
            return max;
        if(x < min)
            return min;
        return x;
    }
Your Name's avatar
Your Name committed
105
106
};

liucong's avatar
liucong committed
107
} // namespace migraphxSamples
Your Name's avatar
Your Name committed
108
109

#endif