diff --git a/demo/demo/demo.cpp b/demo/demo/demo.cpp index 6a5d9ef..83ed14a 100644 --- a/demo/demo/demo.cpp +++ b/demo/demo/demo.cpp @@ -3,7 +3,8 @@ #include /* srand, rand */ #include #include -#include +#include +#include #include "utils.h" #include @@ -20,6 +21,9 @@ #define MAX_DETECT_SIZE 100 bool gRun; +cv::Mat frame_v; +cv::Mat frame_top_v; +std::mutex sem; void sig_handler(int signo) { @@ -27,6 +31,19 @@ void sig_handler(int signo) gRun = false; } +void *showImages(void *x_void_ptr) +{ + + while (gRun) + { + sem.lock(); + cv::imshow("detection", frame_v); + cv::imshow("topview", frame_top_v); + sem.unlock(); + cv::waitKey(30); + } +} + int main(int argc, char *argv[]) { @@ -49,7 +66,7 @@ int main(int argc, char *argv[]) int CAM_IDX = 0; if (argc > 5) CAM_IDX = atoi(argv[5]); - bool to_show = true; + bool to_show = false; if (argc > 6) to_show = atoi(argv[6]); @@ -66,13 +83,16 @@ int main(int argc, char *argv[]) std::cout << "camera started\n"; cv::Mat frame; + cv::Mat frame_top; + cv::Mat dnn_input; cv::namedWindow("detection", cv::WINDOW_NORMAL); cv::namedWindow("topview", cv::WINDOW_NORMAL); - cv::Mat frame_top; frame_top = cv::imread("../demo/demo/data/map_b.jpg"); + pthread_t visual; + /*projection matrix*/ int proj_matrix_read = 0; @@ -93,7 +113,7 @@ int main(int argc, char *argv[]) double lat, lon, alt; /*tracker infos*/ - srand (time(NULL)); + srand(time(NULL)); std::vector trackers; std::vector cur_frame; int initial_age = -5; @@ -107,7 +127,6 @@ int main(int argc, char *argv[]) while (gRun) { - cap >> frame; if (!frame.data) { @@ -159,10 +178,9 @@ int main(int argc, char *argv[]) //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)); @@ -211,7 +227,25 @@ int main(int argc, char *argv[]) //std::cout << "pix_x: " << camera_p[0].x << " pix_y: " << camera_p[0].y << std::endl; 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); + } + } + + TIMER_START + sem.lock(); + frame_v = frame.clone(); + frame_top_v = frame_top.clone(); + sem.unlock(); + + TIMER_STOP + + if (frame_nbr == 0) + { + + if (pthread_create(&visual, NULL, showImages, NULL)) + { + fprintf(stderr, "Error creating thread\n"); + return 1; } } @@ -220,15 +254,6 @@ int main(int argc, char *argv[]) send_client_dummy(coords, coord_i, sock, socket_opened, CAM_IDX); - - if (to_show) - { - cv::imshow("detection", frame); - cv::imshow("topview", frame_top); - cv::waitKey(1); - } - - } /* for (size_t i = 0; i < trackers.size(); i++)