RKNNManager.cpp 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #include "RKNNManager.h"
  2. #include "PPYOLOE.hpp"
  3. #include "../DataManager/DataManager.h"
  4. #include "../DataManager/DataPackage.h"
  5. // Image test
  6. #include "../ImageTest/ImageTest.h"
  7. #include "../GrpcTransfer/GrpcTransfer.h"
  8. void RKNNManager::addRknnTask(std::string modelData)
  9. {
  10. m_threads.emplace_back(&RKNNManager::taskThread, this, modelData);
  11. m_threads.emplace_back(&RKNNManager::taskThread, this, modelData);
  12. m_threads.emplace_back(&RKNNManager::taskThread, this, modelData);
  13. }
  14. void RKNNManager::taskThread(std::string modelpath)
  15. {
  16. std::string target_str = "192.168.211.20:50051";
  17. grpc::ChannelArguments channel_args;
  18. channel_args.SetInt(GRPC_ARG_MAX_SEND_MESSAGE_LENGTH, 100 * 1024 * 1024); // 设置最大发送消息大小为100MB
  19. channel_args.SetInt(GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH, 100 * 1024 * 1024); // 设置最大接收消息大小为100MB
  20. MessageServiceClient client(grpc::CreateCustomChannel(target_str, grpc::InsecureChannelCredentials(), channel_args));
  21. PPYOLOE infer;
  22. if (!infer.initialize(modelpath))
  23. {
  24. std::cerr << "initialize rknn infer failed" << std::endl;
  25. return;
  26. }
  27. m_threadSwitch = true;
  28. int index = infer.get_index();
  29. DataPackagePtr dataPackage;
  30. std::string pipeName = "rknn" + std::to_string(index);
  31. DataManager::getInstance().addDataPipe<DataPackage>(pipeName);
  32. // time test
  33. ImageTest::HighResolutionTimer timer;
  34. while (m_threadSwitch)
  35. {
  36. if (DataManager::getInstance().popData("resized" + std::to_string(index), dataPackage))
  37. {
  38. timer.start();
  39. infer.infer(index, (unsigned char *)dataPackage->pResizeData, dataPackage->nResizeWidth, dataPackage->nResizeHeight, dataPackage);
  40. timer.stop();
  41. std::cout << "infer time: " << timer.elapsed_milliseconds() << " ms" << std::endl;
  42. // ImageTest::saveImageFromData((unsigned char *)dataPackage->pResizeData, dataPackage->nResizeWidth, dataPackage->nResizeHeight);
  43. // MessageServiceClient client(grpc::CreateChannel(target_str, grpc::InsecureChannelCredentials()));
  44. client.R360SendMessage(dataPackage);
  45. // MemoryPool<DataPackage> *dataPool = DataManager::getInstance().getDataBuffer<DataPackage>();
  46. DataManager::getInstance().releaseDataBuffer<DataPackage>(dataPackage);
  47. continue;
  48. }
  49. std::this_thread::sleep_for(std::chrono::milliseconds(20));
  50. }
  51. }