-
Notifications
You must be signed in to change notification settings - Fork 659
/
Copy pathrotated_detector.cxx
56 lines (43 loc) · 1.51 KB
/
rotated_detector.cxx
1
2
3
4
5
6
7
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
53
54
55
56
#include "mmdeploy/rotated_detector.hpp"
#include "utils/argparse.h"
#include "utils/visualize.h"
DEFINE_ARG_string(model, "Model path");
DEFINE_ARG_string(image, "Input image path");
DEFINE_string(device, "cpu", R"(Device name, e.g. "cpu", "cuda")");
DEFINE_string(output, "rotated_detector_output.jpg", "Output image path");
DEFINE_double(det_thr, 0.1, "Detection score threshold");
int main(int argc, char* argv[]) {
if (!utils::ParseArguments(argc, argv)) {
return -1;
}
cv::Mat img = cv::imread(ARGS_image);
if (img.empty()) {
fprintf(stderr, "failed to load image: %s\n", ARGS_image.c_str());
return -1;
}
mmdeploy::Profiler profiler("/tmp/profile.bin");
mmdeploy::Context context;
context.Add(mmdeploy::Device(FLAGS_device));
context.Add(profiler);
// construct a detector instance
mmdeploy::RotatedDetector detector(mmdeploy::Model{ARGS_model}, context);
// warmup
for (int i = 0; i < 20; ++i) {
detector.Apply(img);
}
// apply the detector, the result is an array-like class holding references to
// `mmdeploy_rotated_detection_t`, will be released automatically on destruction
mmdeploy::RotatedDetector::Result dets = detector.Apply(img);
// visualize results
utils::Visualize v;
auto sess = v.get_session(img);
for (const mmdeploy_rotated_detection_t& det : dets) {
if (det.score > FLAGS_det_thr) {
sess.add_rotated_det(det.rbbox, det.label_id, det.score);
}
}
if (!FLAGS_output.empty()) {
cv::imwrite(FLAGS_output, sess.get());
}
return 0;
}