RKNNManager.cpp 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. #include "RKNNManager.h"
  2. #include "PPYOLOE.hpp"
  3. #include "../DataManager/DataManager.h"
  4. #include "../DataManager/DataPackage.h"
  5. void RKNNManager::addRknnTask(std::string modelData)
  6. {
  7. m_threads.emplace_back(&RKNNManager::taskThread, this, modelData);
  8. m_threads.emplace_back(&RKNNManager::taskThread, this, modelData);
  9. m_threads.emplace_back(&RKNNManager::taskThread, this, modelData);
  10. }
  11. void RKNNManager::taskThread(std::string modelpath)
  12. {
  13. PPYOLOE infer;
  14. if (!infer.initialize(modelpath))
  15. {
  16. std::cerr << "initialize rknn infer failed" << std::endl;
  17. return;
  18. }
  19. m_threadSwitch = true;
  20. int index = infer.get_index();
  21. DataPackagePtr dataPackage;
  22. std::string pipeName = "rknn" + std::to_string(index);
  23. DataManager::getInstance().addDataPipe<DataPackage>(pipeName);
  24. while (m_threadSwitch)
  25. {
  26. if (DataManager::getInstance().popData("resized" + std::to_string(index), dataPackage))
  27. {
  28. infer.infer(index, (unsigned char *)dataPackage->pResizeData, dataPackage->nResizeWidth, dataPackage->nResizeHeight);
  29. continue;
  30. }
  31. std::this_thread::sleep_for(std::chrono::milliseconds(20));
  32. }
  33. }