Blame view

src/ai_engine_module/motocycle_phone_process.h 3.09 KB
c5fce6ce   Zhao Shuaihua   增加二轮车玩手机505、加装雨棚5...
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
  #pragma once

  #include <deque>

  #include <map>

  #include <vector>

  #include <memory>

  #include "../util/vpc_util.h"

  #include "../ai_platform/task_param_manager.h"

  #include "../ai_platform/macro_definition.h"

  #include "ai_engine_header.h"

  #include "motor_phone_det.h"

  #include "acl/acl.h"

  #include "acl/ops/acl_dvpp.h"

  

  #define MAX_BATCH 20

  #define IMAGE_CROP_EXPAND_RATIO 0

  #define MAX_OBJ_BOX_COUNT 100

  

  namespace ai_engine_module

  {

      namespace motocycle_phone_process

      {

          // typedef long id_t;

          using id_t = obj_key_t;

          using task_id_t = std::string;

          using algor_param_type = algor_config_param_manned_incident*;

  

          enum class label_t {

              PLACEHOLDER = -1,

              smoke = 0,      //抽烟

              usephone = 1,   //玩手机

              call = 2,       //接打电话

              food = 3,       //

              handrail = 4,   //手握在车把上

              hand = 5,       //手悬空

          };

  

          typedef struct input_data_wrap_t

          {

              id_t id;

              long objId;

              std::string taskId;

              box_t box;

          } input_data_wrap_t;

  

  

          typedef struct mn_frame_t

          {

              uint m_frame;

              uint n_frame;

  

              // explicit

              mn_frame_t(uint m = 0, uint n = 0)

                  : m_frame(m)

                  , n_frame(n)

              {}

  

              void reset()

              {

                  m_frame = 0;

                  n_frame = 0;

              }

  

          } mn_frame_t;

  

  

          typedef struct results_data_t 

          {

              box_t box;

              acldvppPicDesc* origin_img_desc{nullptr};

              acldvppPicDesc* roi_img_desc{nullptr};

              id_t id;

              long objId;

              std::string taskId;

              algorithm_type_t algor_type;

          } results_data_t;

  

          class MotorPhoneProcess

          {

              /**

               * @brief

               *  1. move able

               */

          public:

              MotorPhoneProcess();

  

              ~MotorPhoneProcess();

  

              bool check_initied();

              bool init(int gpu_id, string models_dir);

              bool update_mstreams(const std::vector<task_id_t>& taskIds, vector<DeviceMemory*> vec_det_input_images, const std::vector<onelevel_det_result> &det_results); 

              std::shared_ptr<results_data_t> get_result_by_objectid(const id_t& id, bool do_erase = true);

  

              void force_release_result(const task_id_t& task_id);

  

              MotorPhoneProcess(const MotorPhoneProcess&) = delete;

              MotorPhoneProcess& operator=(const MotorPhoneProcess&) = delete;

  

          private:

              static algorithm_type_t algor_type_;

              int m_devId; 

              aclrtContext m_algorthim_ctx;

  

              bool init_;

              void* tools_;

              task_param_manager* task_param_manager_;

              std::map<id_t, mn_frame_t> id_to_mn_;

              std::map<id_t, results_data_t> id_to_result_;

          };

      }  // namespace motocycle_phone_process

  } // namespace ai_engine_module