| | |
| | | rpcClient(appPref.getStringData("yolo.proxy"), appPref.getStringData("yolo.ip"), |
| | | appPref.getIntData("yolo.port"), "tcp"), |
| | | sharedMemory(nullptr), |
| | | trackingTrigger(nullptr) |
| | | { |
| | | trackingTrigger(nullptr) { |
| | | trackingTrigger = new TrackingTrigger(0.5); |
| | | sharedMemory = new QSharedMemory(QString(shareMemoryName.c_str())); |
| | | // DBG(shareMemoryName); |
| | |
| | | if (sharedMemory) { |
| | | delete sharedMemory; |
| | | } |
| | | if(trackingTrigger) |
| | | { |
| | | if (trackingTrigger) { |
| | | delete trackingTrigger; |
| | | 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() |
| | | { |
| | | void YoloRpcElement::threadFunc() { |
| | | // ClockTimer ct("YoloRpcElement::threadFunc"); |
| | | triggerScoredRects.clear(); |
| | | try { |
| | | auto server = rpcClient.getServer(); |
| | | if (!server) |
| | | { |
| | | if (!server) { |
| | | ERR("server is null"); |
| | | return; |
| | | } |
| | | objs = server->YoloDetect(image.cols, image.rows, sharedMemory->key().toStdString());//TODO |
| | | } |
| | | catch (std::exception &e) |
| | | { |
| | | catch (std::exception &e) { |
| | | ERR(e.what()) |
| | | } |
| | | // int size=objs.size(); |
| | |
| | | // return; |
| | | // } |
| | | |
| | | for (auto &obj: objs) |
| | | { |
| | | for (auto &obj: objs) { |
| | | if (obj.type != 0) |
| | | continue; |
| | | |
| | |
| | | scoredRect.score = scoredRect.rect.area() > 0 ? obj.prob : 0; |
| | | scoredRect.properties["time"] = getProperty("time"); |
| | | scoredRect.properties["imgKey"]=getProperty("imgKey"); |
| | | if (trackingTrigger->triggerOnce(scoredRect)) |
| | | { |
| | | 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"); |