|
|
|
@ -22,6 +22,51 @@ extern "C" { |
|
|
|
|
|
|
|
|
|
#define FRAMES 3 |
|
|
|
|
|
|
|
|
|
int max_objects() { return C_SHARP_MAX_OBJECTS; } |
|
|
|
|
|
|
|
|
|
static Detector* detector; |
|
|
|
|
//static std::unique_ptr<Detector> detector;
|
|
|
|
|
|
|
|
|
|
int init(const char *configurationFilename, const char *weightsFilename, int gpu) { |
|
|
|
|
std::string configurationFilenameString; |
|
|
|
|
configurationFilenameString = configurationFilename; |
|
|
|
|
std::string weightsFilenameString; |
|
|
|
|
weightsFilenameString = weightsFilename; |
|
|
|
|
|
|
|
|
|
detector = new Detector(configurationFilenameString, weightsFilenameString, gpu); |
|
|
|
|
return 1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int detect_image(const char *filename, bbox_t_container &container) { |
|
|
|
|
std::string filenameString; |
|
|
|
|
filenameString = filename; |
|
|
|
|
|
|
|
|
|
std::vector<bbox_t> detection = detector->detect(filenameString); |
|
|
|
|
for (size_t i = 0; i < detection.size() && i < C_SHARP_MAX_OBJECTS; ++i) |
|
|
|
|
container.candidates[i] = detection[i]; |
|
|
|
|
return detection.size(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int detect_image2(const uint8_t* data, const size_t data_length, bbox_t_container &container) { |
|
|
|
|
#ifdef OPENCV |
|
|
|
|
std::vector<char> vdata(data, data + data_length); |
|
|
|
|
cv::Mat image = imdecode(cv::Mat(vdata), 1); |
|
|
|
|
|
|
|
|
|
std::vector<bbox_t> detection = detector->detect(image); |
|
|
|
|
for (size_t i = 0; i < detection.size() && i < C_SHARP_MAX_OBJECTS; ++i) |
|
|
|
|
container.candidates[i] = detection[i]; |
|
|
|
|
return detection.size(); |
|
|
|
|
#else |
|
|
|
|
return -1; |
|
|
|
|
#endif // OPENCV
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int dispose() { |
|
|
|
|
detector->~Detector(); |
|
|
|
|
//detector.reset();
|
|
|
|
|
return 1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#ifdef GPU |
|
|
|
|
void check_cuda(cudaError_t status) { |
|
|
|
|
if (status != cudaSuccess) { |
|
|
|
|