#include "RKNNManager.h" #include "PPYOLOE.hpp" #include "../DataManager/DataManager.h" #include "../DataManager/DataPackage.h" // Image test #include "../ImageTest/ImageTest.h" #include "../GrpcTransfer/GrpcTransfer.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) { std::string target_str = "192.168.211.20:50051"; grpc::ChannelArguments channel_args; channel_args.SetInt(GRPC_ARG_MAX_SEND_MESSAGE_LENGTH, 100 * 1024 * 1024); // 设置最大发送消息大小为100MB channel_args.SetInt(GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH, 100 * 1024 * 1024); // 设置最大接收消息大小为100MB MessageServiceClient client(grpc::CreateCustomChannel(target_str, grpc::InsecureChannelCredentials(), channel_args)); 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); // time test UsbTest::HighResolutionTimer timer; while (m_threadSwitch) { if (DataManager::getInstance().popData("resized" + std::to_string(index), dataPackage)) { //timer.start(); infer.infer(index, (unsigned char *)dataPackage->pResizeData, dataPackage->nResizeWidth, dataPackage->nResizeHeight, dataPackage); //timer.stop(); // std::cout << "infer time: " << timer.elapsed_milliseconds() << " ms" << std::endl; // ImageTest::saveImageFromData((unsigned char *)dataPackage->pResizeData, dataPackage->nResizeWidth, dataPackage->nResizeHeight); // MessageServiceClient client(grpc::CreateChannel(target_str, grpc::InsecureChannelCredentials())); client.R360SendMessage(dataPackage); // MemoryPool *dataPool = DataManager::getInstance().getDataBuffer(); DataManager::getInstance().releaseDataBuffer(dataPackage); continue; } std::this_thread::sleep_for(std::chrono::milliseconds(20)); } }