| | |
| | | rpcClient(appPref.getStringData("yolo.proxy"), appPref.getStringData("yolo.ip"), |
| | | appPref.getIntData("yolo.port"), "tcp"), |
| | | sharedMemory(nullptr), |
| | | trackingTrigger(nullptr) |
| | | { |
| | | trackingTrigger = new TrackingTrigger(0.5); |
| | | 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) { |
| | | delete sharedMemory; |
| | | } |
| | | if(trackingTrigger) |
| | | { |
| | | if (trackingTrigger) { |
| | | delete trackingTrigger; |
| | | trackingTrigger=nullptr; |
| | | trackingTrigger = nullptr; |
| | | } |
| | | } |
| | | void YoloRpcElement::setImage(const cv::Mat &value) |
| | | { |
| | | if (value.size != image.size) |
| | | { |
| | | |
| | | 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 |
| | | { |
| | | |
| | | ::YoloDetect::ObjInfos YoloRpcElement::getObjects() const { |
| | | return objs; |
| | | } |
| | | |
| | |
| | | return trackingTrigger->getLastScoreRects(); |
| | | } |
| | | |
| | | cv::Mat YoloRpcElement::getImage() const |
| | | { |
| | | cv::Mat YoloRpcElement::getImage() const { |
| | | return image; |
| | | } |
| | | |
| | | void YoloRpcElement::threadFunc() |
| | | { |
| | | // ClockTimer ct("YoloRpcElement::threadFunc"); |
| | | triggerScoredRects.clear(); |
| | | 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 |
| | | auto server = rpcClient.getServer(); |
| | | if (!server) { |
| | | ERR("server is null"); |
| | | return; |
| | | } |
| | | catch (std::exception &e) |
| | | { |
| | | ERR(e.what()) |
| | | } |
| | | 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) |
| | | // { |
| | |
| | | // return; |
| | | // } |
| | | |
| | | for (auto &obj: objs) |
| | | { |
| | | if (obj.type != 0) |
| | | continue; |
| | | for (auto &obj: objs) { |
| | | if (obj.type != 0) |
| | | continue; |
| | | |
| | | ScoredRect scoredRect; |
| | | ScoredRect scoredRect; |
| | | |
| | | int x = obj.rcObj.left * image.cols; |
| | | int y = obj.rcObj.top * image.rows; |
| | | int w = (obj.rcObj.right - obj.rcObj.left) * image.cols; |
| | | int h = (obj.rcObj.bottom - obj.rcObj.top) * image.rows; |
| | | scoredRect.rect = cv::Rect(x, y, w, h); |
| | | scoredRect.score = scoredRect.rect.area() > 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)"<<getProperty("time")); |
| | | triggerScoredRects.push_back(trackingTrigger->getLastRect()); |
| | | } |
| | | int x = obj.rcObj.left * image.cols; |
| | | int y = obj.rcObj.top * image.rows; |
| | | int w = (obj.rcObj.right - obj.rcObj.left) * image.cols; |
| | | int h = (obj.rcObj.bottom - obj.rcObj.top) * image.rows; |
| | | scoredRect.rect = cv::Rect(x, y, w, h); |
| | | scoredRect.score = scoredRect.rect.area() > 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)"<<getProperty("time")); |
| | | triggerScoredRects.push_back(trackingTrigger->getLastRect()); |
| | | } |
| | | trackingTrigger->triggerLine(); |
| | | } |
| | | trackingTrigger->triggerLine(); |
| | | // if(trackingTrigger->getLastScoreRects().size()>20) |
| | | // { |
| | | // DBG(""); |
| | | // } |
| | | fireConnectors(); |
| | | fireConnectors(); |
| | | } |
| | | |
| | | |