#include "RKNNManager.h" #include "PPYOLOE.hpp" #include "../DataManager/DataManager.h" #include "../DataManager/DataPackage.h" void RKNNManager::addRknnTask(std::string modelData) { m_threads.emplace_back(&RKNNManager::taskThread, this, modelData); m_threads.emplace_back(&RKNNManager::taskThread, this, modelData); m_threads.emplace_back(&RKNNManager::taskThread, this, modelData); } void RKNNManager::taskThread(std::string modelpath) { PPYOLOE infer; if (!infer.initialize(modelpath)) { std::cerr << "initialize rknn infer failed" << std::endl; return; } m_threadSwitch = true; int index = infer.get_index(); DataPackagePtr dataPackage; std::string pipeName = "rknn" + std::to_string(index); DataManager::getInstance().addDataPipe(pipeName); while (m_threadSwitch) { if (DataManager::getInstance().popData("resized" + std::to_string(index), dataPackage)) { infer.infer(index, (unsigned char *)dataPackage->pResizeData, dataPackage->nResizeWidth, dataPackage->nResizeHeight); continue; } std::this_thread::sleep_for(std::chrono::milliseconds(20)); } }