Commit 1fa395856fcabddf8f23f8ee90c9bcf2e55f74c3

Authored by Hu Chunming
1 parent 502f9d10

输出结果优化

src/ai_engine_module/VehiclePlate.cpp
@@ -88,9 +88,29 @@ vector<VehiclePlateResult> VehiclePlate::process(vector<DeviceMemory*> vec_gpuMe @@ -88,9 +88,29 @@ vector<VehiclePlateResult> VehiclePlate::process(vector<DeviceMemory*> vec_gpuMe
88 memcpy(res.recg, plate_info.recg, sizeof(PlateNum) * 8); 88 memcpy(res.recg, plate_info.recg, sizeof(PlateNum) * 8);
89 res.num_score = plate_info.num_score; 89 res.num_score = plate_info.num_score;
90 res.type = plate_info.type; 90 res.type = plate_info.type;
  91 +
91 res.state = plate_info.state; 92 res.state = plate_info.state;
92 res.state_score = plate_info.state_score; 93 res.state_score = plate_info.state_score;
93 94
  95 + int space_char_num = 0;
  96 + for (size_t i = 0; i < 8; i++)
  97 + {
  98 + if (fabs(res.recg[i].maxprob) < 0.0001) {
  99 + space_char_num++ ;
  100 + }
  101 + }
  102 +
  103 + if (res.state == 0)
  104 + {
  105 + if (space_char_num == 0) {
  106 + res.state = 1;
  107 + res.state_score = res.detect_score;
  108 + } else if (space_char_num > 0 && space_char_num < PLATENUM) {
  109 + res.state = 2;
  110 + res.state_score = res.detect_score;
  111 + }
  112 + }
  113 +
94 vec_res.push_back(res); 114 vec_res.push_back(res);
95 } 115 }
96 116
src/ai_platform/header.h
@@ -46,6 +46,8 @@ typedef struct hp_cls_info //分类结果结构体 @@ -46,6 +46,8 @@ typedef struct hp_cls_info //分类结果结构体
46 hp_cls_info() : res_index(0), res_prob(0) {}; 46 hp_cls_info() : res_index(0), res_prob(0) {};
47 } hp_cls_info; 47 } hp_cls_info;
48 48
  49 +
  50 +static string vechicle_pendant[] = {"车头", "车尾", "车窗", "司机", "人脸", "安全带", "遮阳板", "年检标", "挂件", "纸巾盒", "转经筒", "打电话", "天窗", "行李架", "吸烟", "车前脸", "车后脸", "后视镜", "临时车牌", "车标", "三角标志", "三角危险", "长方形危险"};
49 typedef struct VPDInfo 51 typedef struct VPDInfo
50 { 52 {
51 int left_; 53 int left_;
@@ -64,6 +66,8 @@ struct PlateNum @@ -64,6 +66,8 @@ struct PlateNum
64 int index; 66 int index;
65 }; 67 };
66 68
  69 +static string plate_type[] = {"单排蓝色 ", "单排黄色 ", "单排白色 ", "单排黑色", " 双排黄色 ", "双排白色 ", "新能源黄绿色 ", "新能源白绿色"};
  70 +static string plate_state[] = {"无车牌", " 正常车牌", " 遮挡车牌"};
