Blame view

src/ai_engine_module/VPDProcess.cpp 2.73 KB
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
  #include "VPDProcess.h"
  #include "vpd.h"
  
  
  VPDProcess::VPDProcess(/* args */)
  {
  }
  
  VPDProcess::~VPDProcess()
  {
      release();
  }
  
  int VPDProcess::init(int dev_id, string model_dir){
  
      string model_path = model_dir + "/models/vpd2/vpd0707_310p.om" ;
  
      LOG_INFO("hp 版本:{}  模型路径:{}", vpd_get_version(), model_path);
  
      vehicle_pendant_det_param param;
      char modelNames[100];
      strcpy(modelNames, model_path.c_str());
      param.dmodelNames = modelNames;
      param.devId = dev_id;
      param.dthresld = 0.3;
      param.dlogo_thresld = 0.5;
  
      m_devId = param.devId;
      ACL_CALL(aclrtSetDevice(m_devId), ACL_SUCCESS, -1);
      ACL_CALL(aclrtCreateContext(&m_algorthim_ctx, m_devId), ACL_SUCCESS, -1);
  
      int ret = vpd_init(&m_handle, param);
      if(ret != 0){
          LOG_ERROR("vpd_init error.");
          return -1;
      }
  
      return 0;
  }
  
881ac79d   Hu Chunming   代码调通,结果正常输出
41
42
43
  vector<VPDResult> VPDProcess::process(vector<DeviceMemory*> vec_gpuMem) 
  {
      int ret = aclrtSetCurrentContext(m_algorthim_ctx);
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
  
      vector<VPDResult> vec_res;
  
      int batchsize = vec_gpuMem.size();
  
      vector<sy_img> batch_img;
      for (int i = 0; i < vec_gpuMem.size(); i++) {
          DeviceMemory* mem = vec_gpuMem[i];
  
          sy_img img;
          img.w_ = mem->getWidth();     
          img.h_ = mem->getHeight();
          img.c_ = mem->getChannel();   
          img.data_ = mem->getMem();
          batch_img.push_back(img);
      }
  
      vpd_result * results = new vpd_result[batchsize];
      for (int b = 0; b < batchsize; b++) {
          results[b].vpd_res = new vpd_info[OBJ_MAX_COUNT];
      }
      
881ac79d   Hu Chunming   代码调通,结果正常输出
66
      ret = vpd_process(m_handle, batch_img.data(), batchsize, results);
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
      if (SY_SUCCESS != ret) {
          printf("vpd detection process failed!");
          return vec_res;
      }
  
      for(int b = 0; b < batchsize; b ++){
          VPDResult res;
          for (int i = 0; i < results[b].count; i++) {
              if(results[b].vpd_res[i].confidence < 0.0) {
                  continue;
              }
  
              VPDInfo info;
              info.confidence = results[b].vpd_res[i].confidence;
              info.index = results[b].vpd_res[i].index;
              info.left_ = results[b].vpd_res[i].rect.left_;
              info.top_ = results[b].vpd_res[i].rect.top_;
              info.width_ = results[b].vpd_res[i].rect.width_;
              info.height_ = results[b].vpd_res[i].rect.height_;
              res.vec_vpd_res.push_back(info);
          }
  
          vec_res.push_back(res);
      }
  
      for (int i = 0; i < batchsize; i++) {
          delete [] results[i].vpd_res;
      }
      delete [] results;
  
      return vec_res;
  }
  
  void VPDProcess::release(){
      if (m_handle){
          vpd_release(&m_handle);
          m_handle = NULL;
      }
      if(m_algorthim_ctx){
          aclrtDestroyContext(m_algorthim_ctx);
881ac79d   Hu Chunming   代码调通,结果正常输出
107
          m_algorthim_ctx = nullptr;
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
108
109
      }
  }