main.cpp 5.51 KB
Newer Older
Your Name's avatar
Your Name committed
1
2
3
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
liucong's avatar
liucong committed
4
5
6
#include <SimpleLog.h>
#include <Filesystem.h>
#include <YOLOV5.h>
Your Name's avatar
Your Name committed
7

shizhm's avatar
shizhm committed
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
void MIGraphXSamplesUsage(char* programName)
{
    printf("Usage : %s <index> \n", programName);
    printf("index:\n");
    printf("\t 0) YOLOV5 sample.\n");
    printf("\t 1) YOLOV5 Dynamic sample.\n");
}

void Sample_YOLOV5();
void Sample_YOLOV5_Dynamic();

int main(int argc, char *argv[])
{
    if (argc < 2 || argc > 2)
    {
        MIGraphXSamplesUsage(argv[0]);
        return -1;
    }
    if (!strncmp(argv[1], "-h", 2))
    {
        MIGraphXSamplesUsage(argv[0]);
        return 0;
    }
    switch (*argv[1])
    {
        case '0':
            {
                Sample_YOLOV5();
                break;
            }
        case '1':
            {
                Sample_YOLOV5_Dynamic();
                break;
            }
        default :
            {
                MIGraphXSamplesUsage(argv[0]);
                break;
            }
    }
    return 0;
}

void Sample_YOLOV5()
Your Name's avatar
Your Name committed
53
{
liucong's avatar
liucong committed
54
55
56
57
    // 创建YOLOV5检测器
    migraphxSamples::DetectorYOLOV5 detector;
    migraphxSamples::InitializationParameterOfDetector initParamOfDetectorYOLOV5;
    initParamOfDetectorYOLOV5.configFilePath = CONFIG_FILE;
shizhm's avatar
shizhm committed
58
59
60
61
62
63
64
65
66
67
    migraphxSamples::ErrorCode errorCode=detector.Initialize(initParamOfDetectorYOLOV5, false);
    if(errorCode!=migraphxSamples::SUCCESS)
    {
        LOG_ERROR(stdout, "fail to initialize detector!\n");
        exit(-1);
    }
    LOG_INFO(stdout, "succeed to initialize detector\n");

    // 读取测试图片
    cv::Mat srcImage = cv::imread("../Resource/Images/DynamicPics/image1.jpg",1);
shizhm's avatar
shizhm committed
68
69
70

    // 静态推理固定尺寸
    std::vector<std::size_t> inputShape={1,3,608,608};
shizhm's avatar
shizhm committed
71
72
73
    
    // 推理
    std::vector<migraphxSamples::ResultOfDetection> predictions;
shizhm's avatar
shizhm committed
74
    detector.Detect(srcImage,inputShape,predictions,false);
shizhm's avatar
shizhm committed
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
    
    // 获取推理结果
    LOG_INFO(stdout,"========== Detection Results ==========\n");
    for(int i=0;i<predictions.size();++i)
    {
        migraphxSamples::ResultOfDetection result=predictions[i];
        cv::rectangle(srcImage,result.boundingBox,cv::Scalar(0,255,255),2);

        std::string label = cv::format("%.2f", result.confidence);
        label = result.className + " " + label;
        int left = predictions[i].boundingBox.x;
        int top = predictions[i].boundingBox.y;
        int baseLine;
        cv::Size labelSize = cv::getTextSize(label, cv::FONT_HERSHEY_SIMPLEX, 0.5, 1, &baseLine);
        top = max(top, labelSize.height);
        cv::putText(srcImage, label, cv::Point(left, top-10), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(0, 255, 255), 2);

        LOG_INFO(stdout,"box:%d %d %d %d,label:%d,confidence:%f\n",predictions[i].boundingBox.x,
        predictions[i].boundingBox.y,predictions[i].boundingBox.width,predictions[i].boundingBox.height,predictions[i].classID,predictions[i].confidence);
    }
    cv::imwrite("Result.jpg",srcImage);
    LOG_INFO(stdout,"Detection results have been saved to ./Result.jpg\n");

}

void Sample_YOLOV5_Dynamic()
{
    // 创建YOLOV5检测器
    migraphxSamples::DetectorYOLOV5 detector;
    migraphxSamples::InitializationParameterOfDetector initParamOfDetectorYOLOV5;
    initParamOfDetectorYOLOV5.configFilePath = CONFIG_FILE;
    migraphxSamples::ErrorCode errorCode=detector.Initialize(initParamOfDetectorYOLOV5, true);
liucong's avatar
liucong committed
107
    if(errorCode!=migraphxSamples::SUCCESS)
Your Name's avatar
Your Name committed
108
    {
liucong's avatar
liucong committed
109
110
        LOG_ERROR(stdout, "fail to initialize detector!\n");
        exit(-1);
Your Name's avatar
Your Name committed
111
    }
liucong's avatar
liucong committed
112
113
    LOG_INFO(stdout, "succeed to initialize detector\n");

114
115
116
117
118
119
    // 读取测试图像
    std::vector<cv::Mat> srcImages;
    cv::String folder = "../Resource/Images/DynamicPics";
    std::vector<cv::String> imagePathList;
    cv::glob(folder,imagePathList);
    for (int i = 0; i < imagePathList.size(); ++i)
Your Name's avatar
Your Name committed
120
    {
shizhm's avatar
shizhm committed
121
        cv:: Mat srcImage=cv::imread(imagePathList[i], 1);
122
123
124
125
126
127
128
129
130
131
132
133
        srcImages.push_back(srcImage); 
    }

    // 设置动态推理shape
    std::vector<std::vector<std::size_t>> inputShapes;
    inputShapes.push_back({1,3,416,416});
    inputShapes.push_back({1,3,608,608});

    for (int i = 0; i < srcImages.size(); ++i)
    {
        // 推理
        std::vector<migraphxSamples::ResultOfDetection> predictions;
shizhm's avatar
shizhm committed
134
        detector.Detect(srcImages[i], inputShapes[i], predictions, true);
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157

        // 获取推理结果
        LOG_INFO(stdout,"========== Detection Image%d Results ==========\n", i);
        for(int j=0;j<predictions.size();++j)
        {
            migraphxSamples::ResultOfDetection result=predictions[j];
            cv::rectangle(srcImages[i],result.boundingBox,cv::Scalar(0,255,255),2);

            std::string label = cv::format("%.2f", result.confidence);
            label = result.className + " " + label;
            int left = predictions[j].boundingBox.x;
            int top = predictions[j].boundingBox.y;
            int baseLine;
            cv::Size labelSize = cv::getTextSize(label, cv::FONT_HERSHEY_SIMPLEX, 0.5, 1, &baseLine);
            top = max(top, labelSize.height);
            cv::putText(srcImages[i], label, cv::Point(left, top-10), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(0, 255, 255), 2);

            LOG_INFO(stdout,"box:%d %d %d %d,label:%d,confidence:%f\n",predictions[j].boundingBox.x,
            predictions[j].boundingBox.y,predictions[j].boundingBox.width,predictions[j].boundingBox.height,predictions[j].classID,predictions[j].confidence);
        }
        std::string imgName = cv::format("Result%d.jpg", i);
        cv::imwrite(imgName, srcImages[i]);
        LOG_INFO(stdout,"Detection results have been saved to ./Result%d.jpg\n", i);
Your Name's avatar
Your Name committed
158
159
    }
}