67 struct VehiclePlateResult { 71 struct VehiclePlateResult {
68 int left_; 72 int left_;
69 int top_; 73 int top_;
@@ -79,6 +83,8 @@ struct VehiclePlateResult { @@ -79,6 +83,8 @@ struct VehiclePlateResult {
79 float state_score;//车牌状态置信度 83 float state_score;//车牌状态置信度
80 }; 84 };
81 85
  86 +// 0-black 1-blue 2-brown 3-green 4-grey 5-orange 6-pink 7-purple 8-red 9-silver 10-white 11-yellow
  87 +static string vehicle_color[] = {"black", "blue", "brown", "green", "grey", "orange", "pink", "purple", "red", "silver", "white", "yellow"};
82 typedef struct ObjectData { 88 typedef struct ObjectData {
83 string task_id; //该物体属于的任务ID号 89 string task_id; //该物体属于的任务ID号
84 int task_frame_count; //该物体当前出现的帧号 90 int task_frame_count; //该物体当前出现的帧号
src/demo/demo.cpp
@@ -6,6 +6,8 @@ @@ -6,6 +6,8 @@
6 #include <stdlib.h> 6 #include <stdlib.h>
7 #include <unistd.h> 7 #include <unistd.h>
8 #include <iostream> 8 #include <iostream>
  9 +#include <fstream>
  10 +#include <string>
9 11
10 #include "opencv2/opencv.hpp" 12 #include "opencv2/opencv.hpp"
11 #include "opencv2/imgcodecs/legacy/constants_c.h" 13 #include "opencv2/imgcodecs/legacy/constants_c.h"
@@ -164,8 +166,13 @@ string createTask(void *handle, int gi, bool bFlag = true){ @@ -164,8 +166,13 @@ string createTask(void *handle, int gi, bool bFlag = true){
164 166
165 void show_result(ObjectData obj) 167 void show_result(ObjectData obj)
166 { 168 {
167 - printf("%s %d \n", obj.task_id.c_str(), obj.task_frame_count);  
168 - printf("%d %d (%d,%d,%d,%d) %lf \n", obj.index, obj.object_id, obj.left, obj.top, obj.right, obj.bottom, obj.confidence); 169 + string str_dir = "./res/result/";
  170 + string file_name = obj.task_id + "_" + to_string(obj.object_id) + "_" + obj.str_ts_ms;
  171 + string data_file_name = str_dir + file_name + ".txt";
  172 + std::ofstream res_file(data_file_name);
  173 +
  174 + res_file << obj.task_id << " " << obj.task_frame_count << endl;
  175 + res_file << obj.index << " " << obj.object_id << " " << obj.left << " " << obj.top << " " << obj.right << " " << obj.bottom << " " << obj.confidence << endl;
169 176
170 cv::Mat image = cv::imread(obj.ori_pic_path); 177 cv::Mat image = cv::imread(obj.ori_pic_path);
171 178
@@ -175,26 +182,46 @@ void show_result(ObjectData obj) @@ -175,26 +182,46 @@ void show_result(ObjectData obj)
175 182
176 if (obj.index == 0) 183 if (obj.index == 0)
177 {// person 184 {// person
178 - for (size_t i = 0; i < HP_ATTRI_SIZE; i++)  
179 - {  
180 - auto hp_cls = obj.hp_cls[i];  
181 - printf("(%d, %f) ", hp_cls.res_index, hp_cls.res_prob);  
182 - }  
183 - printf("\n"); 185 + res_file << "person:" << endl;
  186 + res_file << "hair: " << hair[obj.hp_cls[0].res_index] << " " << obj.hp_cls[0].res_prob << endl;
  187 + res_file << "hair_color: " << hair_color[obj.hp_cls[1].res_index] << " " << obj.hp_cls[1].res_prob << endl;
  188 + res_file << "eye_glass: " << eye_glass[obj.hp_cls[2].res_index] << " " << obj.hp_cls[2].res_prob << endl;
  189 + res_file << "mask: " << mask[obj.hp_cls[3].res_index] << " " << obj.hp_cls[3].res_prob << endl;
  190 + res_file << "up cloth: " << up_cloth[obj.hp_cls[4].res_index] << " " << obj.hp_cls[4].res_prob << endl;
  191 + res_file << "up_cloth_color: " << up_cloth_color[obj.hp_cls[5].res_index] << " " << obj.hp_cls[5].res_prob << endl;
  192 + res_file << "clothing context: " << clothing_text[obj.hp_cls[6].res_index] << " " << obj.hp_cls[6].res_prob << endl;
  193 + res_file << "down cloth: " << down_cloth[obj.hp_cls[7].res_index] << " " << obj.hp_cls[7].res_prob << endl;
  194 + res_file << "down cloth color: " << down_cloth_color[obj.hp_cls[8].res_index] << " " << obj.hp_cls[8].res_prob << endl;
  195 + res_file << "bag: " << bag[obj.hp_cls[9].res_index] << " " << obj.hp_cls[9].res_prob << endl;
  196 + res_file << "sex: " << sex[obj.hp_cls[10].res_index] << " " << obj.hp_cls[10].res_prob << endl;
  197 + res_file << "age: " << age[obj.hp_cls[11].res_index] << " " << obj.hp_cls[11].res_prob << endl;
  198 + res_file << "viewpoint: " << viewpoint[obj.hp_cls[12].res_index] << " " << obj.hp_cls[12].res_prob << endl;
  199 + res_file << "umbrella: " << umbrella[obj.hp_cls[13].res_index] << " " << obj.hp_cls[13].res_prob << endl;
  200 + res_file << "hold_baby: " << hold_baby[obj.hp_cls[14].res_index] << " " << obj.hp_cls[14].res_prob << endl;
  201 + res_file << "person state: " << personstate[obj.hp_cls[15].res_index] << " " << obj.hp_cls[15].res_prob << endl;
  202 +
184 for (size_t i = 0; i < HUMANREID_FEATURE_SIZE; i++) 203 for (size_t i = 0; i < HUMANREID_FEATURE_SIZE; i++)
185 { 204 {
186 auto hp_cls = obj.hp_feature[i]; 205 auto hp_cls = obj.hp_feature[i];
187 - printf("%f ", obj.hp_feature[i]); 206 + res_file << obj.hp_feature[i] << " ";
188 } 207 }
189 - printf("\n"); 208 + res_file << endl;
190 } 209 }
191 else if (obj.index >= 4 && obj.index <= 8) 210 else if (obj.index >= 4 && obj.index <= 8)
192 {// vehicle 211 {// vehicle
193 - printf("vehicle color:%d prob:%f \n", obj.vehicle_color_index, obj.vehicle_color_prob); 212 + res_file << "vehicle:" << endl;
  213 + if (obj.vehicle_color_index >= 0)
  214 + {
  215 + res_file << "color:" << vehicle_color[obj.vehicle_color_index] << " " << obj.vehicle_color_prob << endl;
  216 + }
  217 +
194 for (size_t i = 0; i < obj.vec_vpd_cls.size(); i++) 218 for (size_t i = 0; i < obj.vec_vpd_cls.size(); i++)
195 { 219 {
196 auto info = obj.vec_vpd_cls[i]; 220 auto info = obj.vec_vpd_cls[i];
197 - printf("%d %f (%d, %d, %d, %d) \n", info.index, info.confidence, info.left_, info.top_, info.width_, info.height_); 221 + if (info.index >= 0)
  222 + {
  223 + res_file << vechicle_pendant[info.index] << " " << info.confidence << " " << info.left_ << " " << info.top_ << " " << info.width_ << " " << info.height_ << endl;
  224 + }
198 225
199 cv::Rect rc(info.left_, info.top_, info.width_, info.height_); 226 cv::Rect rc(info.left_, info.top_, info.width_, info.height_);
200 const cv::Scalar color(0, 255, 255); 227 const cv::Scalar color(0, 255, 255);
@@ -202,22 +229,24 @@ void show_result(ObjectData obj) @@ -202,22 +229,24 @@ void show_result(ObjectData obj)
202 } 229 }
203 230
204 auto& plate_info = obj.vehicle_plate; 231 auto& plate_info = obj.vehicle_plate;
205 - printf("plate : (%d, %d, %d, %d) %f \n", plate_info.left_, plate_info.top_, plate_info.width_, plate_info.height_, plate_info.detect_score ); 232 + res_file << "plate:" << plate_info.left_ << " " << plate_info.top_ << " " << plate_info.width_ << " " << plate_info.height_ << " " << plate_info.detect_score << endl;
206 cv::Rect rc(plate_info.left_, plate_info.top_, plate_info.width_, plate_info.height_); 233 cv::Rect rc(plate_info.left_, plate_info.top_, plate_info.width_, plate_info.height_);
207 const cv::Scalar color(0, 255, 0); 234 const cv::Scalar color(0, 255, 0);
208 cv::rectangle(image, rc, color); 235 cv::rectangle(image, rc, color);
  236 + res_file << "plate number:" ;
209 for (size_t i = 0; i < 8; i++) 237 for (size_t i = 0; i < 8; i++)
210 { 238 {
211 - printf("%s:%f ", plate_info.recg[i].character, plate_info.recg[i].maxprob); 239 + res_file << plate_info.recg[i].character << " " << plate_info.recg[i].maxprob << " ";
212 } 240 }
213 - printf("\n");  
214 - printf("num_score: %f \n", plate_info.num_score);  
215 - printf("type: %d \n", plate_info.type);  
216 - printf("state:%d %f\n", plate_info.state, plate_info.state_score); 241 + res_file << endl;
  242 + res_file << "num_score:" << plate_info.num_score << endl;
  243 + res_file << "type:" << plate_type[plate_info.type] << endl;
  244 + res_file << "state:" << plate_state[plate_info.state] << " " << plate_info.state_score << endl;
217 } 245 }
218 - printf("\n"); 246 +
  247 + res_file.close();
219 248
220 - string result_path = "./res/result/" + obj.task_id + "_" + to_string(obj.object_id) + "_" + obj.str_ts_ms + ".jpg"; 249 + string result_path = str_dir + file_name + ".jpg";
221 cv::imwrite(result_path, image); 250 cv::imwrite(result_path, image);
222 image.release(); 251 image.release();
223 } 252 }