From 428858eaaec884ff0f3ec35bd06351b4c3a8126b Mon Sep 17 00:00:00 2001 From: mive93 Date: Tue, 7 May 2019 21:07:18 +0200 Subject: [PATCH] mask --- demo/demo/data/mask36.jpg | Bin 0 -> 28950 bytes demo/demo/demo.cpp | 77 +++++++++++++++++++++----------------- 2 files changed, 43 insertions(+), 34 deletions(-) create mode 100644 demo/demo/data/mask36.jpg diff --git a/demo/demo/data/mask36.jpg b/demo/demo/data/mask36.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d91ca4801254a50b224f5271b8eed4d30c027cda GIT binary patch literal 28950 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 /* srand, rand */ #include #include -#include +#include #include #include "utils.h" @@ -22,7 +22,6 @@ bool gRun; - cv::Mat frame_v; cv::Mat frame_top_v; std::mutex sem; @@ -45,13 +44,12 @@ void *showImages(void *x_void_ptr) } } - -void draw_arrow(float angleRad, float vel, cv::Scalar color, cv::Point center, cv::Mat &frame) +void draw_arrow(float angleRad, float vel, cv::Scalar color, cv::Point center, cv::Mat &frame) { - int angle = angleRad*180.0/CV_PI; - auto length = 10*vel; + int angle = angleRad * 180.0 / CV_PI; + auto length = 10 * vel; auto direction = cv::Point(length * cos(angleRad), length * sin(angleRad)); // calculate direction - double tipLength = .2 + 0.4 * ( angle%180) / 360; + double tipLength = .2 + 0.4 * (angle % 180) / 360; int lineType = 8; int thickness = 2; cv::arrowedLine(frame, center, center + direction, color, thickness, lineType, 0, tipLength); // draw arrow! @@ -78,12 +76,13 @@ int main(int argc, char *argv[]) int CAM_IDX = 0; if (argc > 5) CAM_IDX = atoi(argv[5]); - bool to_show = false; + bool to_show = true; if (argc > 6) to_show = atoi(argv[6]); + char *maskfile = "../demo/demo/data/mask36.jpg"; + if (argc > 7) + maskfile = argv[7]; - - tk::dnn::Yolo3Detection yolo; yolo.init(net); yolo.thresh = 0.25; @@ -94,16 +93,16 @@ int main(int argc, char *argv[]) if (!cap.isOpened()) gRun = false; else - std::cout <<"camera started\n"; + std::cout << "camera started\n"; cv::Mat frame; cv::Mat frame_top; cv::Mat dnn_input; cv::Mat original_frame_top; - + pthread_t visual; - - if(to_show) + + if (to_show) { cv::namedWindow("detection", cv::WINDOW_NORMAL); cv::namedWindow("topview", cv::WINDOW_NORMAL); @@ -130,8 +129,12 @@ int main(int argc, char *argv[]) double east, north, up; double lat, lon, alt; + /*Mask info*/ + cv::Mat mask; + mask = cv::imread(maskfile, cv::IMREAD_GRAYSCALE); + /*tracker infos*/ - srand (time(NULL)); + srand(time(NULL)); std::vector trackers; std::vector cur_frame; int initial_age = -5; @@ -142,6 +145,7 @@ int main(int argc, char *argv[]) int frame_nbr = 0; while (gRun) { + cap >> frame; if (!frame.data) { @@ -176,18 +180,23 @@ int main(int argc, char *argv[]) int y1 = b.y + b.h; int obj_class = b.cl; - if (obj_class == 0 /*person*/ || obj_class == 1 /*bicycle*/ || obj_class == 2 /*car*/ - || obj_class == 3 /*motorbike*/ || obj_class == 5 /*bus*/) + cv::Scalar intensity = mask.at(cv::Point(int(x0 + b.w / 2), y1)); + + if (intensity[0]) { - convert_coords(coords, coord_i, x0 + b.w / 2, y1, obj_class, H, adfGeoTransform, frame_nbr); - coord_i++; + + if (obj_class == 0 /*person*/ || obj_class == 1 /*bicycle*/ || obj_class == 2 /*car*/ + || obj_class == 3 /*motorbike*/ || obj_class == 5 /*bus*/) + { + convert_coords(coords, coord_i, x0 + b.w / 2, y1, obj_class, H, adfGeoTransform, frame_nbr); + coord_i++; + } + + float prob = b.prob; + + //std::cout<= 0 && pix_y >= 0) - cv::circle(frame_top, cv::Point(pix_x,pix_y), 7.0, cv::Scalar(t.r_, t.g_, t.b_), CV_FILLED, 8, 0); + if (pix_x < frame_top.cols && pix_y < frame_top.rows && pix_x >= 0 && pix_y >= 0) + cv::circle(frame_top, cv::Point(pix_x, pix_y), 7.0, cv::Scalar(t.r_, t.g_, t.b_), CV_FILLED, 8, 0); std::vector map_p, camera_p; map_p.push_back(cv::Point2f(pix_x, pix_y)); @@ -239,7 +248,7 @@ int main(int argc, char *argv[]) cv::circle(frame, cv::Point(camera_p[0].x, camera_p[0].y), 3.0, cv::Scalar(t.r_, t.g_, t.b_), CV_FILLED, 8, 0); - if(p == t.pred_list_.size()-1) + /*if(p == t.pred_list_.size()-1) { auto center = cv::Point(camera_p[0].x, camera_p[0].y); auto color = cv::Scalar(t.r_, t.g_, t.b_); @@ -247,12 +256,12 @@ int main(int argc, char *argv[]) center = cv::Point(pix_x,pix_y); draw_arrow(t.pred_list_[p].yaw_, t.pred_list_[p].vel_,color, center, frame_top); - } + }*/ } } } - if(to_show) + if (to_show) { sem.lock(); frame_v = frame.clone();