#include "YoloRpcElement.h" #include #include #include #include #include YoloRpcElement::YoloRpcElement(std::string shareMemoryName) : rpcClient(appPref.getStringData("yolo.proxy"), appPref.getStringData("yolo.ip"), appPref.getIntData("yolo.port"), "tcp"), sharedMemory(nullptr), trackingTrigger(nullptr) { trackingTrigger = new TrackingTrigger(0.5); sharedMemory = new QSharedMemory(QString(shareMemoryName.c_str())); // DBG(shareMemoryName); //1520 x 2688 1080 x 1920 //2560 * 1440 * 4 if (!sharedMemory->create(4608 * 2592 * 4)) { sharedMemory->attach(); } try { auto server = rpcClient.getServer(); cocoData = server->getCocoData(); } catch (std::exception &e) { ERR(e.what()) } } YoloRpcElement::~YoloRpcElement() { if (sharedMemory) { delete sharedMemory; } if(trackingTrigger) { delete trackingTrigger; trackingTrigger=nullptr; } } void YoloRpcElement::setImage(const cv::Mat &value) { if (value.size != image.size) { image = cv::Mat(value.rows, value.cols, CV_8UC3, sharedMemory->data()); } value.copyTo(image); } ::YoloDetect::ObjInfos YoloRpcElement::getObjects() const { return objs; } std::vector YoloRpcElement::getLastScoreRects() const { return trackingTrigger->getLastScoreRects(); } cv::Mat YoloRpcElement::getImage() const { return image; } void YoloRpcElement::threadFunc() { // ClockTimer ct("YoloRpcElement::threadFunc"); triggerScoredRects.clear(); try { auto server = rpcClient.getServer(); if (!server) { ERR("server is null"); return; } objs = server->YoloDetect(image.cols, image.rows, sharedMemory->key().toStdString());//TODO } catch (std::exception &e) { ERR(e.what()) } // int size=objs.size(); // if(size>30) // { // DBG("size="< 0 ? obj.prob : 0; scoredRect.properties["time"] = getProperty("time"); scoredRect.properties["imgKey"]=getProperty("imgKey"); if (trackingTrigger->triggerOnce(scoredRect)) { trackingTrigger->getLastRect().properties["id"] = to_string(scoredRect.id); trackingTrigger->getLastRect().properties["type"] = cocoData[obj.type]; trackingTrigger->getLastRect().properties["time"] = getProperty("time"); trackingTrigger->getLastRect().properties["imgKey"]=getProperty("imgKey"); // DBG("time)"<getLastRect()); } } trackingTrigger->triggerLine(); // if(trackingTrigger->getLastScoreRects().size()>20) // { // DBG(""); // } fireConnectors(); }