diff --git a/CMakeLists.txt b/CMakeLists.txt index b99a5ef..327742d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -105,7 +105,7 @@ add_executable(yolo3_demo demo/demo/demo.cpp target_link_libraries(yolo3_demo tkDNN) -target_link_libraries(yolo3_demo python2.7) +target_link_libraries(yolo3_demo python2.7 yaml-cpp) add_executable(class_server demo/server/server_less_dummy.cpp) target_link_libraries(class_server pthread tkDNN ) diff --git a/demo/demo/data/calib36.params b/demo/demo/data/calib36.params new file mode 100644 index 0000000..4e4d97b --- /dev/null +++ b/demo/demo/data/calib36.params @@ -0,0 +1,22 @@ +%YAML:1.0 +--- +calibration_time: "Mon 06 May 2019 11:32:13 PM CEST" +image_width: 1920 +image_height: 1080 +board_width: 8 +board_height: 6 +square_size: 2.4799999237060547e+01 +flags: 0 +camera_matrix: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ 1.6158690952190570e+03, 0., 9.4702812371722337e+02, 0., + 1.6123979985757153e+03, 5.1995630055718266e+02, 0., 0., 1. ] +distortion_coefficients: !!opencv-matrix + rows: 5 + cols: 1 + dt: d + data: [ -4.0971199964304100e-01, 1.8755404192050384e-01, + -5.3059322427743867e-03, -1.0380603625304912e-03, 0. ] +avg_reprojection_error: 3.4351035832972515e-01 diff --git a/demo/demo/demo.cpp b/demo/demo/demo.cpp index 1042052..e2d3322 100644 --- a/demo/demo/demo.cpp +++ b/demo/demo/demo.cpp @@ -84,6 +84,9 @@ int main(int argc, char *argv[]) char *maskfile = "../demo/demo/data/mask36.jpg"; if (argc > 7) maskfile = argv[7]; + char *cameraCalib = "../demo/demo/data/calib36.params"; + if (argc > 8) + cameraCalib = argv[7]; tk::dnn::Yolo3Detection yolo; yolo.init(net); @@ -112,25 +115,26 @@ int main(int argc, char *argv[]) original_frame_top = frame_top.clone(); } - /*projection matrix*/ + /*projection matrix from camera to map*/ int proj_matrix_read = 0; cv::Mat H(cv::Size(3, 3), CV_64FC1); /*Camera calibration*/ - float data[9] = {1.6158690952190570e+03, 0., 9.4702812371722337e+02, 0., 1.6123979985757153e+03, 5.1995630055718266e+02, 0., 0., 1.}; - cv::Mat camera_matrix = cv::Mat(3, 3, CV_32F, data); - std::cout << camera_matrix << std::endl; - float data_dc[5] = {-4.0971199964304100e-01, 1.8755404192050384e-01, -5.3059322427743867e-03, -1.0380603625304912e-03, 0.}; - cv::Mat distortion_coefficients = cv::Mat(5, 1, CV_32F, data_dc); - std::cout << distortion_coefficients << std::endl; - - YAML::Node config = YAML::LoadFile("/home/classfog1/repos/tkDNN/demo/demo/data/calib36.params"); + YAML::Node config = YAML::LoadFile(cameraCalib); const YAML::Node &node_test1 = config["camera_matrix"]; - for (std::size_t i = 0; i < node_test1.size(); i++) - { - const YAML::Node &node_test2 = node_test1[i]; - //std::cout << "Id: " << node_test2["data"].as() << std::endl; - } + + float data_cm[9]; + for (std::size_t i = 0; i < node_test1["data"].size(); i++) + data_cm[i] = node_test1["data"][i].as(); + cv::Mat cameraMat = cv::Mat(3, 3, CV_32F, data_cm); + std::cout << cameraMat << std::endl; + const YAML::Node &node_test2 = config["distortion_coefficients"]; + + float data_dc[5]; + for (std::size_t i = 0; i < node_test2["data"].size(); i++) + data_dc[i] = node_test2["data"][i].as(); + cv::Mat distCoeff = cv::Mat(5, 1, CV_32F, data_dc); + std::cout << distCoeff << std::endl; /*GPS information*/ double *adfGeoTransform = (double *)malloc(6 * sizeof(double)); @@ -163,12 +167,11 @@ int main(int argc, char *argv[]) int frame_nbr = 0; while (gRun) { - break; cap >> frame; cv::Mat temp = frame.clone(); - undistort(temp, frame, camera_matrix, distortion_coefficients); + undistort(temp, frame, cameraMat, distCoeff); //cv::imwrite("undistorted.jpg", frame); if (!frame.data)