From 5fc0b8091e2c37bb4440e42e5587ffa6f4a95839 Mon Sep 17 00:00:00 2001 From: cmhu <2657262686@qq.com> Date: Thu, 23 Jan 2025 11:12:24 +0800 Subject: [PATCH] 完善demo --- src/demo/main.cpp | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 64 insertions(+), 18 deletions(-) diff --git a/src/demo/main.cpp b/src/demo/main.cpp index ad57214..afb3399 100644 --- a/src/demo/main.cpp +++ b/src/demo/main.cpp @@ -6,7 +6,7 @@ using namespace std; -void show_result(std::vector r); +void show_result(std::vector r, vector vec_path); int main() { @@ -20,7 +20,7 @@ int main() { 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); - + int ret = village_pic_init(&vaHandle, param); // vector vec_path; @@ -34,12 +34,12 @@ int main() { vector vec_path; { - string path = "./img/test_all1.jpg"; + string path = "./img/test_motor4.jpg"; vec_path.push_back(path); } std::vector result = village_pic_analysis_file(vaHandle, vec_path); - show_result(result); + show_result(result, vec_path); village_pic_release(&vaHandle); @@ -48,13 +48,17 @@ int main() { 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 面包/中巴"}; -static string plate_status[] = {"全部遮挡", " 无车牌", " 正常车牌", " 部分遮挡"}; +static string plate_status[] = {"无车牌", " 正常车牌", " 遮挡车牌"}; static string plate_type[] = {"0-单排蓝色 ", "1-单排黄色 ", "2-单排白色 ", "3-单排黑色", " 4-双排黄色 ", "5-双排白色 ", "6-新能源黄绿色 ", "7-新能源白绿色"}; static string human_color[] = {"棕", "橙", "灰", "白", "粉", "紫", "红", "绿", "蓝", "银", "青", "黄", "黑","多色", "其他"}; static string line_cls[] = {"未知", "黄实线", " 白实线", "白虚线", "黄虚线", "车道中线"}; static string seg_cls[] = {"未知","行车道/机动车道", "非机动车道", "应急车道", "导流线", "人行横道", "禁停区域", "十字路口区域", "农村道路"}; -void show_result(std::vector result){ +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 result, vector vec_path){ + + cv::Mat image = cv::imread(vec_path[0]); for (size_t i = 0; i < result.size(); i++) { @@ -64,18 +68,59 @@ void show_result(std::vector result){ auto plate_info = info[j].vehicle_plate_det_recg_res; std::vector pendant_res = info[j].vehicle_pendant_det_res; + 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); 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]); - LOG_INFO("车辆特征"); - LOG_INFO(" 号牌状态:{}", plate_status[plate_info.stain_vp_result.type]); - LOG_INFO(" 号牌位置:{},{},{},{}", plate_info.rect.left_, plate_info.rect.top_, plate_info.rect.width_, plate_info.rect.height_ ); - LOG_INFO(" 号牌种类:{}", plate_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]); + 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]); + } + if (pendant_res.size() > 0) { LOG_INFO("驾乘人员特征"); @@ -87,11 +132,9 @@ void show_result(std::vector result){ LOG_INFO(" 衣着颜色:{}", human_color[one_pendant.iColor]); } } - LOG_INFO("行人特征"); - LOG_INFO(" 上衣颜色:{}", human_color[info[j].human_upper_color]); - LOG_INFO(" 下衣颜色:{}", human_color[info[j].human_lower_color]); + LOG_INFO("违法行为特征"); - LOG_INFO(" 不戴头盔:{} 置信度:{}", info[j].mta_res.motor_driver_helmeted.status, info[j].mta_res.motor_driver_helmeted.confidence); + LOG_INFO(" 不戴头盔:{} 置信度:{}", info[j].mta_res.motor_driver_helmeted.status, info[j].mta_res.motor_driver_helmeted.confidence); LOG_INFO(" 违法载人:{}", info[j].motor_manned); LOG_INFO(" 加装雨棚:{} {}", info[j].rainshed, info[j].rainshed_prob); LOG_INFO(" 使用手机:{} {}", info[j].phoning, info[j].phoning_prob); @@ -127,4 +170,7 @@ void show_result(std::vector result){ LOG_INFO(" 车道点集:{}", str_line); } } + + cv::imwrite("./show_result.jpg", image); + image.release(); } \ No newline at end of file -- libgit2 0.21.4