Skip to content
Snippets Groups Projects
Commit 2cd04da1 authored by Max Breitenfeldt's avatar Max Breitenfeldt
Browse files

Add debug messages

parent 8355c3ef
No related branches found
No related tags found
No related merge requests found
Pipeline #50371 failed
#include "BioTrackerTrackingAlgorithm.h"
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <sys/mman.h>
#include <sys/stat.h>
#include <unistd.h>
#include <iostream>
#include "BioTrackerTrackingAlgorithm.h"
#include <future>
#include "TrackedComponents/pose/FishPose.h"
#include <chrono>
#include <future>
#include <iostream>
#include <string>
#include <zmq.hpp>
#include "TrackedComponents/pose/FishPose.h"
#define JSON_USE_IMPLICIT_CONVERSIONS 0
#include "json.hpp"
using json = nlohmann::json;
BioTrackerTrackingAlgorithm::BioTrackerTrackingAlgorithm(IController *parent, IModel* parameter, IModel* trajectory)
: IModelTrackingAlgorithm(parent)
{
_cfg = static_cast<ControllerTrackingAlgorithm*>(parent)->getConfig();
_TrackingParameter = (TrackerParameter*)parameter;
_TrackedTrajectoryMajor = (BST::TrackedTrajectory*)trajectory;
BioTrackerTrackingAlgorithm::BioTrackerTrackingAlgorithm(IController *parent,
IModel *parameter,
IModel *trajectory)
: IModelTrackingAlgorithm(parent) {
_cfg = static_cast<ControllerTrackingAlgorithm *>(parent)->getConfig();
_TrackingParameter = (TrackerParameter *)parameter;
_TrackedTrajectoryMajor = (BST::TrackedTrajectory *)trajectory;
_noFish = -1;
_noFish = -1;
_lastImage = nullptr;
_lastFramenumber = -1;
}
BioTrackerTrackingAlgorithm::~BioTrackerTrackingAlgorithm()
{
stop_python();
}
BioTrackerTrackingAlgorithm::~BioTrackerTrackingAlgorithm() { stop_python(); }
void BioTrackerTrackingAlgorithm::init_shared_memory() {
json j = {
{ "type", "request_shared_memory" },
{ "width", _imageX },
{ "height", _imageY },
{"type", "request_shared_memory"},
{"width", _imageX},
{"height", _imageY},
};
_sock.send(zmq::buffer(j.dump()));
auto res = _sock.recv(_zmq_msg, zmq::recv_flags::none);
......@@ -53,16 +53,15 @@ void BioTrackerTrackingAlgorithm::init_shared_memory() {
throw "shm_open";
}
void *shm_buf = mmap(NULL, shm_len,
PROT_READ | PROT_WRITE,
MAP_SHARED, fd, 0);
void *shm_buf =
mmap(NULL, shm_len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
close(fd);
if (shm_buf == MAP_FAILED) {
throw "mmap";
}
_shm_img = (float*)shm_buf;
_shm_img = (float *)shm_buf;
}
void BioTrackerTrackingAlgorithm::stop_python() {
......@@ -76,19 +75,23 @@ void BioTrackerTrackingAlgorithm::start_python() {
stop_python();
auto model_path = _TrackingParameter->getModelPath().toStdString();
_python_process = boost::process::child(
boost::process::search_path("python3"),
boost::process::args({
"-c", "from biotracker import BiotrackerAdapter;"
"BiotrackerAdapter('" + model_path + "'"
",verbose=True).run();"
}), _python_process_group);
boost::process::search_path("python3"),
boost::process::args({"-c",
"from biotracker import BiotrackerAdapter;"
"BiotrackerAdapter('" +
model_path +
"'"
",verbose=True).run();"}),
_python_process_group);
fprintf(stderr, "Adapter started\n");
_sock = zmq::socket_t(_ctx, zmq::socket_type::req);
_sock.connect("ipc:///tmp/biotracker.python.zmq");
}
void BioTrackerTrackingAlgorithm::receiveAreaDescriptorUpdate(IModelAreaDescriptor *areaDescr) {
_areaInfo = areaDescr;
void BioTrackerTrackingAlgorithm::receiveAreaDescriptorUpdate(
IModelAreaDescriptor *areaDescr) {
_areaInfo = areaDescr;
}
void BioTrackerTrackingAlgorithm::receiveParametersChanged() {
......@@ -101,35 +104,40 @@ void BioTrackerTrackingAlgorithm::receiveParametersChanged() {
}
}
void BioTrackerTrackingAlgorithm::doTracking(std::shared_ptr<cv::Mat> p_image, uint framenumber)
{
void BioTrackerTrackingAlgorithm::doTracking(std::shared_ptr<cv::Mat> p_image,
uint framenumber) {
_lastImage = p_image;
_lastFramenumber = framenumber;
//dont do nothing if we ain't got an image
if (p_image->empty()) {
return;
}
// dont do nothing if we ain't got an image
if (p_image->empty()) {
return;
}
// skip frame if model is not yet loaded
if (_python_process.has_value()) {
if (!_python_process) {
fprintf(stderr, "Adapter not running!\n");
return;
}
if (_imageX != p_image->size().width || _imageY != p_image->size().height) {
_imageX = p_image->size().width;
_imageY = p_image->size().height;
if (_imageX != p_image->size().width || _imageY != p_image->size().height) {
_imageX = p_image->size().width;
_imageY = p_image->size().height;
fprintf(stderr, "Initializing shared memory...\n");
init_shared_memory();
Q_EMIT emitDimensionUpdate(_imageX, _imageY);
}
fprintf(stderr, "Done\n");
Q_EMIT emitDimensionUpdate(_imageX, _imageY);
}
//Refuse to run tracking if we have no area info...
if (_AreaInfo == nullptr) {
Q_EMIT emitTrackingDone(framenumber);
return;
}
// Refuse to run tracking if we have no area info...
if (_AreaInfo == nullptr) {
fprintf(stderr, "Missing area info\n");
Q_EMIT emitTrackingDone(framenumber);
return;
}
std::chrono::system_clock::time_point start = std::chrono::system_clock::now();
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);
......@@ -139,8 +147,8 @@ void BioTrackerTrackingAlgorithm::doTracking(std::shared_ptr<cv::Mat> p_image, u
memcpy(_shm_img, img_data, img_data_len);
json j = {
{ "type", "predict_frame" },
{ "frame_id", framenumber },
{"type", "predict_frame"},
{"frame_id", framenumber},
};
_sock.send(zmq::buffer(j.dump()));
auto res = _sock.recv(_zmq_msg, zmq::recv_flags::none);
......@@ -148,36 +156,38 @@ void BioTrackerTrackingAlgorithm::doTracking(std::shared_ptr<cv::Mat> p_image, u
std::vector<std::tuple<int, FishPose>> poses;
for (auto pos : msg["data"]) {
fprintf(stderr, "Here\n");
auto pose = std::make_tuple(
pos["id"].get<int>(),
FishPose(
_areaInfo,
cv::Point2f(pos["x"].get<int>(), pos["y"].get<int>()),
pos["orientation"].get<float>(),
1.0)); // FIXME: score
pos["id"].get<int>(),
FishPose(_areaInfo,
cv::Point2f(pos["x"].get<int>(), pos["y"].get<int>()),
pos["orientation"].get<float>(),
1.0)); // FIXME: score
poses.push_back(pose);
}
std::sort(poses.begin(), poses.end(),
[](std::tuple<int, FishPose> a, std::tuple<int, FishPose> b) {
return std::get<0>(a) < std::get<0>(b);
});
//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(std::get<1>(poses[trajNumber]));
e->setTime(start);
t->add(e, framenumber);
trajNumber++;
}
}
std::string newSel = _TrackingParameter->getNewSelection();
Q_EMIT emitChangeDisplayImage("Original");
Q_EMIT emitTrackingDone(framenumber);
[](std::tuple<int, FishPose> a, std::tuple<int, FishPose> b) {
return std::get<0>(a) < std::get<0>(b);
});
// 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(std::get<1>(poses[trajNumber]));
e->setTime(start);
t->add(e, framenumber);
trajNumber++;
}
}
std::string newSel = _TrackingParameter->getNewSelection();
Q_EMIT emitChangeDisplayImage("Original");
Q_EMIT emitTrackingDone(framenumber);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment