Blame view

src/demo/main.cpp 8.73 KB
e6b08c4f   Hu Chunming   优化demo
1
2
3
  #include "../village_pic_interface.h"
  #include <vector>
  #include <string>
b1547dfc   Hu Chunming   设置初始值,避免异常值影响
4
5
  #include <iostream>
  #include "../utils/logger.hpp"
e6b08c4f   Hu Chunming   优化demo
6
7
  
  using namespace std;
20396d5c   Hu Chunming   添加车头车尾算法
8
  
5fc0b809   Hu Chunming   完善demo
9
  void show_result(std::vector<AnalysisResult> r, vector<string> vec_path);
b1547dfc   Hu Chunming   设置初始值,避免异常值影响
10
  
20396d5c   Hu Chunming   添加车头车尾算法
11
12
  int main() {
  
e6b08c4f   Hu Chunming   优化demo
13
      void *vaHandle = NULL;
20396d5c   Hu Chunming   添加车头车尾算法
14
  
6ec23cbb   Hu Chunming   更新demo
15
16
      VillageParam param;
      param.dev_id = 0;
581a68a4   Hu Chunming   修正parse_road无返回值导...
17
      param.sdk_path = ".";
e3062370   Hu Chunming   优化日志
18
      param.log_level = 1;
b1547dfc   Hu Chunming   设置初始值,避免异常值影响
19
20
21
22
  
      string log_path = param.log_path + "/main.log";
  
      set_default_logger(LogLevel(param.log_level), "PicAnalysis", log_path.c_str(), param.log_mem, param.log_days);
5fc0b809   Hu Chunming   完善demo
23
  
e6b08c4f   Hu Chunming   优化demo
24
      int ret = village_pic_init(&vaHandle, param);
20396d5c   Hu Chunming   添加车头车尾算法
25
  
b1547dfc   Hu Chunming   设置初始值,避免异常值影响
26
27
28
29
30
31
32
33
34
      // vector<string> vec_path;
      // size_t i = 0;
      // // for (i = 1; i < 8; i++)
      // {
      //     string path = "./img/test_road";
      //     path = path + to_string(i) + ".jpg";
      //     vec_path.push_back(path);
      // }
  
20396d5c   Hu Chunming   添加车头车尾算法
35
      vector<string> vec_path;
20396d5c   Hu Chunming   添加车头车尾算法
36
      {
5fc0b809   Hu Chunming   完善demo
37
          string path = "./img/test_motor4.jpg";
81e8a405   Hu Chunming   初步完成SDK
38
          vec_path.push_back(path);
20396d5c   Hu Chunming   添加车头车尾算法
39
40
      }
      
b1547dfc   Hu Chunming   设置初始值,避免异常值影响
41
      std::vector<AnalysisResult> result = village_pic_analysis_file(vaHandle, vec_path);
5fc0b809   Hu Chunming   完善demo
42
      show_result(result, vec_path);
20396d5c   Hu Chunming   添加车头车尾算法
43
  
e6b08c4f   Hu Chunming   优化demo
44
      village_pic_release(&vaHandle);
20396d5c   Hu Chunming   添加车头车尾算法
45
46
  
      return 0;
b1547dfc   Hu Chunming   设置初始值,避免异常值影响
47
48
49
50
  }
  
  static string shot_type[] = {"head", "rear", "motor", "tricycle", "body", "body_nova", "6-行人"};
  static string vehicle_type[] = {"person 人", " bike 自行车", "motor 摩托车", "tricycle 三轮车", "car 汽车", "bigbus 大巴", "lorry 货车", "tractor 拖拉机", "midibus  面包/中巴"};
5fc0b809   Hu Chunming   完善demo
51
  static string plate_status[] = {"无车牌", " 正常车牌", " 遮挡车牌"};
b1547dfc   Hu Chunming   设置初始值,避免异常值影响
52
53
54
55
56
  static string plate_type[] = {"0-单排蓝色 ", "1-单排黄色 ", "2-单排白色 ", "3-单排黑色", " 4-双排黄色 ", "5-双排白色 ", "6-新能源黄绿色 ", "7-新能源白绿色"};
  static string human_color[] = {"棕", "橙", "灰", "白", "粉", "紫", "红", "绿", "蓝", "银", "青", "黄", "黑","多色", "其他"};
  static string line_cls[] = {"未知", "黄实线", " 白实线", "白虚线", "黄虚线", "车道中线"};
  static string seg_cls[] = {"未知","行车道/机动车道", "非机动车道", "应急车道", "导流线", "人行横道", "禁停区域", "十字路口区域", "农村道路"};
  
5fc0b809   Hu Chunming   完善demo
57
58
59
60
61
  uint8_t seg_colors[][3] = { {0, 0, 0}, {0, 255, 255}, {128, 255, 0}, {255, 128, 0}, {128, 0, 255}, {255, 0, 128}, {0, 128, 255}, {0, 255, 128}, {128, 255, 255}};
  
  void show_result(std::vector<AnalysisResult> result, vector<string> vec_path){
  
      cv::Mat image = cv::imread(vec_path[0]);
b1547dfc   Hu Chunming   设置初始值,避免异常值影响
62
63
64
65
66
67
68
69
70
  
      for (size_t i = 0; i < result.size(); i++)
      {
          std::vector<VehicleInfo> info = result[i].info;
          for (size_t j = 0; j < info.size(); j++)
          {
              auto plate_info = info[j].vehicle_plate_det_recg_res;
              std::vector<pendant_info> pendant_res = info[j].vehicle_pendant_det_res;
  
5fc0b809   Hu Chunming   完善demo
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
              cv::Rect rc;
              rc.x =  info[j].vehicle_body_detect_res.rect.left_;
              rc.y = info[j].vehicle_body_detect_res.rect.top_;
              rc.width = info[j].vehicle_body_detect_res.rect.width_;
              rc.height = info[j].vehicle_body_detect_res.rect.height_;
  
              const cv::Scalar color(seg_colors[j][0], seg_colors[j][1], seg_colors[j][2]);
              cv::rectangle(image, rc, color);
  
              auto taken_info = info[j].manned_res;
              for (size_t k= 0; k < taken_info.hs_count; k++)
              {
                  cv::Rect rc;
                  rc.x =  taken_info.hs_rect[k].rect.left_;
                  rc.y = taken_info.hs_rect[k].rect.top_;
                  rc.width = taken_info.hs_rect[k].rect.width_;
                  rc.height = taken_info.hs_rect[k].rect.height_;
  
                  const cv::Scalar color(255, 255, 255);
                  cv::rectangle(image, rc, color);
              }
              
  
              LOG_INFO("-------------------------------------------{}---------------------------------------------", j);
b1547dfc   Hu Chunming   设置初始值,避免异常值影响
95
96
97
98
              LOG_INFO("位置特征");
              LOG_INFO("      车辆位置:{},{},{},{}", info[j].vehicle_body_detect_res.rect.left_ ,info[j].vehicle_body_detect_res.rect.top_, info[j].vehicle_body_detect_res.rect.width_, info[j].vehicle_body_detect_res.rect.height_);
              LOG_INFO("      拍摄方向:{}", shot_type[info[j].type]);
              LOG_INFO("目标类型:{}", vehicle_type[info[j].vpt_type]);
5fc0b809   Hu Chunming   完善demo
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
              if (info[j].vpt_type > 0)
              {
                  LOG_INFO("车辆特征");
                  if (plate_info.stain_vp_result.type >= 0 && plate_info.stain_vp_result.type <= 2) {
                      LOG_INFO("      号牌状态:{}", plate_status[plate_info.stain_vp_result.type]);
                  }else {
                      LOG_INFO("      号牌状态:未知");
                  }
                  
                  LOG_INFO("      号牌位置:{},{},{},{}", plate_info.rect.left_, plate_info.rect.top_, plate_info.rect.width_, plate_info.rect.height_ );
                  if (plate_info.type >= 0) {
                      LOG_INFO("      号牌种类:{}  {}", plate_type[plate_info.type], plate_info.type);
                  } else {
                      LOG_INFO("      号牌种类:未知", plate_type[plate_info.type], plate_info.type);
                  }
                  LOG_INFO("      号牌号码:{}{}{}{}{}{}{}{}", plate_info.recg[0].character, plate_info.recg[1].character, plate_info.recg[2].character, plate_info.recg[3].character, plate_info.recg[4].character, plate_info.recg[5].character, plate_info.recg[6].character, plate_info.recg[7].character);
                  LOG_INFO("      号牌可信度:{}", plate_info.detect_score);
                  LOG_INFO("      每位号牌可信度:{}:{}  {}:{}  {}:{}  {}:{}  {}:{}  {}:{}  {}:{}  {}:{}", plate_info.recg[0].character, plate_info.recg[0].maxprob, plate_info.recg[1].character, plate_info.recg[1].maxprob, plate_info.recg[2].character, plate_info.recg[2].maxprob, plate_info.recg[3].character, plate_info.recg[3].maxprob, plate_info.recg[4].character, plate_info.recg[4].maxprob, plate_info.recg[5].character, plate_info.recg[5].maxprob, plate_info.recg[6].character, plate_info.recg[6].maxprob, plate_info.recg[7].character, plate_info.recg[7].maxprob);
                  LOG_INFO("      车辆类型分类:{}", vehicle_type[info[j].vpt_type]);
              } else {
                  LOG_INFO("行人特征");
                  LOG_INFO("      上衣颜色:{}", human_color[info[j].human_upper_color]);
                  LOG_INFO("      下衣颜色:{}", human_color[info[j].human_lower_color]);
              }
              
b1547dfc   Hu Chunming   设置初始值,避免异常值影响
124
125
126
127
128
129
130
131
132
133
134
              if (pendant_res.size() > 0)
              {
                  LOG_INFO("驾乘人员特征");
                  for (size_t k = 0; k < pendant_res.size(); k++)
                  {
                      auto one_pendant = pendant_res[k];
                      LOG_INFO("      位置信息:{},{},{},{}", one_pendant.rect.left_, one_pendant.rect.top_, one_pendant.rect.width_, one_pendant.rect.height_ );
                      LOG_INFO("      可信度:{}", one_pendant.confidence);
                      LOG_INFO("      衣着颜色:{}", human_color[one_pendant.iColor]);
                  }
              }
5fc0b809   Hu Chunming   完善demo
135
              
b1547dfc   Hu Chunming   设置初始值,避免异常值影响
136
              LOG_INFO("违法行为特征");
5fc0b809   Hu Chunming   完善demo
137
              LOG_INFO("      不戴头盔:{} 置信度:{}", info[j].mta_res.motor_driver_helmeted.status, info[j].mta_res.motor_driver_helmeted.confidence);
b1547dfc   Hu Chunming   设置初始值,避免异常值影响
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
              LOG_INFO("      违法载人:{}", info[j].motor_manned);
              LOG_INFO("      加装雨棚:{} {}", info[j].rainshed, info[j].rainshed_prob);
              LOG_INFO("      使用手机:{} {}", info[j].phoning, info[j].phoning_prob);
              LOG_INFO("      逆行:{}", info[j].reverse_driving);
              LOG_INFO("      货厢载人:{}", info[j].truck_manned);
              LOG_INFO("      违反禁止标线  压实线:{}  压导流线:{}", info[j].cross_line, info[j].cross_diversion_line);
          }
  
          LOG_INFO("标线信息");
          std::vector<LineInfo> vec_line = result[i].vec_line;
          for (size_t i = 0; i < vec_line.size(); i++)
          {
              LineInfo one_line = vec_line[i];
              LOG_INFO("      标线类型:{}", line_cls[one_line.line_type]);
              string str_line = "";
              for (size_t j = 0; j < one_line.vec_pt.size(); j++)
              {
                  str_line += to_string(one_line.vec_pt[j].x)+","+to_string(one_line.vec_pt[j].y) + "_";
              }
              LOG_INFO("      标线点集:{}", str_line);
          }
          
          std::vector<SegInfo> vec_road = result[i].vec_road;
          for (size_t i = 0; i < vec_road.size(); i++)
          {
              SegInfo one_seg = vec_road[i];
              LOG_INFO("      车道类型:{}", seg_cls[one_seg.seg_type]);
              string str_line = "";
              for (size_t j = 0; j < one_seg.vec_pt.size(); j++)
              {
                  str_line += to_string(one_seg.vec_pt[j].x)+","+to_string(one_seg.vec_pt[j].y) + "_";
              }
              LOG_INFO("      车道点集:{}", str_line);
          }
      }
5fc0b809   Hu Chunming   完善demo
173
174
175
  
      cv::imwrite("./show_result.jpg", image);
      image.release();
20396d5c   Hu Chunming   添加车头车尾算法
176
  }