diff --git a/Src/Model/BioTrackerTrackingAlgorithm.cpp b/Src/Model/BioTrackerTrackingAlgorithm.cpp index cd97a8deb6e801946910a886070e29ec5b9bc301..1f03fda3079174193555b90f04c86cfbd5ad5319 100644 --- a/Src/Model/BioTrackerTrackingAlgorithm.cpp +++ b/Src/Model/BioTrackerTrackingAlgorithm.cpp @@ -11,8 +11,10 @@ #include "BioTrackerTrackingAlgorithm.h" #include <future> #include "TrackedComponents/TrackedComponentFactory.h" +#include "TrackedComponents/pose/FishPose.h" #include <chrono> #include <zmq.hpp> +#define JSON_USE_IMPLICIT_CONVERSIONS 0 #include "json.hpp" using json = nlohmann::json; @@ -70,7 +72,7 @@ void BioTrackerTrackingAlgorithm::request_shared_memory() { _sock.send(zmq::buffer(j.dump())); auto res = _sock.recv(_zmq_msg, zmq::recv_flags::none); auto msg = json::parse(_zmq_msg.to_string_view()); - std::string shm_path = msg["path"]; + std::string shm_path = msg["path"].get<std::string>(); _shm_img = (float*)init_shm_mmap(shm_path.c_str(), _imageX * _imageY * sizeof(float)); } @@ -113,6 +115,8 @@ void BioTrackerTrackingAlgorithm::doTracking(std::shared_ptr<cv::Mat> p_image, u return; } + std::chrono::system_clock::time_point start = std::chrono::system_clock::now(); + cv::Mat grayscale, float_img; cv::cvtColor(*p_image, grayscale, cv::COLOR_BGR2GRAY); grayscale.convertTo(float_img, CV_32F); @@ -128,6 +132,34 @@ void BioTrackerTrackingAlgorithm::doTracking(std::shared_ptr<cv::Mat> p_image, u auto res = _sock.recv(_zmq_msg, zmq::recv_flags::none); auto msg = json::parse(_zmq_msg.to_string_view()); + std::vector<FishPose> poses; + for (auto pos : msg["data"]) { + auto pose = FishPose( + cv::Point2f(1.0, 1.0), // FIXME: Calculate cm + cv::Point2f(pos["x"].get<int>(), pos["y"].get<int>()), + pos["orientation"].get<float>(), + pos["orientation"].get<float>() * (180.0 / CV_PI), + 1.0, // FIXME: width + 1.0, // FIXME: height + 1.0 // FIXME: score + ); + poses.push_back(pose); + } + + //Insert new poses into data structure + int trajNumber = 0; + for (int i = 0; i < _TrackedTrajectoryMajor->size(); i++) { + BST::TrackedTrajectory *t = dynamic_cast<BST::TrackedTrajectory *>(_TrackedTrajectoryMajor->getChild(i)); + if (t && t->getValid() && !t->getFixed()) { + BST::TrackedElement *e = new BST::TrackedElement(t, "n.a.", t->getId()); + + e->setFishPose(poses[trajNumber]); + e->setTime(start); + t->add(e, framenumber); + trajNumber++; + } + } + std::string newSel = _TrackingParameter->getNewSelection(); Q_EMIT emitChangeDisplayImage("Original");