From 15756629c3214fb8bb87eb61e3a35cb2b97ca1ef Mon Sep 17 00:00:00 2001 From: cmhu <2657262686@qq.com> Date: Thu, 26 Dec 2024 18:51:30 +0800 Subject: [PATCH] 添加clothes算法 --- src/PicAnalysis.cpp | 14 +++++++++++--- src/PicAnalysis.h | 2 ++ src/ai_engine_module/VehicleAnalysis.cpp | 10 +--------- src/ai_engine_module/VehicleAnalysis.h | 2 -- src/ai_engine_module/VidClothes.cpp | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/ai_engine_module/VidClothes.h | 23 +++++++++++++++++++++++ 6 files changed, 106 insertions(+), 14 deletions(-) create mode 100644 src/ai_engine_module/VidClothes.cpp create mode 100644 src/ai_engine_module/VidClothes.h diff --git a/src/PicAnalysis.cpp b/src/PicAnalysis.cpp index ad26196..1d2cdfb 100644 --- a/src/PicAnalysis.cpp +++ b/src/PicAnalysis.cpp @@ -27,9 +27,13 @@ int PicAnalysis::init(int dev_id) { return -1; } - ACL_CALL(aclrtCreateContext(&m_ctx, 0), ACL_ERROR_NONE, SY_FAILED); - ACL_CALL(aclrtSetCurrentContext(m_ctx), ACL_ERROR_NONE, SY_FAILED); + ret = m_clothes_algorithm.init(dev_id); + if(0 != ret){ + return -1; + } + ACL_CALL(aclrtCreateContext(&m_ctx, 0), ACL_ERROR_NONE, SY_FAILED); + ACL_CALL(aclrtSetCurrentContext(m_ctx), ACL_ERROR_NONE, SY_FAILED); ACL_CALL(aclrtCreateStream(&stream), ACL_SUCCESS, SY_FAILED); m_dvpp = new DvppProcess(); m_dvpp->InitResource(stream); @@ -39,6 +43,8 @@ int PicAnalysis::init(int dev_id) { int PicAnalysis::analysis_sync(vector vec_file_path){ + ACL_CALL(aclrtSetCurrentContext(m_ctx), ACL_ERROR_NONE, SY_FAILED); + const int batch_size = vec_file_path.size(); vector vec_img; @@ -71,7 +77,7 @@ int PicAnalysis::analysis_sync(vector vec_file_path){ vec_img.push_back(img); } - // m_vehicle_analysis.detect(vec_img); + m_vehicle_analysis.detect(vec_img); vector head_tail_result; ret = m_head_tail_algorithm.detect(vec_img, head_tail_result); @@ -79,6 +85,8 @@ int PicAnalysis::analysis_sync(vector vec_file_path){ LOG_ERROR("m_head_tail_algorithm failed!"); head_tail_result.clear(); } + + m_clothes_algorithm.detect(vec_img); return 0; diff --git a/src/PicAnalysis.h b/src/PicAnalysis.h index 643b59c..a85155d 100644 --- a/src/PicAnalysis.h +++ b/src/PicAnalysis.h @@ -1,6 +1,7 @@ #include "./ai_engine_module/include.h" #include "./ai_engine_module/VehicleAnalysis.h" #include "./ai_engine_module/VehicleHeadTail.h" +#include "./ai_engine_module/VidClothes.h" using namespace std; @@ -25,6 +26,7 @@ private: VehicleAnalysis m_vehicle_analysis; VehicleHeadTail m_head_tail_algorithm; + VidClothes m_clothes_algorithm; }; diff --git a/src/ai_engine_module/VehicleAnalysis.cpp b/src/ai_engine_module/VehicleAnalysis.cpp index b9fc23e..249ef69 100644 --- a/src/ai_engine_module/VehicleAnalysis.cpp +++ b/src/ai_engine_module/VehicleAnalysis.cpp @@ -57,13 +57,12 @@ int VehicleAnalysis::init(int devId, int max_batch_size) { param.models_Path="./models/vehicle_analysis/"; //所有模型的地址 cout << "va_init start " << endl; + // 内部有 ctx int ret = va_init(&m_handle, param); if (ret != 0) { return -1; } - ACL_CALL(aclrtCreateContext(&ctx, devId), ACL_ERROR_NONE, SY_FAILED); - cout << "va_init success " << endl; return 0; } @@ -83,7 +82,6 @@ int VehicleAnalysis::detect(vector vec_img) { } } - ACL_CALL(aclrtSetCurrentContext(ctx), ACL_ERROR_NONE, SY_FAILED); int ret = va_batch(m_handle, vec_img.data(), batch_size, result); for (int b = 0; b < batch_size; b++) @@ -615,13 +613,7 @@ int VehicleAnalysis::detect(vector vec_img) { } void VehicleAnalysis::release(){ - if(ctx){ - aclrtSetCurrentContext(ctx); - aclrtDestroyContext(ctx); - } - if (m_handle) { va_release(&m_handle); } - } diff --git a/src/ai_engine_module/VehicleAnalysis.h b/src/ai_engine_module/VehicleAnalysis.h index 3433927..f6237bc 100644 --- a/src/ai_engine_module/VehicleAnalysis.h +++ b/src/ai_engine_module/VehicleAnalysis.h @@ -27,8 +27,6 @@ private: float m_threshold; int m_max_batchsize{1}; - - aclrtContext ctx{nullptr}; }; diff --git a/src/ai_engine_module/VidClothes.cpp b/src/ai_engine_module/VidClothes.cpp new file mode 100644 index 0000000..fcfbb65 --- /dev/null +++ b/src/ai_engine_module/VidClothes.cpp @@ -0,0 +1,69 @@ +#include "VidClothes.h" + +VidClothes::VidClothes(/* args */) +{ +} + +VidClothes::~VidClothes() +{ + release(); +} + +int VidClothes::init(int devId){ + ACL_CALL(aclrtCreateContext(&ctx, devId), SY_SUCCESS, SY_FAILED); + + vidclothes_param param; + param.modelNames = "./models/vid_clothes/vidClothes0325_310P.om"; + param.thresld = 0.0; + param.devId = 0; + + cout << "vidclothes_init start " << endl; + int ret = vidclothes_init(&m_handle, param); + if (ret != 0) { + return -1; + } + + cout << "vidclothes_init success " << endl; + + return SY_SUCCESS; +} + +int VidClothes::detect(vector vec_img){ + + ACL_CALL(aclrtSetCurrentContext(ctx), SY_SUCCESS, SY_FAILED); + + const int batchsize = vec_img.size(); + vidclothes_result * results = new vidclothes_result[batchsize]; + + int ret = SY_FAILED; + + do + { + ret = vidclothes_batch(m_handle, vec_img.data(), batchsize, results); + if (SY_SUCCESS != ret) { + printf("vidclothesClassification process failed!"); + break; + } + + for(int batchIdx = 0;batchIdx vec_img); + +private: + void release(); + +private: + void* m_handle{nullptr}; + aclrtContext ctx{nullptr}; +}; + -- libgit2 0.21.4