.NET/C# support integration

Add logic for .NET/C# integration (DllImport)
pull/1085/head
Tino Hager 7 years ago
parent 79caf3837a
commit 8d2f2653c8
  1. 45
      src/yolo_v2_class.cpp
  2. 11
      src/yolo_v2_class.hpp

@ -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) {

@ -28,6 +28,11 @@ struct image_t {
float *data; // pointer to the image data
};
#define C_SHARP_MAX_OBJECTS 1000
struct bbox_t_container {
bbox_t candidates[C_SHARP_MAX_OBJECTS];
};
#ifdef __cplusplus
#include <memory>
#include <vector>
@ -40,6 +45,12 @@ struct image_t {
#include "opencv2/imgproc/imgproc_c.h" // C
#endif // OPENCV
extern "C" __declspec(dllexport) int max_objects();
extern "C" __declspec(dllexport) int init(const char *configurationFilename, const char *weightsFilename, int gpu);
extern "C" __declspec(dllexport) int detect_image(const char *filename, bbox_t_container &container);
extern "C" __declspec(dllexport) int detect_image2(const uint8_t* data, const size_t data_length, bbox_t_container &container);
extern "C" __declspec(dllexport) int dispose();
class Detector {
std::shared_ptr<void> detector_gpu_ptr;
std::deque<std::vector<bbox_t>> prev_bbox_vec_deque;

Loading…
Cancel
Save