#include "RoadSegAnalysis.h" #include "road_seg.h" RoadSegAnalysis::RoadSegAnalysis(/* args */) { } RoadSegAnalysis::~RoadSegAnalysis() { release(); } int RoadSegAnalysis::init(int devId){ ACL_CALL(aclrtCreateContext(&ctx, devId), SY_SUCCESS, SY_FAILED); rs_param param; param.modelNames = "./models/road_seg/tzroad_seg240108_310p.om"; param.thresld = 0.25; param.devId = devId; cout << "rs_init start " << endl; int ret = rs_init(&m_handle, param); if (ret != 0) { return -1; } cout << "rs_init success " << endl; return SY_SUCCESS; } int RoadSegAnalysis::detect(vector vec_img){ ACL_CALL(aclrtSetCurrentContext(ctx), SY_SUCCESS, SY_FAILED); const int batchsize = vec_img.size(); rs_result results[batchsize]; const int fea_size = 360*640; for (int b = 0; b < batchsize; b++) { results[b].seg_array = new unsigned char[fea_size]; results[b].direct_seg = new unsigned char[fea_size]; } int ret = SY_FAILED; do { ret = rs_batch(m_handle, vec_img.data(), batchsize, results); if (SY_SUCCESS != ret) { printf("mrc_batch failed!"); break; } // todo 结果处理 } while (0); for (int b = 0; b < batchsize; b++) { delete[] results[b].seg_array; results[b].seg_array = NULL; delete[] results[b].direct_seg; results[b].direct_seg = NULL; } return ret; } int RoadSegAnalysis::release() { ACL_CALL(aclrtSetCurrentContext(ctx), SY_SUCCESS, SY_FAILED); if (m_handle) { rs_release(&m_handle); } if(ctx){ aclrtDestroyContext(ctx); ctx = nullptr; } return SY_SUCCESS; }