Blame view

algorithm/vid_clothes2/vid_clothes_test/test.cpp 4.07 KB
f3d83919   Hu Chunming   添加clothes算法
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
  #include <iostream>

  #include <sstream>

  #include <fstream>

  #include "vid_clothes.h"

  #include "opencv2/opencv.hpp"

  #include "opencv2/imgcodecs/legacy/constants_c.h"

  #include "opencv2/imgproc/types_c.h"

  #include "time.h"

  #include "sys/time.h"

  #include "sy_errorinfo.h"

  #include "utils.h"

  #include "dvpp_process.h"

  

  using namespace std;

  using namespace cv;

  #include <chrono>

  #include <dirent.h>

  

  double msecond() {

      struct timeval tv;

      gettimeofday(&tv, 0);

      return (tv.tv_sec * 1000.0 + tv.tv_usec / 1000.0);

  }

  void getAllNm(std::string pthNm, std::vector<std::string>& fileList)

  {

          DIR    *dir;

      struct    dirent    *ptr;

      dir = opendir(pthNm.c_str()); ///open the dir

      int filenum = 0;

      while((ptr = readdir(dir)) != NULL) ///read the list of this dir

      {

          // char* to string

          std::string curNm = ptr->d_name;

          if(curNm != "." && curNm != "..")

          {

                  filenum++;

                  fileList.push_back(curNm);

                  //printf("file %d name: %s\n", filenum, curNm.c_str());

          }

     }

      closedir(dir);

  }

  

  int main() {

      cout << vidclothes_get_version() << endl;

  	 const char*  img_file_path = "../../../data/vid_clothes/";

  	string saveimagepath= "../../../data/result/";

  	

      vidclothes_param param;

      param.modelNames = "../vid_clothes/models/vidClothes0325_310P.om";

      param.thresld = 0.0;

      param.devId = 0;

  

      void* handle = nullptr;

      cout << "init start " << endl;

      ACL_CALL(aclInit(nullptr), ACL_SUCCESS, SY_FAILED);

      ACL_CALL(aclrtSetDevice(param.devId), ACL_SUCCESS, SY_FAILED);

      aclrtContext ctx;

      ACL_CALL(aclrtCreateContext(&ctx, param.devId), ACL_SUCCESS, SY_FAILED);

      aclrtStream stream = nullptr;

  	ACL_CALL(aclrtCreateStream(&stream), ACL_SUCCESS, SY_FAILED);

      DvppProcess* dvpp = new DvppProcess();

  	dvpp->InitResource(stream);

      int ret = vidclothes_init(&handle, param);

      if (ret == 0) {

          cout << "init success " << endl;

          

  

    		std::vector<std::string> fileList;

  

          getAllNm(img_file_path,fileList);

          if (fileList.empty()) throw std::logic_error("No suitable images were found");

  

          for (auto & file : fileList) {

              string filename = img_file_path + file;

              cout << "img path: " << filename << endl;

              const int batchsize = 2;

              sy_img imgs[batchsize];

              ImageData src[batchsize], dvpp_data[batchsize];

              for (int b = 0; b < batchsize; b++) {

                  Utils::ReadImageFile(src[b], filename); //将二进制图像读入内存,并读取宽高信息

                  ACL_CALL(dvpp->CvtJpegToYuv420sp(dvpp_data[b], src[b]), SY_SUCCESS, SY_FAILED); //解码

                  imgs[b].w_ = dvpp_data[b].width;

                  imgs[b].h_ = dvpp_data[b].height;

                  imgs[b].data_ = dvpp_data[b].data.get();

              }

  

              vidclothes_result * results = new vidclothes_result[batchsize];

              double t1,t2;

              t1 = msecond();

              int ret = vidclothes_batch(handle, imgs, batchsize, results);

              t2 = msecond();

              printf("debug mean process time: %.2f\n", (t2 - t1)/batchsize);

              if (SY_SUCCESS != ret) {

                  printf("vidclothesClassification process failed!");

                  return SY_FAILED;

              }

              

              for(int batchIdx = 0;batchIdx<batchsize;batchIdx++) {    

                  printf("index:%d,confidence:%f\n",results[batchIdx].index,results[batchIdx].score);

              }

  

              // vidclothes_result single_results[1];

              // vidclothes_process(handle, imgs[0], single_results);

              // printf("index:%d,confidence:%f\n",single_results[0].index,single_results[0].score);

  

              if (results) {

                  delete [] results;

              }

          }

         

      }

  

      if (dvpp) {

          delete dvpp;

          dvpp = nullptr;

      }

      vidclothes_release(&handle);

      aclrtDestroyContext(ctx);

      aclrtResetDevice(param.devId);

      aclFinalize();

      return 0;

  }