-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdnn.cpp
More file actions
169 lines (145 loc) · 4.69 KB
/
Copy pathdnn.cpp
File metadata and controls
169 lines (145 loc) · 4.69 KB
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
// This file is a part of the LibCVC project.
// It is subject to the license terms in the LICENSE file found
// in the top-level directory of this distribution.
#include "dnn.h"
CvEnum cv_dnn_backend_enum[] = {
{"DNN_BACKEND_DEFAULT", cv::dnn::DNN_BACKEND_DEFAULT},
{"DNN_BACKEND_HALIDE", cv::dnn::DNN_BACKEND_HALIDE},
{"DNN_BACKEND_INFERENCE_ENGINE", cv::dnn::DNN_BACKEND_INFERENCE_ENGINE},
{"DNN_BACKEND_OPENCV", cv::dnn::DNN_BACKEND_OPENCV},
{"DNN_BACKEND_VKCOM", cv::dnn::DNN_BACKEND_VKCOM},
{nullptr, 0}
};
CvEnum cv_dnn_target_enum[] = {
{"DNN_TARGET_CPU", cv::dnn::DNN_TARGET_CPU},
{"DNN_TARGET_OPENCL", cv::dnn::DNN_TARGET_OPENCL},
{"DNN_TARGET_OPENCL_FP16", cv::dnn::DNN_TARGET_OPENCL_FP16},
{"DNN_TARGET_MYRIAD", cv::dnn::DNN_TARGET_MYRIAD},
{"DNN_TARGET_VULKAN", cv::dnn::DNN_TARGET_VULKAN},
{"DNN_TARGET_FPGA", cv::dnn::DNN_TARGET_FPGA},
{nullptr, 0}
};
error_t cv_dnn_read_net(const char * model, const char * config, const char * framework, Net * out_net) {
try_
auto net = cv::dnn::readNet(model, config, framework);
if (net.empty()) return cv_set_error(OTHER_ERROR, "Cannot read net");
*out_net = new cv::dnn::Net(net);
end_
}
error_t cv_dnn_net_free(Net net) {
try_
delete net;
end_
}
error_t cv_dnn_net_empty(Net net, bool * out_value) {
try_
*out_value = net->empty();
end_
}
error_t cv_dnn_net_set_input(Net net, Mat blob, const char* name, double scale_factor, Scalar mean) {
try_
net->setInput(*blob, name, scale_factor, *mean);
end_
}
error_t cv_dnn_net_forward(Net net, const char * output_name, Mat out_result) {
try_
out_result->operator=(net->forward());
end_
}
error_t cv_dnn_net_forward_layers(Net net, Strings layer_names, Mats out_result) {
try_
net->forward(*out_result, *layer_names);
end_
}
error_t cv_dnn_net_set_preferable_backend(Net net, int backend) {
try_
net->setPreferableBackend(backend);
end_
}
error_t cv_dnn_net_set_preferable_target(Net net, int target) {
try_
net->setPreferableTarget(target);
end_
}
error_t cv_dnn_net_get_perf_profile(Net net, Doubles out_layers, int64_t * out_time) {
try_
*out_time = net->getPerfProfile(*out_layers);
end_
}
error_t cv_dnn_blob_from_images(Mats images,
Mat out_blob,
double scale_factor,
Size size,
Scalar mean,
bool swap_rb,
bool crop,
int depth)
{
try_
cv::dnn::blobFromImages(*images, *out_blob, scale_factor, *size,
*mean, swap_rb, crop, depth);
end_
}
error_t cv_dnn_net_get_layer_names(Net net, Strings names) {
try_
names->operator=(net->getLayerNames());
end_
}
error_t cv_dnn_net_get_layer_with_name(Net net, const char * layer_name, Layer * out_layer) {
try_
*out_layer = new cv::Ptr<cv::dnn::Layer>(net->getLayer(layer_name));
end_
}
error_t cv_dnn_net_get_layer_with_id(Net net, int layer_id, Layer * out_layer) {
try_
*out_layer = new cv::Ptr<cv::dnn::Layer>(net->getLayer(layer_id));
end_
}
error_t cv_dnn_layer_blobs(Layer layer, Mats out_mats) {
try_
out_mats->operator=((*layer)->blobs);
end_
}
error_t cv_dnn_layer_add_blob(Layer layer, Mat blob) {
try_
(*layer)->blobs.push_back(*blob);
end_
}
error_t cv_dnn_layer_free(Layer layer) {
try_
delete layer;
end_
}
error_t cv_dnn_layer_input_name_to_index(Layer layer, const char* name, int * out_index) {
try_
*out_index = (*layer)->inputNameToIndex(name);
end_
}
error_t cv_dnn_layer_output_name_to_index(Layer layer, const char* name, int * out_index) {
try_
*out_index = (*layer)->outputNameToIndex(name);
end_
}
error_t cv_dnn_layer_name(Layer layer, const char ** out_name) {
try_
*out_name = (*layer)->name.c_str();
end_
}
error_t cv_dnn_layer_type(Layer layer, const char ** out_type) {
try_
*out_type = (*layer)->type.c_str();
end_
}
error_t cv_dnn_nms_boxes(RotatedRects bboxes,
Floats scores,
float score_threshold,
float nms_threshold,
float eta,
int top_k,
Ints out_indices)
{
try_
std::vector<cv::RotatedRect> rboxes(*bboxes);
cv::dnn::NMSBoxes(rboxes, *scores, score_threshold, nms_threshold, *out_indices, eta, top_k);
end_
}