Commit 581a68a4b0aa1e76c84194edf2fdcd61b0d49766
1 parent
8d319775
修正parse_road无返回值导致崩溃的问题;
返回值中sy_point更换为cv::Point; 优化model_path
Showing
21 changed files
with
114 additions
and
1027 deletions
jni/VehicleNativeInterface.cpp
@@ -126,28 +126,22 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_vehicle_VehicleNativeI | @@ -126,28 +126,22 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_vehicle_VehicleNativeI | ||
126 | //�㷨���ò��� | 126 | //�㷨���ò��� |
127 | jclass cls_vehcileAnalysisParam = env->GetObjectClass(vehicleAnalysisParam); | 127 | jclass cls_vehcileAnalysisParam = env->GetObjectClass(vehicleAnalysisParam); |
128 | 128 | ||
129 | - jfieldID fid_dbpath = env->GetFieldID(cls_vehcileAnalysisParam, "dbPath", "Ljava/lang/String;"); | ||
130 | - jfieldID fid_modelspath = env->GetFieldID(cls_vehcileAnalysisParam, "modelsPath", "Ljava/lang/String;"); | 129 | + jfieldID fid_sdk_path = env->GetFieldID(cls_vehcileAnalysisParam, "sdk_path", "Ljava/lang/String;"); |
131 | jfieldID fid_gpuid = env->GetFieldID(cls_vehcileAnalysisParam, "gpuId", "I"); | 130 | jfieldID fid_gpuid = env->GetFieldID(cls_vehcileAnalysisParam, "gpuId", "I"); |
132 | 131 | ||
133 | - jstring str_dbpath = (jstring)env->GetObjectField(vehicleAnalysisParam, fid_dbpath); | ||
134 | - const char *dbpath = env->GetStringUTFChars(str_dbpath, JNI_FALSE); | ||
135 | - jstring str_modlespath = (jstring)env->GetObjectField(vehicleAnalysisParam, fid_modelspath); | ||
136 | - const char *models_path = env->GetStringUTFChars(str_modlespath, JNI_FALSE); | 132 | + jstring str_sdk_path = (jstring)env->GetObjectField(vehicleAnalysisParam, fid_sdk_path); |
133 | + const char *sdk_path = env->GetStringUTFChars(str_sdk_path, JNI_FALSE); | ||
137 | jint gpuid = env->GetIntField(vehicleAnalysisParam, fid_gpuid); | 134 | jint gpuid = env->GetIntField(vehicleAnalysisParam, fid_gpuid); |
138 | 135 | ||
139 | void *vaHandle = NULL; | 136 | void *vaHandle = NULL; |
140 | VillageParam param; | 137 | VillageParam param; |
141 | param.dev_id = gpuid; | 138 | param.dev_id = gpuid; |
142 | - param.db_path = dbpath; | ||
143 | - param.model_path = models_path; | 139 | + param.sdk_path = sdk_path; |
144 | int ret = village_pic_init(&vaHandle, param); | 140 | int ret = village_pic_init(&vaHandle, param); |
145 | - if (ret != SUCCESS) | ||
146 | - { | 141 | + if (ret != SUCCESS) { |
147 | printf("jni info:va_init failed."); | 142 | printf("jni info:va_init failed."); |
148 | return ret; | 143 | return ret; |
149 | } | 144 | } |
150 | - | ||
151 | 145 | ||
152 | if (ret == SUCCESS) | 146 | if (ret == SUCCESS) |
153 | { | 147 | { |
@@ -166,8 +160,7 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_vehicle_VehicleNativeI | @@ -166,8 +160,7 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_vehicle_VehicleNativeI | ||
166 | temp[0] = (jlong)vaHandle; | 160 | temp[0] = (jlong)vaHandle; |
167 | env->SetLongArrayRegion(handle, 0, 1, temp); | 161 | env->SetLongArrayRegion(handle, 0, 1, temp); |
168 | } | 162 | } |
169 | - env->ReleaseStringUTFChars(str_dbpath, dbpath); | ||
170 | - env->ReleaseStringUTFChars(str_modlespath, models_path); | 163 | + env->ReleaseStringUTFChars(str_sdk_path, sdk_path); |
171 | return ret; | 164 | return ret; |
172 | } | 165 | } |
173 | 166 | ||
@@ -564,7 +557,7 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_vehicle_VehicleNativeI | @@ -564,7 +557,7 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_vehicle_VehicleNativeI | ||
564 | for (int k = 0; k < line_info.vec_pt.size(); k++) | 557 | for (int k = 0; k < line_info.vec_pt.size(); k++) |
565 | { | 558 | { |
566 | auto pt = line_info.vec_pt[k]; | 559 | auto pt = line_info.vec_pt[k]; |
567 | - jobject line_info_point = env->NewObject(cls_SyPoint, mid_SyPoint, pt.x_, pt.y_); | 560 | + jobject line_info_point = env->NewObject(cls_SyPoint, mid_SyPoint, pt.x, pt.y); |
568 | env->SetObjectArrayElement(ptArray, k, line_info_point); | 561 | env->SetObjectArrayElement(ptArray, k, line_info_point); |
569 | } | 562 | } |
570 | 563 | ||
@@ -584,7 +577,7 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_vehicle_VehicleNativeI | @@ -584,7 +577,7 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_vehicle_VehicleNativeI | ||
584 | for (int k = 0; k < road_info.vec_pt.size(); k++) | 577 | for (int k = 0; k < road_info.vec_pt.size(); k++) |
585 | { | 578 | { |
586 | auto pt = road_info.vec_pt[k]; | 579 | auto pt = road_info.vec_pt[k]; |
587 | - jobject road_info_point = env->NewObject(cls_SyPoint, mid_SyPoint, pt.x_, pt.y_); | 580 | + jobject road_info_point = env->NewObject(cls_SyPoint, mid_SyPoint, pt.x, pt.y); |
588 | env->SetObjectArrayElement(ptArray, k, road_info_point); | 581 | env->SetObjectArrayElement(ptArray, k, road_info_point); |
589 | } | 582 | } |
590 | 583 |
src/PicAnalysis.cpp
@@ -19,7 +19,7 @@ int PicAnalysis::init(VillageParam param) { | @@ -19,7 +19,7 @@ int PicAnalysis::init(VillageParam param) { | ||
19 | 19 | ||
20 | int ret = SY_FAILED; | 20 | int ret = SY_FAILED; |
21 | 21 | ||
22 | - ret = m_vehicle_analysis.init(dev_id, 16); | 22 | + ret = m_vehicle_analysis.init(dev_id, param.sdk_path, 16); |
23 | if(0 != ret){ | 23 | if(0 != ret){ |
24 | return -1; | 24 | return -1; |
25 | } | 25 | } |
@@ -27,37 +27,38 @@ int PicAnalysis::init(VillageParam param) { | @@ -27,37 +27,38 @@ int PicAnalysis::init(VillageParam param) { | ||
27 | // head_tail_param ht_param; | 27 | // head_tail_param ht_param; |
28 | // ht_param.devId = dev_id; | 28 | // ht_param.devId = dev_id; |
29 | // ht_param.max_batch = 16; | 29 | // ht_param.max_batch = 16; |
30 | + // ht_param.sdk_path = param.sdk_path; | ||
30 | // ret = m_head_tail_algorithm.init(ht_param); | 31 | // ret = m_head_tail_algorithm.init(ht_param); |
31 | // if(0 != ret){ | 32 | // if(0 != ret){ |
32 | // return -1; | 33 | // return -1; |
33 | // } | 34 | // } |
34 | 35 | ||
35 | - ret = m_clothes_algorithm.init(dev_id); | 36 | + ret = m_clothes_algorithm.init(dev_id, param.sdk_path); |
36 | if(0 != ret){ | 37 | if(0 != ret){ |
37 | return -1; | 38 | return -1; |
38 | } | 39 | } |
39 | 40 | ||
40 | - ret = m_human_algorithm.init(dev_id); | 41 | + ret = m_human_algorithm.init(dev_id, param.sdk_path); |
41 | if(0 != ret){ | 42 | if(0 != ret){ |
42 | return -1; | 43 | return -1; |
43 | } | 44 | } |
44 | 45 | ||
45 | - ret = m_human_car_algorithm.init(dev_id); | 46 | + ret = m_human_car_algorithm.init(dev_id, param.sdk_path); |
46 | if(0 != ret){ | 47 | if(0 != ret){ |
47 | return -1; | 48 | return -1; |
48 | } | 49 | } |
49 | 50 | ||
50 | - ret = m_motor_rainshed_algorithm.init(dev_id); | 51 | + ret = m_motor_rainshed_algorithm.init(dev_id, param.sdk_path); |
51 | if(0 != ret){ | 52 | if(0 != ret){ |
52 | return -1; | 53 | return -1; |
53 | } | 54 | } |
54 | 55 | ||
55 | - ret = m_motor_phone_algorithm.init(dev_id); | 56 | + ret = m_motor_phone_algorithm.init(dev_id, param.sdk_path); |
56 | if(0 != ret){ | 57 | if(0 != ret){ |
57 | return -1; | 58 | return -1; |
58 | } | 59 | } |
59 | 60 | ||
60 | - ret = m_road_seg_algorithm.init(dev_id); | 61 | + ret = m_road_seg_algorithm.init(dev_id, param.sdk_path); |
61 | if(0 != ret){ | 62 | if(0 != ret){ |
62 | return -1; | 63 | return -1; |
63 | } | 64 | } |
@@ -356,9 +357,9 @@ vector<AnalysisResult> PicAnalysis::analysis_img(vector<sy_img> vec_img){ | @@ -356,9 +357,9 @@ vector<AnalysisResult> PicAnalysis::analysis_img(vector<sy_img> vec_img){ | ||
356 | } | 357 | } |
357 | 358 | ||
358 | //压黄实线 | 359 | //压黄实线 |
359 | - result_info.cross_line = m_road_seg_algorithm.check_cross_line(road_info.vec_line, vehicle_rect); | 360 | + result_info.cross_line = m_road_seg_algorithm.check_cross_line(road_info.vec_line, vehicle_rect, src.width, src.height); |
360 | // 压导流线 | 361 | // 压导流线 |
361 | - result_info.cross_diversion_line = m_road_seg_algorithm.check_cross_region(road_info.vec_road, vehicle_rect, 3); //3是导流线区域 | 362 | + result_info.cross_diversion_line = m_road_seg_algorithm.check_cross_region(road_info.vec_road, vehicle_rect, src.width, src.height, 3); //3是导流线区域 |
362 | } | 363 | } |
363 | } | 364 | } |
364 | 365 |
src/ai_engine_module/HumanAnalysis.cpp
@@ -11,12 +11,14 @@ HumanAnalysis::~HumanAnalysis() | @@ -11,12 +11,14 @@ HumanAnalysis::~HumanAnalysis() | ||
11 | release(); | 11 | release(); |
12 | } | 12 | } |
13 | 13 | ||
14 | -int HumanAnalysis::init(int devId){ | 14 | +int HumanAnalysis::init(int devId, std::string sdk_root){ |
15 | ACL_CALL(aclrtCreateContext(&ctx, devId), SY_SUCCESS, SY_FAILED); | 15 | ACL_CALL(aclrtCreateContext(&ctx, devId), SY_SUCCESS, SY_FAILED); |
16 | ACL_CALL(aclrtSetCurrentContext(ctx), SY_SUCCESS, SY_FAILED); | 16 | ACL_CALL(aclrtSetCurrentContext(ctx), SY_SUCCESS, SY_FAILED); |
17 | 17 | ||
18 | + std::string model_path = sdk_root + "/models/hp/hp220908_310p.om"; | ||
19 | + | ||
18 | hp_param param; | 20 | hp_param param; |
19 | - param.modelNames = "./models/hp/hp220908_310p.om"; | 21 | + param.modelNames = (char*)model_path.data(); |
20 | param.devId = devId; | 22 | param.devId = devId; |
21 | 23 | ||
22 | cout << "hp_init start " << endl; | 24 | cout << "hp_init start " << endl; |
src/ai_engine_module/HumanAnalysis.h
@@ -14,7 +14,7 @@ public: | @@ -14,7 +14,7 @@ public: | ||
14 | HumanAnalysis(/* args */); | 14 | HumanAnalysis(/* args */); |
15 | ~HumanAnalysis(); | 15 | ~HumanAnalysis(); |
16 | 16 | ||
17 | - int init(int devId); | 17 | + int init(int devId, std::string sdk_root); |
18 | 18 | ||
19 | vector<BodyColorInfo> detect(vector<sy_img> vec_img); | 19 | vector<BodyColorInfo> detect(vector<sy_img> vec_img); |
20 | 20 |
src/ai_engine_module/HumanCarAnalysis.cpp
@@ -13,12 +13,14 @@ HumanCarAnalysis::~HumanCarAnalysis() | @@ -13,12 +13,14 @@ HumanCarAnalysis::~HumanCarAnalysis() | ||
13 | release(); | 13 | release(); |
14 | } | 14 | } |
15 | 15 | ||
16 | -int HumanCarAnalysis::init(int devId){ | 16 | +int HumanCarAnalysis::init(int devId, std::string sdk_root){ |
17 | ACL_CALL(aclrtCreateContext(&ctx, devId), SY_SUCCESS, SY_FAILED); | 17 | ACL_CALL(aclrtCreateContext(&ctx, devId), SY_SUCCESS, SY_FAILED); |
18 | ACL_CALL(aclrtSetCurrentContext(ctx), SY_SUCCESS, SY_FAILED); | 18 | ACL_CALL(aclrtSetCurrentContext(ctx), SY_SUCCESS, SY_FAILED); |
19 | 19 | ||
20 | + std::string model_path = sdk_root + "/models/hcp/hcp211008_310p.om"; | ||
21 | + | ||
20 | hcp_param param; | 22 | hcp_param param; |
21 | - param.modelNames = "./models/hcp/hcp211008_310p.om"; | 23 | + param.modelNames = (char*)model_path.data(); |
22 | param.devId = devId; | 24 | param.devId = devId; |
23 | 25 | ||
24 | cout << "hcp_init start " << endl; | 26 | cout << "hcp_init start " << endl; |
src/ai_engine_module/HumanCarAnalysis.h
@@ -41,7 +41,7 @@ public: | @@ -41,7 +41,7 @@ public: | ||
41 | HumanCarAnalysis(/* args */); | 41 | HumanCarAnalysis(/* args */); |
42 | ~HumanCarAnalysis(); | 42 | ~HumanCarAnalysis(); |
43 | 43 | ||
44 | - int init(int devId); | 44 | + int init(int devId, std::string sdk_root); |
45 | 45 | ||
46 | std::vector<HumanCarResult> detect(vector<sy_img> vec_img); | 46 | std::vector<HumanCarResult> detect(vector<sy_img> vec_img); |
47 | 47 |
src/ai_engine_module/MotorPhoneAnalysis.cpp
@@ -10,11 +10,13 @@ MotorPhoneAnalysis::~MotorPhoneAnalysis() | @@ -10,11 +10,13 @@ MotorPhoneAnalysis::~MotorPhoneAnalysis() | ||
10 | release(); | 10 | release(); |
11 | } | 11 | } |
12 | 12 | ||
13 | -int MotorPhoneAnalysis::init(int devId){ | 13 | +int MotorPhoneAnalysis::init(int devId, std::string sdk_root){ |
14 | ACL_CALL(aclrtCreateContext(&ctx, devId), SY_SUCCESS, SY_FAILED); | 14 | ACL_CALL(aclrtCreateContext(&ctx, devId), SY_SUCCESS, SY_FAILED); |
15 | 15 | ||
16 | + std::string model_path = sdk_root + "/models/motor_phone/motor_phone1127_310p.om"; | ||
17 | + | ||
16 | motor_phone_param param; | 18 | motor_phone_param param; |
17 | - param.modelNames = "./models/motor_phone/motor_phone1127_310p.om"; | 19 | + param.modelNames = (char*)model_path.data(); |
18 | param.thresld = 0.25; | 20 | param.thresld = 0.25; |
19 | param.devId = devId; | 21 | param.devId = devId; |
20 | 22 |
src/ai_engine_module/MotorPhoneAnalysis.h
@@ -11,7 +11,7 @@ public: | @@ -11,7 +11,7 @@ public: | ||
11 | MotorPhoneAnalysis(/* args */); | 11 | MotorPhoneAnalysis(/* args */); |
12 | ~MotorPhoneAnalysis(); | 12 | ~MotorPhoneAnalysis(); |
13 | 13 | ||
14 | - int init(int devId); | 14 | + int init(int devId, std::string sdk_root); |
15 | 15 | ||
16 | vector<MotorPhoneResult> detect(vector<sy_img> vec_img); | 16 | vector<MotorPhoneResult> detect(vector<sy_img> vec_img); |
17 | 17 |
src/ai_engine_module/MotorRainshedAnalysis.cpp
@@ -10,11 +10,13 @@ MotorRainshedAnalysis::~MotorRainshedAnalysis() | @@ -10,11 +10,13 @@ MotorRainshedAnalysis::~MotorRainshedAnalysis() | ||
10 | release(); | 10 | release(); |
11 | } | 11 | } |
12 | 12 | ||
13 | -int MotorRainshedAnalysis::init(int devId){ | 13 | +int MotorRainshedAnalysis::init(int devId, std::string sdk_root){ |
14 | ACL_CALL(aclrtCreateContext(&ctx, devId), SY_SUCCESS, SY_FAILED); | 14 | ACL_CALL(aclrtCreateContext(&ctx, devId), SY_SUCCESS, SY_FAILED); |
15 | 15 | ||
16 | + std::string model_path = sdk_root + "/models/rainshed/motor_rainshed_231123_310p.om"; | ||
17 | + | ||
16 | mrc_param param; | 18 | mrc_param param; |
17 | - param.modelNames = "./models/rainshed/motor_rainshed_231123_310p.om"; | 19 | + param.modelNames = (char*)model_path.data(); |
18 | param.thresld = 0.0; | 20 | param.thresld = 0.0; |
19 | param.devId = devId; | 21 | param.devId = devId; |
20 | 22 |
src/ai_engine_module/MotorRainshedAnalysis.h
@@ -11,7 +11,7 @@ public: | @@ -11,7 +11,7 @@ public: | ||
11 | MotorRainshedAnalysis(/* args */); | 11 | MotorRainshedAnalysis(/* args */); |
12 | ~MotorRainshedAnalysis(); | 12 | ~MotorRainshedAnalysis(); |
13 | 13 | ||
14 | - int init(int devId); | 14 | + int init(int devId, std::string sdk_root); |
15 | 15 | ||
16 | vector<MotorRainshedResult> detect(vector<sy_img> vec_img); | 16 | vector<MotorRainshedResult> detect(vector<sy_img> vec_img); |
17 | 17 |
src/ai_engine_module/RoadSegAnalysis.cpp
@@ -12,11 +12,13 @@ RoadSegAnalysis::~RoadSegAnalysis() | @@ -12,11 +12,13 @@ RoadSegAnalysis::~RoadSegAnalysis() | ||
12 | release(); | 12 | release(); |
13 | } | 13 | } |
14 | 14 | ||
15 | -int RoadSegAnalysis::init(int devId){ | 15 | +int RoadSegAnalysis::init(int devId, std::string sdk_root){ |
16 | ACL_CALL(aclrtCreateContext(&ctx, devId), SY_SUCCESS, SY_FAILED); | 16 | ACL_CALL(aclrtCreateContext(&ctx, devId), SY_SUCCESS, SY_FAILED); |
17 | 17 | ||
18 | + std::string model_path = sdk_root + "/models/road_seg/tzroad_seg240108_310p.om"; | ||
19 | + | ||
18 | rs_param param; | 20 | rs_param param; |
19 | - param.modelNames = "./models/road_seg/tzroad_seg240108_310p.om"; | 21 | + param.modelNames = (char*)model_path.data(); |
20 | param.thresld = 0.25; | 22 | param.thresld = 0.25; |
21 | param.devId = devId; | 23 | param.devId = devId; |
22 | 24 | ||
@@ -93,33 +95,20 @@ RoadInfo RoadSegAnalysis::parse_road(rs_result one_result, sy_img src) | @@ -93,33 +95,20 @@ RoadInfo RoadSegAnalysis::parse_road(rs_result one_result, sy_img src) | ||
93 | cv::Mat seg_output = seg_post_process(large_resolution, one_result.seg_array, combined, poly_masks, region_classes, lanes, cats, x_sort); //m_masks:mask前的结果 poly_masks后的结果 | 95 | cv::Mat seg_output = seg_post_process(large_resolution, one_result.seg_array, combined, poly_masks, region_classes, lanes, cats, x_sort); //m_masks:mask前的结果 poly_masks后的结果 |
94 | 96 | ||
95 | for (int i = 0; i < lanes.size(); ++i) { | 97 | for (int i = 0; i < lanes.size(); ++i) { |
96 | - std::vector<cv::Point> points = lanes[i]; | ||
97 | LineInfo info; | 98 | LineInfo info; |
98 | - for (size_t j = 0; j < points.size(); j++) | ||
99 | - { | ||
100 | - sy_point pt; | ||
101 | - pt.x_ = points[j].x; | ||
102 | - pt.y_ = points[j].y; | ||
103 | - | ||
104 | - info.vec_pt.push_back(pt); | ||
105 | - } | 99 | + info.vec_pt = lanes[i]; |
106 | info.line_type = cats[i]; | 100 | info.line_type = cats[i]; |
107 | one_road.vec_line.push_back(info); | 101 | one_road.vec_line.push_back(info); |
108 | } | 102 | } |
109 | 103 | ||
110 | for (int i = 0; i < poly_masks.size(); ++i) { | 104 | for (int i = 0; i < poly_masks.size(); ++i) { |
111 | - std::vector<cv::Point> points = poly_masks[i]; | ||
112 | SegInfo seg_info; | 105 | SegInfo seg_info; |
113 | - for (int j = 0; j < points.size(); ++j) { | ||
114 | - sy_point pt; | ||
115 | - pt.x_ = points[j].x; | ||
116 | - pt.y_ = points[j].y; | ||
117 | - | ||
118 | - seg_info.vec_pt.push_back(pt); | ||
119 | - } | 106 | + seg_info.vec_pt = poly_masks[i]; |
120 | seg_info.seg_type = region_classes[i]; | 107 | seg_info.seg_type = region_classes[i]; |
121 | one_road.vec_road.push_back(seg_info); | 108 | one_road.vec_road.push_back(seg_info); |
122 | } | 109 | } |
110 | + | ||
111 | + return one_road; | ||
123 | } | 112 | } |
124 | 113 | ||
125 | std::vector<SegInfo> RoadSegAnalysis::parse_direct(rs_result one_result, sy_img src) { | 114 | std::vector<SegInfo> RoadSegAnalysis::parse_direct(rs_result one_result, sy_img src) { |
@@ -133,21 +122,26 @@ std::vector<SegInfo> RoadSegAnalysis::parse_direct(rs_result one_result, sy_img | @@ -133,21 +122,26 @@ std::vector<SegInfo> RoadSegAnalysis::parse_direct(rs_result one_result, sy_img | ||
133 | 122 | ||
134 | cv::Mat seg_output = seg_post_process(large_resolution, one_result.direct_seg, combined, poly_masks, region_classes, lanes, cats, x_sort); //m_masks:mask前的结果 poly_masks后的结果 | 123 | cv::Mat seg_output = seg_post_process(large_resolution, one_result.direct_seg, combined, poly_masks, region_classes, lanes, cats, x_sort); //m_masks:mask前的结果 poly_masks后的结果 |
135 | 124 | ||
125 | + | ||
126 | + cv::Mat image(cv::Size(640, 360), CV_8UC3, cv::Scalar(0, 0, 0)); | ||
127 | + | ||
136 | std::vector<SegInfo> vec_road; | 128 | std::vector<SegInfo> vec_road; |
137 | for (int i = 0; i < poly_masks.size(); ++i) { | 129 | for (int i = 0; i < poly_masks.size(); ++i) { |
138 | - std::vector<cv::Point> points = poly_masks[i]; | ||
139 | SegInfo seg_info; | 130 | SegInfo seg_info; |
140 | - for (int j = 0; j < points.size(); ++j) { | ||
141 | - sy_point pt; | ||
142 | - pt.x_ = points[j].x; | ||
143 | - pt.y_ = points[j].y; | ||
144 | - | ||
145 | - seg_info.vec_pt.push_back(pt); | ||
146 | - } | ||
147 | seg_info.seg_type = region_classes[i]; | 131 | seg_info.seg_type = region_classes[i]; |
132 | + seg_info.vec_pt = poly_masks[i]; | ||
133 | + | ||
134 | + int k = seg_info.seg_type; | ||
135 | + const cv::Scalar color(seg_colors[k][0], seg_colors[k][1], seg_colors[k][2]); | ||
136 | + | ||
137 | + polylines(image, seg_info.vec_pt, true, color, 3, cv::LINE_AA); | ||
138 | + | ||
148 | vec_road.push_back(seg_info); | 139 | vec_road.push_back(seg_info); |
149 | } | 140 | } |
150 | 141 | ||
142 | + cv::imwrite("./direct.jpg", image); | ||
143 | + image.release(); | ||
144 | + | ||
151 | return vec_road; | 145 | return vec_road; |
152 | } | 146 | } |
153 | 147 | ||
@@ -202,17 +196,15 @@ int RoadSegAnalysis::check_reverse_driving(std::vector<SegInfo>& vec_direct, sy_ | @@ -202,17 +196,15 @@ int RoadSegAnalysis::check_reverse_driving(std::vector<SegInfo>& vec_direct, sy_ | ||
202 | for (size_t i = 0; i < vec_direct.size(); i++) { | 196 | for (size_t i = 0; i < vec_direct.size(); i++) { |
203 | SegInfo& region = vec_direct[i]; | 197 | SegInfo& region = vec_direct[i]; |
204 | if (region.seg_type == 1) { | 198 | if (region.seg_type == 1) { |
205 | - std::vector<cv::Point> vec_pt; | ||
206 | - for (size_t j = 0; j < region.vec_pt.size(); j++) { | ||
207 | - double dist = pointPolygonTest(polygon_pts, cv::Point2f(region.vec_pt[j].x_, region.vec_pt[j].y_), false); | 199 | + for (size_t j = 0; j < polygon_pts.size(); j++) { |
200 | + double dist = pointPolygonTest(region.vec_pt, polygon_pts[j], false); | ||
208 | if (dist > 0) { | 201 | if (dist > 0) { |
209 | coming_count ++; | 202 | coming_count ++; |
210 | } | 203 | } |
211 | } | 204 | } |
212 | } else if (region.seg_type == 2) { | 205 | } else if (region.seg_type == 2) { |
213 | - std::vector<cv::Point> vec_pt; | ||
214 | - for (size_t j = 0; j < region.vec_pt.size(); j++) { | ||
215 | - double dist = pointPolygonTest(polygon_pts, cv::Point2f(region.vec_pt[j].x_, region.vec_pt[j].y_), false); | 206 | + for (size_t j = 0; j < polygon_pts.size(); j++) { |
207 | + double dist = pointPolygonTest(region.vec_pt, polygon_pts[j], false); | ||
216 | if (dist > 0) { | 208 | if (dist > 0) { |
217 | leaving_count ++; | 209 | leaving_count ++; |
218 | } | 210 | } |
@@ -259,10 +251,10 @@ int RoadSegAnalysis::check_reverse_driving(std::vector<SegInfo>& vec_direct, sy_ | @@ -259,10 +251,10 @@ int RoadSegAnalysis::check_reverse_driving(std::vector<SegInfo>& vec_direct, sy_ | ||
259 | return -1; | 251 | return -1; |
260 | } | 252 | } |
261 | 253 | ||
262 | -int RoadSegAnalysis::check_cross_line(std::vector<LineInfo>& vec_line, sy_rect src_rc) { | 254 | +int RoadSegAnalysis::check_cross_line(std::vector<LineInfo>& vec_line, sy_rect src_rc, int src_width, int src_height) { |
263 | 255 | ||
264 | - float scale_w = 640.0 / src_rc.width_; | ||
265 | - float scale_h = 360.0 / src_rc.height_; | 256 | + float scale_w = 640.0 / src_width; |
257 | + float scale_h = 360.0 / src_height; | ||
266 | 258 | ||
267 | sy_rect rc; | 259 | sy_rect rc; |
268 | rc.left_ = src_rc.left_ * scale_w; | 260 | rc.left_ = src_rc.left_ * scale_w; |
@@ -294,9 +286,8 @@ int RoadSegAnalysis::check_cross_line(std::vector<LineInfo>& vec_line, sy_rect s | @@ -294,9 +286,8 @@ int RoadSegAnalysis::check_cross_line(std::vector<LineInfo>& vec_line, sy_rect s | ||
294 | if (line.line_type == 1 || line.line_type == 2) { | 286 | if (line.line_type == 1 || line.line_type == 2) { |
295 | // 黄实线 | 287 | // 黄实线 |
296 | int in_count = 0; | 288 | int in_count = 0; |
297 | - std::vector<cv::Point> vec_pt; | ||
298 | for (size_t j = 0; j < line.vec_pt.size(); j++) { | 289 | for (size_t j = 0; j < line.vec_pt.size(); j++) { |
299 | - double dist = pointPolygonTest(polygon_pts, cv::Point2f(line.vec_pt[j].x_, line.vec_pt[j].y_), false); | 290 | + double dist = pointPolygonTest(polygon_pts, line.vec_pt[j], false); |
300 | if (dist > 0) { | 291 | if (dist > 0) { |
301 | in_count ++; | 292 | in_count ++; |
302 | } | 293 | } |
@@ -312,7 +303,16 @@ int RoadSegAnalysis::check_cross_line(std::vector<LineInfo>& vec_line, sy_rect s | @@ -312,7 +303,16 @@ int RoadSegAnalysis::check_cross_line(std::vector<LineInfo>& vec_line, sy_rect s | ||
312 | return -1; | 303 | return -1; |
313 | } | 304 | } |
314 | 305 | ||
315 | -int RoadSegAnalysis::check_cross_region(std::vector<SegInfo>& vec_reg, sy_rect rc, int region_type) { | 306 | +int RoadSegAnalysis::check_cross_region(std::vector<SegInfo>& vec_reg, sy_rect src_rc, int src_width, int src_height, int region_type) { |
307 | + | ||
308 | + float scale_w = 640.0 / src_width; | ||
309 | + float scale_h = 360.0 / src_height; | ||
310 | + | ||
311 | + sy_rect rc; | ||
312 | + rc.left_ = src_rc.left_ * scale_w; | ||
313 | + rc.width_ = src_rc.width_ * scale_w; | ||
314 | + rc.top_ = src_rc.top_ * scale_h; | ||
315 | + rc.height_ = src_rc.height_ * scale_h; | ||
316 | 316 | ||
317 | std::vector<cv::Point> polygon_pts; | 317 | std::vector<cv::Point> polygon_pts; |
318 | cv::Point pt_lt; | 318 | cv::Point pt_lt; |
@@ -336,11 +336,11 @@ int RoadSegAnalysis::check_cross_region(std::vector<SegInfo>& vec_reg, sy_rect r | @@ -336,11 +336,11 @@ int RoadSegAnalysis::check_cross_region(std::vector<SegInfo>& vec_reg, sy_rect r | ||
336 | for (size_t i = 0; i < vec_reg.size(); i++) { | 336 | for (size_t i = 0; i < vec_reg.size(); i++) { |
337 | SegInfo& seg = vec_reg[i]; | 337 | SegInfo& seg = vec_reg[i]; |
338 | if (seg.seg_type == region_type) { | 338 | if (seg.seg_type == region_type) { |
339 | - // 黄实线 | 339 | + |
340 | int in_count = 0; | 340 | int in_count = 0; |
341 | - std::vector<cv::Point> vec_pt; | 341 | + // 车辆与region相交 |
342 | for (size_t j = 0; j < seg.vec_pt.size(); j++) { | 342 | for (size_t j = 0; j < seg.vec_pt.size(); j++) { |
343 | - double dist = pointPolygonTest(polygon_pts, cv::Point2f(seg.vec_pt[j].x_, seg.vec_pt[j].y_), false); | 343 | + double dist = pointPolygonTest(polygon_pts, seg.vec_pt[j], false); |
344 | if (dist > 0) { | 344 | if (dist > 0) { |
345 | in_count ++; | 345 | in_count ++; |
346 | } | 346 | } |
@@ -350,76 +350,20 @@ int RoadSegAnalysis::check_cross_region(std::vector<SegInfo>& vec_reg, sy_rect r | @@ -350,76 +350,20 @@ int RoadSegAnalysis::check_cross_region(std::vector<SegInfo>& vec_reg, sy_rect r | ||
350 | {//有5个点就认为是压线了 | 350 | {//有5个点就认为是压线了 |
351 | return 1; | 351 | return 1; |
352 | } | 352 | } |
353 | + | ||
354 | + // 车辆与region相交情形未检测出来,检测车辆在region中情形 | ||
355 | + for (size_t j = 0; j < polygon_pts.size(); j++) { | ||
356 | + double dist = pointPolygonTest(seg.vec_pt, polygon_pts[j], false); | ||
357 | + if (dist > 0) { | ||
358 | + return 1; | ||
359 | + } | ||
360 | + } | ||
353 | } | 361 | } |
354 | } | 362 | } |
355 | 363 | ||
356 | return -1; | 364 | return -1; |
357 | } | 365 | } |
358 | 366 | ||
359 | -// cv::Mat imshow_lanes(cv::Mat img, const rs_lane* lanes, int lane_count) { | ||
360 | -// float scale_w = img.cols / 640.0; | ||
361 | -// float scale_h = img.rows / 360.0; | ||
362 | -// std::vector<std::pair<std::vector<cv::Point>, int>> combined; | ||
363 | -// lanes_process(lanes, lane_count, combined, scale_w, scale_h); | ||
364 | - | ||
365 | -// for (const auto& lane_info : combined) { | ||
366 | -// const auto& xys = lane_info.first; | ||
367 | -// int cls = lane_info.second; | ||
368 | -// cv::Scalar color(lane_colors[cls][0],lane_colors[cls][1],lane_colors[cls][2]); | ||
369 | -// for (size_t i = 1; i < xys.size(); ++i) { | ||
370 | -// cv::line(img, xys[i - 1], xys[i], color, 4); | ||
371 | -// } | ||
372 | -// } | ||
373 | - | ||
374 | -// return img; | ||
375 | -// } | ||
376 | - | ||
377 | -// void RoadSegAnalysis::post_direct(rs_result one_result, sy_img src){ | ||
378 | -// int src_width = src.w_; | ||
379 | -// int src_height = src.h_; | ||
380 | -// int w = 640; | ||
381 | -// int h = 360; | ||
382 | -// float alpha = 0.75; | ||
383 | -// cv::Mat overlayed_direct_img(cv::Size(w,h), CV_8UC3, cv::Scalar(0, 0, 0)); | ||
384 | -// // 将车道线标签转换为彩色图像 | ||
385 | -// for (int i = 0; i < h; ++i) { | ||
386 | -// for (int j = 0; j < w; ++j) { | ||
387 | -// int idx = one_result.direct_seg[(i * w + j)]; | ||
388 | -// overlayed_direct_img.at<cv::Vec3b>(i, j)[0] = seg_colors[idx][0]; // R通道; | ||
389 | -// overlayed_direct_img.at<cv::Vec3b>(i, j)[1] = seg_colors[idx][1]; // G通道 | ||
390 | -// overlayed_direct_img.at<cv::Vec3b>(i, j)[2] = seg_colors[idx][2]; // B通道 | ||
391 | -// } | ||
392 | -// } | ||
393 | -// cv::resize(overlayed_direct_img, overlayed_direct_img, cv::Size(src_width,src_height), 0, 0, cv::INTER_LINEAR); | ||
394 | -// // 将原始图像和彩色车道线图进行混合 | ||
395 | -// // cv::addWeighted(cvImg, alpha, overlayed_direct_img, 1 - alpha, 0, overlayed_direct_img); | ||
396 | -// cv::Mat img_direct_lane = imshow_lanes(overlayed_direct_img, one_result.reg_array, one_result.lane_count); | ||
397 | -// cv::imwrite("img_direct_lane.jpg", img_direct_lane); | ||
398 | - | ||
399 | - | ||
400 | -// std::vector<std::pair<std::vector<cv::Point>, int>> combined; | ||
401 | -// lanes_process(one_result.reg_array, one_result.lane_count, combined); | ||
402 | -// std::vector<std::vector<cv::Point>> poly_masks, lanes, direct_masks, merge_masks; | ||
403 | -// std::vector<int> region_classes, cats, direct_classes, merge_classes; | ||
404 | -// cv::Mat background_mask; | ||
405 | -// std::map<double, int> x_sort; | ||
406 | -// bool large_resolution = false; | ||
407 | -// if (src_height > 1920) large_resolution = true; | ||
408 | -// cv::Mat seg_output = seg_post_process(large_resolution, one_result.seg_array, combined, poly_masks, region_classes, lanes, cats, x_sort, background_mask); //m_masks:mask前的结果 poly_masks后的结果 | ||
409 | -// cv::Mat direct_output = direct_post_process(large_resolution, one_result.direct_seg, direct_masks, direct_classes); | ||
410 | -// cv::Mat merge_output = merge_direct_process(large_resolution, one_result.direct_seg, merge_masks, merge_classes); | ||
411 | - | ||
412 | -// cv::Mat image(cv::Size(w,h), CV_8UC3, cv::Scalar(0, 0, 0)); | ||
413 | -// cv::Mat vis_image = mask_to_rgb(image, seg_output); | ||
414 | -// cv::Mat direct_image = mask_to_rgb(image, direct_output); | ||
415 | -// cv::Mat merge_image = mask_to_rgb(image, merge_output); | ||
416 | -// cv::imwrite("vis_image.jpg", vis_image); | ||
417 | -// cv::imwrite("direct_image.jpg", direct_image); | ||
418 | -// cv::imwrite("merge_image.jpg", merge_image); | ||
419 | -// cv::imwrite("background_mask.jpg", background_mask); | ||
420 | -// } | ||
421 | - | ||
422 | - | ||
423 | cv::Mat RoadSegAnalysis::mask_to_rgb(cv::Mat img, cv::Mat mask) { | 367 | cv::Mat RoadSegAnalysis::mask_to_rgb(cv::Mat img, cv::Mat mask) { |
424 | cv::Mat masks = img.clone(); | 368 | cv::Mat masks = img.clone(); |
425 | int reg_cls = 8; | 369 | int reg_cls = 8; |
@@ -612,10 +556,6 @@ cv::Mat RoadSegAnalysis::seg_post_process(bool large_resolution, unsigned char * | @@ -612,10 +556,6 @@ cv::Mat RoadSegAnalysis::seg_post_process(bool large_resolution, unsigned char * | ||
612 | if (x_sort.count(centr_x)) centr_x += 0.0001; | 556 | if (x_sort.count(centr_x)) centr_x += 0.0001; |
613 | x_sort.insert(std::make_pair(centr_x, count)); | 557 | x_sort.insert(std::make_pair(centr_x, count)); |
614 | ++ count; | 558 | ++ count; |
615 | - // for (auto iter: contours_poly) { | ||
616 | - // std::cout << "contour " << iter << " " << cat << std::endl; | ||
617 | - // } | ||
618 | - | ||
619 | } | 559 | } |
620 | } | 560 | } |
621 | } | 561 | } |
src/ai_engine_module/RoadSegAnalysis.h
@@ -18,15 +18,15 @@ public: | @@ -18,15 +18,15 @@ public: | ||
18 | RoadSegAnalysis(/* args */); | 18 | RoadSegAnalysis(/* args */); |
19 | ~RoadSegAnalysis(); | 19 | ~RoadSegAnalysis(); |
20 | 20 | ||
21 | - int init(int devId); | 21 | + int init(int devId, std::string sdk_root); |
22 | 22 | ||
23 | std::vector<RoadInfo> detect(vector<sy_img> vec_img); | 23 | std::vector<RoadInfo> detect(vector<sy_img> vec_img); |
24 | 24 | ||
25 | int check_reverse_driving(std::vector<SegInfo>& vec_direct, sy_rect rc, int src_width, int src_height, int head_or_tail); | 25 | int check_reverse_driving(std::vector<SegInfo>& vec_direct, sy_rect rc, int src_width, int src_height, int head_or_tail); |
26 | 26 | ||
27 | - int check_cross_line(std::vector<LineInfo>& vec_line, sy_rect rc); | 27 | + int check_cross_line(std::vector<LineInfo>& vec_line, sy_rect rc, int src_width, int src_height); |
28 | 28 | ||
29 | - int check_cross_region(std::vector<SegInfo>& vec_reg, sy_rect rc, int region_type); | 29 | + int check_cross_region(std::vector<SegInfo>& vec_reg, sy_rect rc, int src_width, int src_height, int region_type); |
30 | 30 | ||
31 | private: | 31 | private: |
32 | int release(); | 32 | int release(); |
src/ai_engine_module/VehicleAnalysis.cpp
@@ -9,7 +9,7 @@ VehicleAnalysis::~VehicleAnalysis() { | @@ -9,7 +9,7 @@ VehicleAnalysis::~VehicleAnalysis() { | ||
9 | release(); | 9 | release(); |
10 | } | 10 | } |
11 | 11 | ||
12 | -int VehicleAnalysis::init(int devId, int max_batch_size) { | 12 | +int VehicleAnalysis::init(int devId, std::string sdk_root, int max_batch_size) { |
13 | 13 | ||
14 | param.vehicle_detect_config= SY_CONFIG_OPEN; //1.开启车检测 SY_CONFIG_CLOSE SY_CONFIG_OPEN | 14 | param.vehicle_detect_config= SY_CONFIG_OPEN; //1.开启车检测 SY_CONFIG_CLOSE SY_CONFIG_OPEN |
15 | param.vehicle_recg_config= SY_CONFIG_OPEN; //4.开启车型识别 | 15 | param.vehicle_recg_config= SY_CONFIG_OPEN; //4.开启车型识别 |
@@ -52,9 +52,11 @@ int VehicleAnalysis::init(int devId, int max_batch_size) { | @@ -52,9 +52,11 @@ int VehicleAnalysis::init(int devId, int max_batch_size) { | ||
52 | //车颜色阈值 | 52 | //车颜色阈值 |
53 | param.vc_thresld = 0.5; | 53 | param.vc_thresld = 0.5; |
54 | 54 | ||
55 | + string dbPath = sdk_root + "/models/vehicle_analysis/db/vr_h0725x210605_r191230.db"; | ||
56 | + string models_path = sdk_root + "/models/vehicle_analysis/"; | ||
55 | //车型参数 | 57 | //车型参数 |
56 | - param.dbPath="./models/vehicle_analysis/db/vr_h0725x210605_r191230.db"; | ||
57 | - param.models_Path="./models/vehicle_analysis/"; //所有模型的地址 | 58 | + param.dbPath= (char*)dbPath.data(); |
59 | + param.models_Path= (char*)models_path.data(); //所有模型的地址 | ||
58 | 60 | ||
59 | cout << "va_init start " << endl; | 61 | cout << "va_init start " << endl; |
60 | // 内部有 ctx | 62 | // 内部有 ctx |
src/ai_engine_module/VehicleAnalysis.h
@@ -38,7 +38,7 @@ public: | @@ -38,7 +38,7 @@ public: | ||
38 | VehicleAnalysis(/* args */); | 38 | VehicleAnalysis(/* args */); |
39 | ~VehicleAnalysis(); | 39 | ~VehicleAnalysis(); |
40 | 40 | ||
41 | - int init(int devId, int max_batch_size); | 41 | + int init(int devId, std::string sdk_root, int max_batch_size); |
42 | 42 | ||
43 | va_result* detect(vector<sy_img> vec_img); | 43 | va_result* detect(vector<sy_img> vec_img); |
44 | 44 |
src/ai_engine_module/VehicleHeadTail.cpp
@@ -17,8 +17,10 @@ int VehicleHeadTail::init(head_tail_param param){ | @@ -17,8 +17,10 @@ int VehicleHeadTail::init(head_tail_param param){ | ||
17 | 17 | ||
18 | LOG_INFO("head_tail version: head_tail_256.2024.12.18"); | 18 | LOG_INFO("head_tail version: head_tail_256.2024.12.18"); |
19 | 19 | ||
20 | + string model_path = param.sdk_root + "/models/car_head_tail/head_tail_256_241220_310P.om"; | ||
21 | + | ||
20 | m_cnn_cls = new CnnCls(); | 22 | m_cnn_cls = new CnnCls(); |
21 | - int ret = m_cnn_cls->Init("./models/car_head_tail/head_tail_256_241220_310P.om"); | 23 | + int ret = m_cnn_cls->Init(model_path.c_str()); |
22 | if (ret != SY_SUCCESS) { | 24 | if (ret != SY_SUCCESS) { |
23 | delete m_cnn_cls; | 25 | delete m_cnn_cls; |
24 | m_cnn_cls = nullptr; | 26 | m_cnn_cls = nullptr; |
src/ai_engine_module/VehicleHeadTail.h
@@ -14,6 +14,7 @@ typedef struct head_tail_param | @@ -14,6 +14,7 @@ typedef struct head_tail_param | ||
14 | { | 14 | { |
15 | int devId; //ָ指定显卡id | 15 | int devId; //ָ指定显卡id |
16 | int max_batch; | 16 | int max_batch; |
17 | + std::string sdk_root; | ||
17 | head_tail_param() :devId(0), max_batch(8){}; | 18 | head_tail_param() :devId(0), max_batch(8){}; |
18 | } head_tail_param; | 19 | } head_tail_param; |
19 | 20 |
src/ai_engine_module/VidClothes.cpp
@@ -9,11 +9,13 @@ VidClothes::~VidClothes() | @@ -9,11 +9,13 @@ VidClothes::~VidClothes() | ||
9 | release(); | 9 | release(); |
10 | } | 10 | } |
11 | 11 | ||
12 | -int VidClothes::init(int devId){ | 12 | +int VidClothes::init(int devId, std::string sdk_root){ |
13 | ACL_CALL(aclrtCreateContext(&ctx, devId), SY_SUCCESS, SY_FAILED); | 13 | ACL_CALL(aclrtCreateContext(&ctx, devId), SY_SUCCESS, SY_FAILED); |
14 | 14 | ||
15 | + std::string model_path = sdk_root + "/models/vid_clothes/vidClothes0325_310P.om"; | ||
16 | + | ||
15 | vidclothes_param param; | 17 | vidclothes_param param; |
16 | - param.modelNames = "./models/vid_clothes/vidClothes0325_310P.om"; | 18 | + param.modelNames = (char*)model_path.data(); |
17 | param.thresld = 0.0; | 19 | param.thresld = 0.0; |
18 | param.devId = devId; | 20 | param.devId = devId; |
19 | 21 |
src/ai_engine_module/VidClothes.h
@@ -7,7 +7,7 @@ public: | @@ -7,7 +7,7 @@ public: | ||
7 | VidClothes(/* args */); | 7 | VidClothes(/* args */); |
8 | ~VidClothes(); | 8 | ~VidClothes(); |
9 | 9 | ||
10 | - int init(int devId); | 10 | + int init(int devId, std::string sdk_root); |
11 | 11 | ||
12 | vector<int> detect(vector<sy_img> vec_img); | 12 | vector<int> detect(vector<sy_img> vec_img); |
13 | 13 |
src/ai_engine_module/va_test.cpp0 deleted
1 | -#include <iostream> | ||
2 | -#include <sstream> | ||
3 | -#include <fstream> | ||
4 | - | ||
5 | -#include "sy_common.h" | ||
6 | -#include "sy_errorinfo.h" | ||
7 | -#include "vehicle_analysis.h" | ||
8 | -#include "vehicle_result.h" | ||
9 | - | ||
10 | -#include "opencv2/opencv.hpp" | ||
11 | -#include "opencv2/imgcodecs/legacy/constants_c.h" | ||
12 | -#include "opencv2/imgproc/types_c.h" | ||
13 | -#include "time.h" | ||
14 | -#include "sys/time.h" | ||
15 | - | ||
16 | -#include "utils.h" | ||
17 | -#include "dvpp_process.h" | ||
18 | - | ||
19 | -using namespace std; | ||
20 | -using namespace cv; | ||
21 | - | ||
22 | -#include <chrono> | ||
23 | -#include <dirent.h> | ||
24 | - | ||
25 | - | ||
26 | - | ||
27 | -//static char colorLabel[13][8] = { "棕", "橙", "灰", "白", "粉", "紫", "红", "绿", "蓝", "银", "青", "黄", "黑" }; | ||
28 | -static std::vector<std::string> CARCOLOR1 = { | ||
29 | - "BROWN","ORANGE","GRAY","WHITE","PINK","PURPLE","RED","GREEN","BLUE", | ||
30 | - "SILVER","CYAN","YELLOW","BLACK" | ||
31 | -}; | ||
32 | - | ||
33 | -static char vsLabel[11][40] = { "diao", "guan", "huo", "zha", "jiao","jiu", "la", "xiao", "qing", "sui","wei" }; | ||
34 | - | ||
35 | - | ||
36 | -double msecond() { | ||
37 | - struct timeval tv; | ||
38 | - gettimeofday(&tv, 0); | ||
39 | - return (tv.tv_sec * 1000.0 + tv.tv_usec / 1000.0); | ||
40 | -} | ||
41 | - | ||
42 | - | ||
43 | -void getAllNm(std::string pthNm, std::vector<std::string>& fileList) | ||
44 | -{ | ||
45 | - DIR *dir; | ||
46 | - struct dirent *ptr; | ||
47 | - dir = opendir(pthNm.c_str()); ///open the dir | ||
48 | - int filenum = 0; | ||
49 | - while((ptr = readdir(dir)) != NULL) ///read the list of this dir | ||
50 | - { | ||
51 | - // char* to string | ||
52 | - std::string curNm = ptr->d_name; | ||
53 | - if(curNm != "." && curNm != "..") | ||
54 | - { | ||
55 | - filenum++; | ||
56 | - fileList.push_back(curNm); | ||
57 | - //printf("file %d name: %s\n", filenum, curNm.c_str()); | ||
58 | - } | ||
59 | - } | ||
60 | - closedir(dir); | ||
61 | -} | ||
62 | - | ||
63 | - | ||
64 | -void CvBGR2NV21(Mat& bgr, unsigned char* yuv) { | ||
65 | - int stride = (bgr.cols + 127) / 128 * 128; | ||
66 | - int strideH = (bgr.rows + 15) / 16 * 16; | ||
67 | - for (int i = 0; i < bgr.rows; i++) { | ||
68 | - for (int j = 0; j < bgr.cols; j++) { | ||
69 | - int B = bgr.at<cv::Vec3b>(i, j)[0]; | ||
70 | - int G = bgr.at<cv::Vec3b>(i, j)[1]; | ||
71 | - int R = bgr.at<cv::Vec3b>(i, j)[2]; | ||
72 | - | ||
73 | - int Y = (77 * R + 150 * G + 29 * B) >> 8; | ||
74 | - yuv[i * stride + j] = (Y < 0) ? 0 : ((Y > 255) ? 255 : Y); | ||
75 | - if (i % 2 == 0 && j % 2 == 0) { | ||
76 | - int U = ((-44 * R - 87 * G + 131 * B) >> 8) + 128; | ||
77 | - int V = ((131 * R - 110 * G - 21 * B) >> 8) + 128; | ||
78 | - yuv[strideH * stride + i / 2 * stride + j] = (V < 0) ? 0 : ((V > 255) ? 255 : V); | ||
79 | - yuv[strideH * stride + i / 2 * stride + j + 1] = (U < 0) ? 0 : ((U > 255) ? 255 : U); | ||
80 | - } | ||
81 | - } | ||
82 | - } | ||
83 | -} | ||
84 | - | ||
85 | - | ||
86 | - | ||
87 | - | ||
88 | - | ||
89 | - | ||
90 | - | ||
91 | -int main() { | ||
92 | - | ||
93 | - //ofstream oFile; | ||
94 | - //打开要输出的文件 | ||
95 | - //oFile.open("va_result.csv", ios::out | ios::trunc); | ||
96 | - //oFile << "image" << "," << "image_quality_score" << "," << "count" << "," << "vehicle_info" << endl; | ||
97 | - | ||
98 | - | ||
99 | - cout << va_get_version() << endl; | ||
100 | - | ||
101 | - //string imagepath= "./vpt/"; | ||
102 | - //string saveimagepath= "./result/"; | ||
103 | - //int gpuid = 0; | ||
104 | - | ||
105 | - //string imagepath= "/home/HwHiAiUser/WH/vehicle_analysis202105/data/vpt/"; | ||
106 | - //string imagepath= "/home/HwHiAiUser/WH/vehicle_analysis202105/data/bug/"; | ||
107 | - string img_file_path= "/data/wanghong/Atlas310pro/vehicle_analysis202303/data/bug/"; | ||
108 | - //string imagepath= "/home/HwHiAiUser/WH/vehicle_analysis202105/data/img/"; | ||
109 | - //string imagepath= "/home/HwHiAiUser/WH/vehicle_analysis202105/data/carset/"; | ||
110 | - string saveimagepath= "/data/wanghong/Atlas310pro/vehicle_analysis202303/data/result/"; | ||
111 | - int gpuid = 0; | ||
112 | - | ||
113 | - va_param param; | ||
114 | - param.vehicle_detect_config= SY_CONFIG_OPEN; //1.开启车检测 SY_CONFIG_CLOSE SY_CONFIG_OPEN | ||
115 | - param.vehicle_color_config= SY_CONFIG_OPEN; //3.开启车颜色识别 | ||
116 | - param.vehicle_recg_config= SY_CONFIG_OPEN; //4.开启车型识别 | ||
117 | - param.vehicle_recg_supplement_config= SY_CONFIG_OPEN; //4.开启车型识别补充识别 | ||
118 | - param.vehicle_plate_det_recg_config= SY_CONFIG_OPEN; //5.开启车牌检测识别 | ||
119 | - param.vehicle_pendant_det_config= SY_CONFIG_OPEN; //6.开启车属性检测识别 | ||
120 | - param.vehicle_illegal_config= SY_CONFIG_OPEN; //7.开启车违规 | ||
121 | - param.vehicle_feature_config= SY_CONFIG_OPEN; //8.开启车辆特征提取 | ||
122 | - param.vehicle_motor_tricycle_analysis_config= SY_CONFIG_OPEN; //8.摩托车分析 | ||
123 | - param.vehicle_manned_config= SY_CONFIG_OPEN; //8.开启载人分析 | ||
124 | - | ||
125 | - | ||
126 | - param.gpuid=gpuid; | ||
127 | - | ||
128 | - //车检测参数 | ||
129 | - //param.vehicle_det_param.process_min_l = 720;// 720; | ||
130 | - //param.vehicle_det_param.process_max_l = 1280;//1280; | ||
131 | - //param.vehicle_det_param.thresld=0.3; | ||
132 | - //param.min_obj_size=200; //最小目标 | ||
133 | - param.vehicle_det_thresld=0.4; | ||
134 | - | ||
135 | - //车牌检测参数 | ||
136 | - //param.vehicle_plate_det_param.process_min_l=320; | ||
137 | - //param.vehicle_plate_det_param.process_max_l=320; | ||
138 | - //param.vehicle_plate_det_param.thresld=0.4; | ||
139 | - param.vehicle_plate_det_thresld=0.5; | ||
140 | - | ||
141 | - //车属性检测参数 | ||
142 | - //param.vehicle_attribute_det_param.process_min_l=360; | ||
143 | - //param.vehicle_attribute_det_param.process_max_l=640; | ||
144 | - //param.vehicle_attribute_det_param.thresld=0.3; | ||
145 | - param.vehicle_attribute_det_thresld=0.5; | ||
146 | - | ||
147 | - //车logo检测参数 | ||
148 | - //param.vehicle_logo_det_param.process_min_l=512; | ||
149 | - //param.vehicle_logo_det_param.process_max_l=512; | ||
150 | - //param.vehicle_logo_det_param.thresld=0.1; | ||
151 | - param.vehicle_logo_det_thresld=0.1; | ||
152 | - | ||
153 | - //车颜色阈值 | ||
154 | - param.vc_thresld = 0.5; | ||
155 | - | ||
156 | - //车型参数 | ||
157 | - param.dbPath="/data/wanghong/Atlas310pro/vehicle_analysis202303/vehicle_analysis/db/vr_h0725x210605_r191230.db"; | ||
158 | - //param.dbPath="../db/vr_h0725x210605_r191230.db"; | ||
159 | - | ||
160 | - param.models_Path="/data/wanghong/Atlas310pro/vehicle_analysis202303/vehicle_analysis/all_models/"; //所有模型的地址 | ||
161 | - //param.models_Path="../modelsPath/"; //所有模型的地址 | ||
162 | - | ||
163 | - | ||
164 | - int ret0= va_acl_init(); | ||
165 | - | ||
166 | - void* handle = nullptr; | ||
167 | - cout << "init start " << endl; | ||
168 | - int ret = va_init(&handle, param); | ||
169 | - if (ret == 0) { | ||
170 | - cout << "init success " << endl; | ||
171 | - } | ||
172 | - else | ||
173 | - return ret; | ||
174 | - | ||
175 | - | ||
176 | - | ||
177 | - | ||
178 | -// void* handle111 = nullptr; | ||
179 | -// cout << "init2 start " << endl; | ||
180 | -// int ret2 = va_init(&handle111, param); | ||
181 | -// if (ret2 == 0) { | ||
182 | -// cout << "init2 success " << endl; | ||
183 | -// } | ||
184 | -// else | ||
185 | -// { | ||
186 | -// cout << "init2 failed " << endl; | ||
187 | -// return ret2; | ||
188 | -// } | ||
189 | - | ||
190 | - | ||
191 | - | ||
192 | - double t3=0; | ||
193 | - int count =0; | ||
194 | - | ||
195 | -//temp | ||
196 | - aclrtContext ctx; | ||
197 | - ACL_CALL(aclrtCreateContext(&ctx, gpuid), ACL_ERROR_NONE, SY_FAILED); | ||
198 | - ACL_CALL(aclrtSetCurrentContext(ctx), ACL_ERROR_NONE, SY_FAILED); | ||
199 | - | ||
200 | - aclrtStream stream = nullptr; | ||
201 | - ACL_CALL(aclrtCreateStream(&stream), ACL_ERROR_NONE, SY_FAILED); | ||
202 | - DvppProcess* dvpp = new DvppProcess(); | ||
203 | - dvpp->InitResource(stream); | ||
204 | - | ||
205 | -for(int iter =0;iter<100;iter++) | ||
206 | -{ | ||
207 | - //ifstream infile("list.txt"); | ||
208 | - //ifstream infile("list_bug.txt"); | ||
209 | - //ifstream infile("list_700W.txt"); | ||
210 | - //ifstream infile("list_img.txt"); | ||
211 | - //string file; | ||
212 | - std::vector<std::string> fileList; | ||
213 | - getAllNm(img_file_path,fileList); | ||
214 | - if (fileList.empty()) throw std::logic_error("No suitable images were found"); | ||
215 | - | ||
216 | - | ||
217 | - for (auto & file : fileList) | ||
218 | - { | ||
219 | - string filename = img_file_path + file; | ||
220 | - cout << "img path: " << filename << endl; | ||
221 | - const int batch_size = 1; | ||
222 | - printf("batch_size=%d \n",batch_size); | ||
223 | - | ||
224 | - Mat cvImg = imread(filename.c_str()); | ||
225 | - sy_img imgs[batch_size]; | ||
226 | - | ||
227 | - ACL_CALL(aclrtSetCurrentContext(ctx), ACL_ERROR_NONE, SY_FAILED); | ||
228 | - ImageData src[batch_size], dvpp_data[batch_size]; | ||
229 | - if(1) | ||
230 | - { | ||
231 | - for (int b = 0; b < batch_size; b++) { | ||
232 | - Utils::ReadImageFile(src[b], filename); //将二进制图像读入内存,并读取宽高信息 | ||
233 | - ACL_CALL(dvpp->CvtJpegToYuv420sp(dvpp_data[b], src[b]), SY_SUCCESS, SY_FAILED); //解码 | ||
234 | - imgs[b].w_ = dvpp_data[b].width;//dvpp_data[b].alignWidth; | ||
235 | - imgs[b].h_ = dvpp_data[b].height;//dvpp_data[b].alignHeight; | ||
236 | - imgs[b].data_ = dvpp_data[b].data.get();//(uint8_t*)Utils::CopyDataDeviceToLocal(dvpp_data[b].data.get(), dvpp_data[b].size); | ||
237 | - } | ||
238 | - } | ||
239 | - | ||
240 | - ImageData img_data_dvpp[batch_size]; | ||
241 | - sy_img imgs_device[batch_size]; | ||
242 | - if(0) | ||
243 | - { | ||
244 | - uint32_t alignWidth = (cvImg.cols + 127) / 128 * 128; | ||
245 | - uint32_t alignHeight = (cvImg.rows + 15) / 16 * 16; | ||
246 | - uint32_t size = alignWidth * alignHeight * 1.5; | ||
247 | - std::shared_ptr<uint8_t> data = shared_ptr<uint8_t>((new uint8_t[size]), | ||
248 | - [](uint8_t* p) {delete [] p;}); | ||
249 | - CvBGR2NV21(cvImg, data.get()); | ||
250 | - | ||
251 | - for (int i = 0; i < batch_size; i++) { | ||
252 | - imgs[i].w_ = cvImg.cols; | ||
253 | - imgs[i].h_ = cvImg.rows; | ||
254 | - imgs[i].data_ = data.get(); | ||
255 | - //转到device输入 | ||
256 | - Utils::CopysyImageDataToDvpp(img_data_dvpp[i], imgs[i]); | ||
257 | - imgs_device[i].w_ = img_data_dvpp[i].width;//dvpp_data[b].alignWidth; | ||
258 | - imgs_device[i].h_ = img_data_dvpp[i].height;//dvpp_data[b].alignHeight; | ||
259 | - imgs_device[i].data_ = img_data_dvpp[i].data.get(); | ||
260 | - } | ||
261 | - } | ||
262 | - | ||
263 | - if(0) | ||
264 | - { | ||
265 | - uint32_t alignWidth = (cvImg.cols + 127) / 128 * 128; | ||
266 | - uint32_t alignHeight = (cvImg.rows + 15) / 16 * 16; | ||
267 | - uint32_t size = alignWidth * alignHeight * 1.5; | ||
268 | - std::shared_ptr<uint8_t> data = shared_ptr<uint8_t>((new uint8_t[size]), | ||
269 | - [](uint8_t* p) {delete [] p;}); | ||
270 | - CvBGR2NV21(cvImg, data.get()); | ||
271 | - | ||
272 | - for (int i = 0; i < batch_size; i++) { | ||
273 | - imgs[i].w_ = cvImg.cols; | ||
274 | - imgs[i].h_ = cvImg.rows; | ||
275 | - imgs[i].data_ = data.get(); | ||
276 | - } | ||
277 | - | ||
278 | - } | ||
279 | - | ||
280 | - count++; | ||
281 | - | ||
282 | - va_result *result=new va_result[batch_size]; | ||
283 | - for(int b=0;b<batch_size;b++) | ||
284 | - { | ||
285 | - result[b].count=0; | ||
286 | - result[b].info=new vehicle_info[100]; | ||
287 | - for(int c=0; c<100; c++) | ||
288 | - { | ||
289 | - result[b].info[c].vehicle_pendant_det_res.vpd_res=new v_pendant_d_info[300]; | ||
290 | - } | ||
291 | - } | ||
292 | - | ||
293 | - double t1,t2; | ||
294 | - t1 = msecond(); | ||
295 | - | ||
296 | - std::cout << "Predict----------------------------------"<< std::endl; | ||
297 | - int ret = va_batch(handle, imgs, batch_size, result); | ||
298 | - //int ret = va_batch(handle, imgs_device, batch_size, result); | ||
299 | - t2 = msecond(); | ||
300 | - printf("va_teat info:va_batch time: %.2f\n", (t2 - t1)); | ||
301 | - t3 += t2-t1; | ||
302 | - | ||
303 | - std::cout << "output----------------------------------"<< std::endl; | ||
304 | - | ||
305 | - for (int b = 0; b < batch_size; b++) | ||
306 | - { | ||
307 | - if(param.vehicle_detect_config==SY_CONFIG_CLOSE)//不做车头检测时,应设result[b].count=1,即输入是车头图像,只含1辆车。 | ||
308 | - result[b].count=1; | ||
309 | - | ||
310 | - //oFile << file << ","<< result[b].count<< "," <<endl;; | ||
311 | - std::cout <<"car_count:" <<result[b].count<< std::endl; | ||
312 | - for(int c=0;c<result[b].count;c++) | ||
313 | - { | ||
314 | - //temp,中间结果,输出车牌被置黑的车小图 | ||
315 | - //if(0) | ||
316 | - //{ | ||
317 | - // cv::Mat tmp(result[b].info[c].car_img_data_cpu[0].h_, result[b].info[c].car_img_data_cpu[0].w_, CV_8UC3, result[b].info[c].car_img_data_cpu[0].data_); | ||
318 | - // char str_i[100]; | ||
319 | - // sprintf(str_i, "%d_", c); | ||
320 | - // cv::imwrite((save_folder_roi+str_i+i).c_str(),tmp); | ||
321 | - //} | ||
322 | - | ||
323 | - | ||
324 | - std::string str_vehicle_type; | ||
325 | - int vehicle_type=result[b].info[c].type; | ||
326 | - //std::cout << "vehicle_type="<<vehicle_type<< std::endl; | ||
327 | - if (vehicle_type==0)str_vehicle_type = "head"; | ||
328 | - else if (vehicle_type==1)str_vehicle_type = "rear"; | ||
329 | - else if (vehicle_type==2)str_vehicle_type = "motor"; | ||
330 | - else if (vehicle_type==3)str_vehicle_type = "tricycle"; | ||
331 | - else if (vehicle_type==4)str_vehicle_type = "body"; | ||
332 | - else if (vehicle_type==5)str_vehicle_type = "body_nova"; | ||
333 | - std::cout << " vehicle_type:"<<str_vehicle_type<< std::endl; | ||
334 | - | ||
335 | - //1.车头结果:蓝框//2.车窗结果:绿框 | ||
336 | - if(param.vehicle_detect_config==SY_CONFIG_OPEN) | ||
337 | - { | ||
338 | - //车身 | ||
339 | - //std::cout << "vehicle_body_detect_res info:"<< std::endl; | ||
340 | - if(result[b].info[c].vehicle_body_detect_res.rect.width_>0) | ||
341 | - { | ||
342 | - float vehicle_body_detect_res_score = result[b].info[c].vehicle_body_detect_res.score; | ||
343 | - int x1=result[b].info[c].vehicle_body_detect_res.rect.left_; | ||
344 | - int y1=result[b].info[c].vehicle_body_detect_res.rect.top_; | ||
345 | - int x2=result[b].info[c].vehicle_body_detect_res.rect.left_+result[b].info[c].vehicle_body_detect_res.rect.width_; | ||
346 | - int y2=result[b].info[c].vehicle_body_detect_res.rect.top_+result[b].info[c].vehicle_body_detect_res.rect.height_; | ||
347 | - std::cout << " vehicle_body_detect_res_score:" <<vehicle_body_detect_res_score<<",car_rect:[" <<x1<<"," <<y1<<"," <<x2-x1<<"," <<y2-y1<<"]"<< std::endl; | ||
348 | - | ||
349 | - Point lt(x1, y1); | ||
350 | - Point rb(x2, y2); | ||
351 | - rectangle(cvImg, lt, rb, cv::Scalar(0, 255,255), 4); | ||
352 | - } | ||
353 | - | ||
354 | - //车头 | ||
355 | - //std::cout << "vehicle_detect_res info:"<< std::endl; | ||
356 | - if(result[b].info[c].vehicle_detect_res.rect.width_>0) | ||
357 | - { | ||
358 | - float vehicle_detect_res_score = result[b].info[c].vehicle_detect_res.score; | ||
359 | - int x1=result[b].info[c].vehicle_detect_res.rect.left_; | ||
360 | - int y1=result[b].info[c].vehicle_detect_res.rect.top_; | ||
361 | - int x2=result[b].info[c].vehicle_detect_res.rect.left_+result[b].info[c].vehicle_detect_res.rect.width_; | ||
362 | - int y2=result[b].info[c].vehicle_detect_res.rect.top_+result[b].info[c].vehicle_detect_res.rect.height_; | ||
363 | - std::cout << " vehicle_detect_res_score:" <<vehicle_detect_res_score<<",car_rect:[" <<x1<<"," <<y1<<"," <<x2-x1<<"," <<y2-y1<<"]"<< std::endl; | ||
364 | - | ||
365 | - Point lt(x1, y1); | ||
366 | - Point rb(x2, y2); | ||
367 | - rectangle(cvImg, lt, rb, cv::Scalar(255, 0, 0), 4); | ||
368 | - } | ||
369 | - | ||
370 | - //车窗 | ||
371 | - //std::cout << "vwd output----"<< std::endl; | ||
372 | - if(result[b].info[c].vehicle_win_detect_res.rect.width_>0) | ||
373 | - { | ||
374 | - float vehicle_win_detect_res_score = result[b].info[c].vehicle_win_detect_res.score; | ||
375 | - int x1=result[b].info[c].vehicle_win_detect_res.rect.left_; | ||
376 | - int y1=result[b].info[c].vehicle_win_detect_res.rect.top_; | ||
377 | - int x2=result[b].info[c].vehicle_win_detect_res.rect.left_+result[b].info[c].vehicle_win_detect_res.rect.width_; | ||
378 | - int y2=result[b].info[c].vehicle_win_detect_res.rect.top_+result[b].info[c].vehicle_win_detect_res.rect.height_; | ||
379 | - std::cout << " vehicle_win_detect_res_score:" <<vehicle_win_detect_res_score<<",win_rect:[" <<x1<<"," <<y1<<"," <<x2-x1<<"," <<y2-y1<<"]"<< std::endl; | ||
380 | - | ||
381 | - Point lt(x1, y1); | ||
382 | - Point rb(x2, y2); | ||
383 | - rectangle(cvImg, lt, rb, cv::Scalar(0, 255, 0), 4); | ||
384 | - } | ||
385 | - } | ||
386 | - | ||
387 | - | ||
388 | - //3.车颜色 | ||
389 | - if(param.vehicle_color_config==SY_CONFIG_OPEN&& (vehicle_type==0 || vehicle_type==1 || vehicle_type==4)) | ||
390 | - { | ||
391 | - //std::cout << "vc output----"<< std::endl; | ||
392 | - int index=result[b].info[c].vehicle_color_res.index; | ||
393 | - float score=result[b].info[c].vehicle_color_res.score; | ||
394 | - | ||
395 | - if(score>0.5) | ||
396 | - { | ||
397 | - std::cout << " car color info:"<< endl; | ||
398 | - std::cout << " index:"<< index<<" score:"<< score<< std::endl; | ||
399 | - | ||
400 | - std::string str_i = CARCOLOR1[index]; | ||
401 | - cv::putText(cvImg, str_i, | ||
402 | - cv::Point(result[b].info[c].vehicle_body_detect_res.rect.left_+5, result[b].info[c].vehicle_body_detect_res.rect.top_+50), | ||
403 | - cv::FONT_HERSHEY_COMPLEX_SMALL, | ||
404 | - 1.3, | ||
405 | - cv::Scalar(0, 0, 255), | ||
406 | - 2); | ||
407 | - } | ||
408 | - } | ||
409 | - | ||
410 | - | ||
411 | - //4.VR车型识别 | ||
412 | - if(param.vehicle_recg_config==SY_CONFIG_OPEN && (vehicle_type==0 || vehicle_type==1 || vehicle_type==4 )) | ||
413 | - { | ||
414 | - //std::cout << "vr output----"<< std::endl; | ||
415 | - | ||
416 | - char *vehicle_brand=result[b].info[c].vehicle_recg_res.vehicle_brand;//车辆品牌 | ||
417 | - char* vehicle_subbrand=result[b].info[c].vehicle_recg_res.vehicle_subbrand; //车辆子品牌 | ||
418 | - char* vehicle_issue_year=result[b].info[c].vehicle_recg_res.vehicle_issue_year; //车辆年款 | ||
419 | - char* vehicle_type_=result[b].info[c].vehicle_recg_res.vehicle_type; //车辆类型 | ||
420 | - char* freight_ton=result[b].info[c].vehicle_recg_res.freight_ton; //货车吨级 | ||
421 | - float name_score=result[b].info[c].vehicle_recg_res.name_score; //识别置信度 | ||
422 | - | ||
423 | - float name_score_thre = 0; | ||
424 | - //if(vehicle_type==0)name_score_thre=0.7;//车头车型识别建议阈值0.7 | ||
425 | - //if(vehicle_type==1)name_score_thre=0.8;//车尾车型识别建议阈值0.8 | ||
426 | - if(name_score > name_score_thre) | ||
427 | - { | ||
428 | - cout << " vehicle_recg info: " << endl; | ||
429 | - std::cout << " name_score: " << name_score << std::endl; | ||
430 | - std::cout << " vehicle_brand: " << vehicle_brand << std::endl; | ||
431 | - std::cout << " vehicle_subbrand: " << vehicle_subbrand << std::endl; | ||
432 | - std::cout << " vehicle_issue_year: " << vehicle_issue_year << std::endl; | ||
433 | - std::cout << " vehicle_type_: " << vehicle_type_ << std::endl; | ||
434 | - std::cout << " freight_ton: " << freight_ton << std::endl; | ||
435 | - | ||
436 | - //printf("name_score:%f\n", name_score); | ||
437 | - //printf("vehicle_brand:%s\n", vehicle_brand); | ||
438 | - //printf("vehicle_subbrand:%s\n", vehicle_subbrand); | ||
439 | - //printf("vehicle_issue_year:%s\n", vehicle_issue_year); | ||
440 | - //printf("vehicle_type_:%s\n", vehicle_type_); | ||
441 | - //printf("freight_ton:%s\n", freight_ton); | ||
442 | - } | ||
443 | - | ||
444 | - } | ||
445 | - | ||
446 | - | ||
447 | - //5.VP车牌检测识别 | ||
448 | - if(param.vehicle_plate_det_recg_config==SY_CONFIG_OPEN && (vehicle_type==0 || vehicle_type==1)) | ||
449 | - { | ||
450 | - std::cout << " car plate info:"<< endl; | ||
451 | - int special_type=result[b].info[c].vehicle_plate_det_recg_res.special_type;//常规车牌、临时车牌、低速车牌。0-common,1-temporary_license_plate,2-low_speed_license_plate. | ||
452 | - std::cout << " special_type:" << special_type<< std::endl; | ||
453 | - | ||
454 | - float detect_score=result[b].info[c].vehicle_plate_det_recg_res.detect_score; | ||
455 | - //std::cout << "detect_score:" << detect_score<< std::endl; | ||
456 | - if(detect_score>0.3) | ||
457 | - { | ||
458 | - int type=result[b].info[c].vehicle_plate_det_recg_res.type; | ||
459 | - sy_rect rect=result[b].info[c].vehicle_plate_det_recg_res.rect; | ||
460 | - | ||
461 | - int x1=rect.left_; | ||
462 | - int y1=rect.top_; | ||
463 | - int x2=rect.left_+rect.width_; | ||
464 | - int y2=rect.top_+rect.height_; | ||
465 | - std::cout << " vp_type:"<<type<<",vp_det_score:" <<detect_score <<",vp_rect:[" <<x1<<"," <<y1<<"," <<x2-x1<<"," <<y2-y1<<"]"<< std::endl; | ||
466 | - | ||
467 | - Point lt(x1, y1); | ||
468 | - Point rb(x2, y2); | ||
469 | - rectangle(cvImg, lt, rb, cv::Scalar(0, 0, 255), 4); | ||
470 | - | ||
471 | - | ||
472 | - | ||
473 | - //车牌识别结果 | ||
474 | - float num_score=result[b].info[c].vehicle_plate_det_recg_res.num_score; | ||
475 | - std::string plate_recg=""; | ||
476 | - //if(num_score>0.99)//车牌识别建议置信度阈值0.99 | ||
477 | - { | ||
478 | - | ||
479 | - //printf("plate: "); | ||
480 | - for (int m = 0; m < PLATENUM; m++) | ||
481 | - { | ||
482 | - //printf("%s", result[b].info[c].vehicle_plate_det_recg_res.recg[m].character); | ||
483 | - plate_recg=plate_recg + result[b].info[c].vehicle_plate_det_recg_res.recg[m].character; | ||
484 | - } | ||
485 | - //printf("\n"); | ||
486 | - | ||
487 | - //printf("maxprob: "); | ||
488 | - //for (int m = 0; m < PLATENUM; m++) | ||
489 | - //{ | ||
490 | - // printf("%f ", result[b].info[c].vehicle_plate_det_recg_res.vehicle_plate_infos[0].recg[m].maxprob); | ||
491 | - //} | ||
492 | - //printf("\n"); | ||
493 | - | ||
494 | - | ||
495 | - //std::cout << "type:" << type<<" num_score:" <<num_score<<" " << std::endl; | ||
496 | - std::cout <<" "<<plate_recg<< ",vp_num_score:" << num_score<< std::endl; | ||
497 | - | ||
498 | - } | ||
499 | - | ||
500 | - | ||
501 | - char str_cc[100]; | ||
502 | - memset(str_cc, 0, sizeof(str_cc)); | ||
503 | - cv::Point2f p1; | ||
504 | - p1.x = x1; | ||
505 | - p1.y = y1-60; | ||
506 | - //sprintf(str_cc, "det_%.2f_recg_%.2f_%s",detectScore,numScore,plate_recg.c_str()); | ||
507 | - sprintf(str_cc, "det_%.2f",detect_score); | ||
508 | - cv::putText(cvImg, str_cc, | ||
509 | - p1, | ||
510 | - cv::FONT_HERSHEY_COMPLEX_SMALL, | ||
511 | - 1.3, | ||
512 | - cv::Scalar(0, 0, 255), | ||
513 | - 2); | ||
514 | - | ||
515 | - memset(str_cc, 0, sizeof(str_cc)); | ||
516 | - p1.x = x1; | ||
517 | - p1.y = y1-30; | ||
518 | - sprintf(str_cc, "recg_%.2f",num_score); | ||
519 | - cv::putText(cvImg, str_cc, | ||
520 | - p1, | ||
521 | - cv::FONT_HERSHEY_COMPLEX_SMALL, | ||
522 | - 1.3, | ||
523 | - cv::Scalar(0, 0, 255), | ||
524 | - 2); | ||
525 | - | ||
526 | - memset(str_cc, 0, sizeof(str_cc)); | ||
527 | - p1.x = x1; | ||
528 | - p1.y = y1; | ||
529 | - sprintf(str_cc, "%s",plate_recg.c_str()); | ||
530 | - cv::putText(cvImg, str_cc, | ||
531 | - p1, | ||
532 | - cv::FONT_HERSHEY_COMPLEX_SMALL, | ||
533 | - 1.3, | ||
534 | - cv::Scalar(0, 0, 255), | ||
535 | - 2); | ||
536 | - | ||
537 | - } | ||
538 | - | ||
539 | - } | ||
540 | - | ||
541 | - //6.车属性结果: | ||
542 | - if(param.vehicle_pendant_det_config==SY_CONFIG_OPEN && (vehicle_type==0|| vehicle_type==4)) | ||
543 | - { | ||
544 | - std::cout << " vehicle_pendant_det_res info:"<< endl; | ||
545 | - int vpd_num = result[b].info[c].vehicle_pendant_det_res.count; | ||
546 | - //std::cout << vpd_num<< std::endl; | ||
547 | - std::cout << " vpd_num:"<<vpd_num<< endl; | ||
548 | - for(int p=0; p<vpd_num; p++) | ||
549 | - { | ||
550 | - int index = result[b].info[c].vehicle_pendant_det_res.vpd_res[p].index; | ||
551 | - float detect_score = result[b].info[c].vehicle_pendant_det_res.vpd_res[p].confidence; | ||
552 | - int driver_copilot_info = result[b].info[c].vehicle_pendant_det_res.vpd_res[p].driver_copilot_info; | ||
553 | - int x1=result[b].info[c].vehicle_pendant_det_res.vpd_res[p].rect.left_; | ||
554 | - int y1=result[b].info[c].vehicle_pendant_det_res.vpd_res[p].rect.top_; | ||
555 | - int x2=result[b].info[c].vehicle_pendant_det_res.vpd_res[p].rect.left_+result[b].info[c].vehicle_pendant_det_res.vpd_res[p].rect.width_; | ||
556 | - int y2=result[b].info[c].vehicle_pendant_det_res.vpd_res[p].rect.top_+result[b].info[c].vehicle_pendant_det_res.vpd_res[p].rect.height_; | ||
557 | - | ||
558 | - //std::cout <<p<<" ["<<x1<<" "<<y1<<" "<<x2-x1<<" "<<y2-y1<<"] "<<detectScore<<" "<<index<<" "<<driver_copilot_info<< std::endl; | ||
559 | - std::cout << " vpd id:"<<p<<" index:"<<index<<",vpd_det_score:" <<detect_score <<",vpd_rect:[" <<x1<<"," <<y1<<"," <<x2-x1<<"," <<y2-y1<<"]"<<" driver_copilot_info:"<<driver_copilot_info<< std::endl; | ||
560 | - | ||
561 | - | ||
562 | - Point lt(x1, y1); | ||
563 | - Point rb(x2, y2); | ||
564 | - rectangle(cvImg, lt, rb, cv::Scalar(255, 255, 0), 4); | ||
565 | - | ||
566 | - //车属性人脸特征 | ||
567 | - //f(index ==1)//人脸 | ||
568 | - //{ | ||
569 | - // std::cout << " vpd face feature:["; | ||
570 | - // /*for(int f=0;f<VPD_FACE_FEATURESIZE;f++) | ||
571 | - // { | ||
572 | - // float fea = result[b].info[c].vehicle_pendant_det_res.vpd_res[p].feature[f]; | ||
573 | - // //std::cout << "feature "<<f<<":"<<fea<<std::endl; | ||
574 | - // std::cout <<fea<< " "; | ||
575 | - // }*/ | ||
576 | - // std::cout << "]"<< std::endl; | ||
577 | - // //std::cout << "face feature:"<<result[b].info[c].vehicle_pendant_det_res.vpd_res[p].feature[0]<<" "<<result[b].info[c].vehicle_pendant_det_res.vpd_res[p].feature[1]<<" "<<result[b].info[c].vehicle_pendant_det_res.vpd_res[p].feature[2]<<std::endl; | ||
578 | - //} | ||
579 | - } | ||
580 | - } | ||
581 | - | ||
582 | - //7.VID车违规结果----------- | ||
583 | - if(param.vehicle_illegal_config==SY_CONFIG_OPEN && vehicle_type==0) | ||
584 | - { | ||
585 | - std::cout << " vehicle_illegal_det_res info:"<< endl; | ||
586 | - vid_result cur_result = result[b].info[c].vehicle_illegal_det_res; | ||
587 | - //副驾驶copilot | ||
588 | - { | ||
589 | - //有人没人判断,阈值0.6 | ||
590 | - std::string str_person="UNCERTAINTY"; | ||
591 | - if(cur_result.copilot.person.status==SOMEBODY) | ||
592 | - str_person ="PERSON"; | ||
593 | - else if(cur_result.copilot.person.status==NOBODY) | ||
594 | - str_person ="NOPERSON"; | ||
595 | - //cv::putText(batch_mat[b], str_person, | ||
596 | - // cv::Point(5, 25), | ||
597 | - // cv::FONT_HERSHEY_COMPLEX_SMALL, | ||
598 | - // 1.3, | ||
599 | - // cv::Scalar(255, 0, 0), | ||
600 | - // 2); | ||
601 | - | ||
602 | - //打电话,阈值0.9 | ||
603 | - std::string str_call="UNCERTAINTY"; | ||
604 | - if(cur_result.copilot.call.status==lEGAL) | ||
605 | - str_call ="lEGAL";//str_call ="NOCALL"; | ||
606 | - else if(cur_result.copilot.call.status==ILLEGAL) | ||
607 | - str_call ="ILLEGAL";//str_call ="CALL"; | ||
608 | - //cv::putText(batch_mat[b], str_call, | ||
609 | - // cv::Point(5, 50), | ||
610 | - // cv::FONT_HERSHEY_COMPLEX_SMALL, | ||
611 | - // 1.3, | ||
612 | - // cv::Scalar(255, 0, 0), | ||
613 | - // 2); | ||
614 | - | ||
615 | - //使用电话、阈值0.89 | ||
616 | - std::string str_phone="UNCERTAINTY"; | ||
617 | - if(cur_result.copilot.phone.status==lEGAL) | ||
618 | - str_phone ="lEGAL";//str_phone ="NOPHONE"; | ||
619 | - else if(cur_result.copilot.phone.status==ILLEGAL) | ||
620 | - str_phone ="ILLEGAL";//str_phone ="USEPHONE"; | ||
621 | - //cv::putText(batch_mat[b], str_phone, | ||
622 | - // cv::Point(5, 75), | ||
623 | - // cv::FONT_HERSHEY_COMPLEX_SMALL, | ||
624 | - // 1.3, | ||
625 | - // cv::Scalar(255, 0, 0), | ||
626 | - // 2); | ||
627 | - | ||
628 | - //系安全带,阈值0.5 | ||
629 | - std::string str_belt="UNCERTAINTY"; | ||
630 | - if(cur_result.copilot.belt.status==lEGAL) | ||
631 | - str_belt ="lEGAL";//str_belt ="SAFETYBELT"; | ||
632 | - else if(cur_result.copilot.belt.status==ILLEGAL) | ||
633 | - str_belt ="ILLEGAL"; | ||
634 | - | ||
635 | - //cv::putText(batch_mat[b], str_belt, | ||
636 | - // cv::Point(5, 75), | ||
637 | - // cv::FONT_HERSHEY_COMPLEX_SMALL, | ||
638 | - // 1.3, | ||
639 | - // cv::Scalar(255, 0, 0), | ||
640 | - // 2); | ||
641 | - | ||
642 | - //抽烟,阈值0.9 | ||
643 | - std::string str_smoke="UNCERTAINTY"; | ||
644 | - if(cur_result.copilot.smoke.status==ILLEGAL) | ||
645 | - str_smoke ="ILLEGAL";//str_smoke ="SMOKE"; | ||
646 | - else if(cur_result.copilot.smoke.status==lEGAL) | ||
647 | - str_smoke ="lEGAL";//str_smoke ="NOSMOKE"; | ||
648 | - //cv::putText(batch_mat[b], str_smoke, | ||
649 | - // cv::Point(5, 100), | ||
650 | - // cv::FONT_HERSHEY_COMPLEX_SMALL, | ||
651 | - // 1.3, | ||
652 | - // cv::Scalar(255, 0, 0), | ||
653 | - // 2); | ||
654 | - | ||
655 | - //std::cout << "copilot: "<<str_person<< " "<<str_call<< " "<<str_phone<< " "<<str_belt<< " "<<str_smoke<< std::endl; | ||
656 | - //std::cout << "copilot confidence: "<<cur_result.copilot.person.confidence<< " "<<cur_result.copilot.call.confidence<< " "<<cur_result.copilot.phone.confidence<< " "<<cur_result.copilot.belt.confidence<< " "<<cur_result.copilot.smoke.confidence<< std::endl; | ||
657 | - std::cout << " copilot: "<<"person:"<<str_person<< " call:"<<str_call<< " phone:"<<str_phone<< " belt:"<<str_belt<< " smoke:"<<str_smoke<< std::endl; | ||
658 | - std::cout << " copilot confidence: "<<"person:"<<cur_result.copilot.person.confidence<< " call:"<<cur_result.copilot.call.confidence<< " phone:"<<cur_result.copilot.phone.confidence<< " belt:"<<cur_result.copilot.belt.confidence<< " smoke:"<<cur_result.copilot.smoke.confidence<< std::endl; | ||
659 | - | ||
660 | - } | ||
661 | - | ||
662 | - //驾驶driver | ||
663 | - { | ||
664 | - //有人没人判断,阈值0.6 | ||
665 | - std::string str_person="UNCERTAINTY"; | ||
666 | - if(cur_result.driver.person.status==SOMEBODY) | ||
667 | - str_person ="PERSON"; | ||
668 | - else if(cur_result.driver.person.status==NOBODY) | ||
669 | - str_person ="NOPERSON"; | ||
670 | - //cv::putText(batch_mat[b], str_person, | ||
671 | - // cv::Point(5, 150), | ||
672 | - // cv::FONT_HERSHEY_COMPLEX_SMALL, | ||
673 | - // 1.3, | ||
674 | - // cv::Scalar(255, 0, 0), | ||
675 | - // 2); | ||
676 | - | ||
677 | - //打电话,阈值0.9 | ||
678 | - std::string str_call="UNCERTAINTY"; | ||
679 | - if(cur_result.driver.call.status==lEGAL) | ||
680 | - str_call ="lEGAL";//str_call ="NOCALL"; | ||
681 | - else if(cur_result.driver.call.status==ILLEGAL) | ||
682 | - str_call ="ILLEGAL";//str_call ="CALL"; | ||
683 | - //cv::putText(batch_mat[b], str_call, | ||
684 | - // cv::Point(5, 175), | ||
685 | - // cv::FONT_HERSHEY_COMPLEX_SMALL, | ||
686 | - // 1.3, | ||
687 | - // cv::Scalar(255, 0, 0), | ||
688 | - // 2); | ||
689 | - | ||
690 | - //使用电话,阈值0.89 | ||
691 | - std::string str_phone="UNCERTAINTY"; | ||
692 | - if(cur_result.driver.phone.status==lEGAL) | ||
693 | - str_phone ="lEGAL";//str_phone ="NOPHONE"; | ||
694 | - else if(cur_result.driver.phone.status==ILLEGAL) | ||
695 | - str_phone ="ILLEGAL";//str_phone ="USEPHONE"; | ||
696 | - //cv::putText(batch_mat[b], str_phone, | ||
697 | - // cv::Point(5, 200), | ||
698 | - // cv::FONT_HERSHEY_COMPLEX_SMALL, | ||
699 | - // 1.3, | ||
700 | - // cv::Scalar(255, 0, 0), | ||
701 | - // 2); | ||
702 | - | ||
703 | - //系安全带,阈值0.5 | ||
704 | - std::string str_belt="UNCERTAINTY"; | ||
705 | - if(cur_result.driver.belt.status==lEGAL) | ||
706 | - str_belt ="lEGAL";//str_belt ="SAFETYBELT"; | ||
707 | - else if(cur_result.driver.belt.status==ILLEGAL) | ||
708 | - str_belt ="ILLEGAL";//str_belt ="NOSAFETYBELT"; | ||
709 | - | ||
710 | - //cv::putText(batch_mat[b], str_belt, | ||
711 | - // cv::Point(5, 200), | ||
712 | - // cv::FONT_HERSHEY_COMPLEX_SMALL, | ||
713 | - // 1.3, | ||
714 | - // cv::Scalar(255, 0, 0), | ||
715 | - // 2); | ||
716 | - | ||
717 | - //抽烟,阈值0.9 | ||
718 | - std::string str_smoke="UNCERTAINTY"; | ||
719 | - if(cur_result.driver.smoke.status==ILLEGAL) | ||
720 | - str_smoke ="ILLEGAL";//str_smoke ="SMOKE"; | ||
721 | - else if(cur_result.driver.smoke.status==lEGAL) | ||
722 | - str_smoke ="lEGAL";//str_smoke ="NOSMOKE"; | ||
723 | - //cv::putText(batch_mat[b], str_smoke, | ||
724 | - // cv::Point(5, 225), | ||
725 | - // cv::FONT_HERSHEY_COMPLEX_SMALL, | ||
726 | - // 1.3, | ||
727 | - // cv::Scalar(255, 0, 0), | ||
728 | - // 2); | ||
729 | - | ||
730 | - //std::cout << "driver: "<<str_person<< " "<<str_call<< " "<<str_phone<< " "<<str_belt<< " "<<str_smoke<< std::endl; | ||
731 | - //std::cout << "driver confidence: "<<cur_result.driver.person.confidence<< " "<<cur_result.driver.call.confidence<< " "<<cur_result.driver.phone.confidence<< " "<<cur_result.driver.belt.confidence<< " "<<cur_result.driver.smoke.confidence<< std::endl; | ||
732 | - std::cout << " driver: person:"<<str_person<< " call:"<<str_call<< " phone:"<<str_phone<< " belt:"<<str_belt<< " smoke:"<<str_smoke<< std::endl; | ||
733 | - std::cout << " driver confidence: person:"<<cur_result.driver.person.confidence<< " call:"<<cur_result.driver.call.confidence<< " phone:"<<cur_result.driver.phone.confidence<< " belt:"<<cur_result.driver.belt.confidence<< " smoke:"<<cur_result.driver.smoke.confidence<< std::endl; | ||
734 | - | ||
735 | - } | ||
736 | - } | ||
737 | - | ||
738 | - | ||
739 | - | ||
740 | - | ||
741 | - //8.车特征 | ||
742 | - if(param.vehicle_feature_config==SY_CONFIG_OPEN && (vehicle_type==0 || vehicle_type==1)) | ||
743 | - { | ||
744 | - std::cout << " vehicle_fea_res info: "<<std::endl; | ||
745 | - std::cout << " ["; | ||
746 | - for(int f=0;f<VA_FEATURESIZE;f++) | ||
747 | - { | ||
748 | - float fea=result[b].info[c].vehicle_fea_res.feature[f]; | ||
749 | - //std::cout << "feature "<<f<<":"<<fea<<std::endl; | ||
750 | - std::cout <<fea<<" "; | ||
751 | - } | ||
752 | - std::cout <<"]"<<std::endl; | ||
753 | - //std::cout << "feature 0 :"<<result[b].info[c].vehicle_fea_res.feature[0]<<std::endl; | ||
754 | - //std::cout << "feature 1 :"<<result[b].info[c].vehicle_fea_res.feature[1]<<std::endl; | ||
755 | - //std::cout << "feature 2 :"<<result[b].info[c].vehicle_fea_res.feature[2]<<std::endl; | ||
756 | - //std::cout << "feature 3 :"<<result[b].info[c].vehicle_fea_res.feature[3]<<std::endl; | ||
757 | - //std::cout << "feature 4 :"<<result[b].info[c].vehicle_fea_res.feature[4]<<std::endl; | ||
758 | - //std::cout << "feature 5 :"<<result[b].info[c].vehicle_fea_res.feature[5]<<std::endl; | ||
759 | - | ||
760 | - //test | ||
761 | - //for(int f=0;f<10;f++) | ||
762 | - //{ | ||
763 | - // float fea=result[b].info[c].vehicle_fea_res.feature[f]; | ||
764 | - // std::cout << "feature "<<f<<":"<<fea<<std::endl; | ||
765 | - //} | ||
766 | - } | ||
767 | - | ||
768 | - //11.摩托车三轮车分析 | ||
769 | - if(param.vehicle_motor_tricycle_analysis_config==SY_CONFIG_OPEN && (vehicle_type==2 || vehicle_type==3)) | ||
770 | - { | ||
771 | - //std::cout << "mta output----"<< std::endl; | ||
772 | - | ||
773 | - if(vehicle_type==2)//摩托车 | ||
774 | - { | ||
775 | - //摩托车载人 | ||
776 | - //int status=result[b].info[c].mta_res.motor_manned.status; | ||
777 | - //float score=result[b].info[c].mta_res.motor_manned.confidence; | ||
778 | - //if(status == MOTOR_MANNED) | ||
779 | - // std::cout << "motor info: MOTOR_MANNED, prob: " << score << std::endl; | ||
780 | - //else if(status == MOTOR_NOT_MANNED) | ||
781 | - // std::cout << "motor info: MOTOR_NOT_MANNED, prob: " << score << std::endl; | ||
782 | - | ||
783 | - //摩托车驾驶人是否戴安全帽 | ||
784 | - int status=result[b].info[c].mta_res.motor_driver_helmeted.status; | ||
785 | - float score=result[b].info[c].mta_res.motor_driver_helmeted.confidence; | ||
786 | - if(status == MOTOR_DRIVER_HELMETED) | ||
787 | - std::cout << " motor info: MOTOR_DRIVER_HELMETED, prob: " << score << std::endl; | ||
788 | - else if(status == MOTOR_DRIVER_NOT_HELMETED) | ||
789 | - std::cout << " motor info: MOTOR_DRIVER_NOT_HELMETED, prob: " << score << std::endl; | ||
790 | - | ||
791 | - } | ||
792 | - } | ||
793 | - //载人输出 | ||
794 | - //if(param.vehicle_manned_config==SY_CONFIG_OPEN && (vehicle_type==0 || vehicle_type==1 || vehicle_type==3)) | ||
795 | - if(param.vehicle_manned_config==SY_CONFIG_OPEN && vehicle_type!=5) | ||
796 | - { | ||
797 | - std::cout << "----------------------manned output----"<< std::endl; | ||
798 | - int hs_count = result[b].info[c].manned_res.hs_count; | ||
799 | - std::cout <<"manned_hs_count:"<< hs_count << std::endl; | ||
800 | - for(int lo=0;lo<hs_count;lo++) | ||
801 | - { | ||
802 | - int x1=result[b].info[c].manned_res.hs_rect[lo].rect.left_; | ||
803 | - int y1=result[b].info[c].manned_res.hs_rect[lo].rect.top_; | ||
804 | - int x2=result[b].info[c].manned_res.hs_rect[lo].rect.left_+result[b].info[c].manned_res.hs_rect[lo].rect.width_; | ||
805 | - int y2=result[b].info[c].manned_res.hs_rect[lo].rect.top_+result[b].info[c].manned_res.hs_rect[lo].rect.height_; | ||
806 | - | ||
807 | - std::cout <<"manned_hs_rect:"<< x1 <<" "<< y1<<" " <<x2<<" " << y2<< std::endl; | ||
808 | - | ||
809 | - Point lt(x1, y1); | ||
810 | - Point rb(x2, y2); | ||
811 | - rectangle(cvImg, lt, rb, cv::Scalar(0, 255, 255), 4); | ||
812 | - } | ||
813 | - } | ||
814 | - } | ||
815 | - | ||
816 | - //测试相似度比对函数,batch_size设为2 | ||
817 | - //double similarity=va_compute_similarity(result[0].info[0].vehicle_fea_res.feature, result[1].info[0].vehicle_fea_res.feature, FEATURESIZE); | ||
818 | - //std::cout << "similarity: "<<similarity<<std::endl; | ||
819 | - | ||
820 | - | ||
821 | - | ||
822 | - //cv::Mat showImg; | ||
823 | - //showImg=batch_mat[b].clone(); | ||
824 | - //cv::resize(batch_mat[b], showImg, cv::Size(batch_mat[b].cols/2,batch_mat[b].rows/2)); | ||
825 | - //cv::imshow("image", showImg); | ||
826 | - //cv::waitKey(0); | ||
827 | - cv::imwrite((saveimagepath+file).c_str(),cvImg); | ||
828 | - | ||
829 | - } | ||
830 | - | ||
831 | - | ||
832 | - | ||
833 | - | ||
834 | - | ||
835 | - | ||
836 | - //delete result | ||
837 | - for(int b=0;b<batch_size;b++) | ||
838 | - { | ||
839 | - for(int c=0; c<100; c++) | ||
840 | - { | ||
841 | - if(result[b].info[c].vehicle_pendant_det_res.vpd_res!=NULL) | ||
842 | - delete[] result[b].info[c].vehicle_pendant_det_res.vpd_res; | ||
843 | - | ||
844 | - } | ||
845 | - if(result[b].info!=NULL) | ||
846 | - delete[] result[b].info; | ||
847 | - } | ||
848 | - if(result!=NULL) | ||
849 | - delete[] result; | ||
850 | - | ||
851 | - } | ||
852 | -} | ||
853 | - | ||
854 | - std::cout << "va_release---------------------"<< std::endl; | ||
855 | - va_release(&handle); | ||
856 | - //va_release(&handle111); | ||
857 | - va_acl_release(); | ||
858 | - | ||
859 | - printf("va_teat info:va_batch time: t3=%.2f\n", t3/count); | ||
860 | - | ||
861 | - //oFile.close(); | ||
862 | - | ||
863 | - return 0; | ||
864 | -} |
src/demo/main.cpp
@@ -10,8 +10,7 @@ int main() { | @@ -10,8 +10,7 @@ int main() { | ||
10 | 10 | ||
11 | VillageParam param; | 11 | VillageParam param; |
12 | param.dev_id = 0; | 12 | param.dev_id = 0; |
13 | - param.db_path = ""; | ||
14 | - param.model_path = ""; | 13 | + param.sdk_path = "."; |
15 | int ret = village_pic_init(&vaHandle, param); | 14 | int ret = village_pic_init(&vaHandle, param); |
16 | 15 | ||
17 | vector<string> vec_path; | 16 | vector<string> vec_path; |
src/village_inc.h
@@ -5,10 +5,13 @@ | @@ -5,10 +5,13 @@ | ||
5 | #include <vector> | 5 | #include <vector> |
6 | #include "vehicle_analysis.h" | 6 | #include "vehicle_analysis.h" |
7 | 7 | ||
8 | +#include "opencv2/opencv.hpp" | ||
9 | +#include "opencv2/imgcodecs/legacy/constants_c.h" | ||
10 | +#include "opencv2/imgproc/types_c.h" | ||
11 | + | ||
8 | struct VillageParam { | 12 | struct VillageParam { |
9 | int dev_id; | 13 | int dev_id; |
10 | - std::string db_path; | ||
11 | - std::string model_path; | 14 | + std::string sdk_path; |
12 | }; | 15 | }; |
13 | 16 | ||
14 | typedef struct pendant_info | 17 | typedef struct pendant_info |
@@ -57,12 +60,12 @@ typedef struct VehicleInfo { | @@ -57,12 +60,12 @@ typedef struct VehicleInfo { | ||
57 | 60 | ||
58 | struct LineInfo{ | 61 | struct LineInfo{ |
59 | int line_type; | 62 | int line_type; |
60 | - std::vector<sy_point> vec_pt; | 63 | + std::vector<cv::Point> vec_pt; |
61 | }; | 64 | }; |
62 | 65 | ||
63 | struct SegInfo { | 66 | struct SegInfo { |
64 | int seg_type; | 67 | int seg_type; |
65 | - std::vector<sy_point> vec_pt; | 68 | + std::vector<cv::Point> vec_pt; |
66 | }; | 69 | }; |
67 | 70 | ||
68 | typedef struct AnalysisResult { | 71 | typedef struct AnalysisResult { |