#include "../village_pic_interface.h" #include #include #include #include "../utils/logger.hpp" using namespace std; void show_result(std::vector r); int main() { void *vaHandle = NULL; VillageParam param; param.dev_id = 0; param.sdk_path = "."; param.log_level = 1; 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; // size_t i = 0; // // for (i = 1; i < 8; i++) // { // string path = "./img/test_road"; // path = path + to_string(i) + ".jpg"; // vec_path.push_back(path); // } vector vec_path; { string path = "./img/test_all1.jpg"; vec_path.push_back(path); } std::vector result = village_pic_analysis_file(vaHandle, vec_path); show_result(result); village_pic_release(&vaHandle); return 0; } 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_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){ for (size_t i = 0; i < result.size(); i++) { std::vector info = result[i].info; for (size_t j = 0; j < info.size(); j++) { auto plate_info = info[j].vehicle_plate_det_recg_res; std::vector pendant_res = info[j].vehicle_pendant_det_res; 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 (pendant_res.size() > 0) { LOG_INFO("驾乘人员特征"); for (size_t k = 0; k < pendant_res.size(); k++) { auto one_pendant = pendant_res[k]; LOG_INFO(" 位置信息:{},{},{},{}", one_pendant.rect.left_, one_pendant.rect.top_, one_pendant.rect.width_, one_pendant.rect.height_ ); LOG_INFO(" 可信度:{}", one_pendant.confidence); LOG_INFO(" 衣着颜色:{}", human_color[one_pendant.iColor]); } } 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].motor_manned); LOG_INFO(" 加装雨棚:{} {}", info[j].rainshed, info[j].rainshed_prob); LOG_INFO(" 使用手机:{} {}", info[j].phoning, info[j].phoning_prob); LOG_INFO(" 逆行:{}", info[j].reverse_driving); LOG_INFO(" 货厢载人:{}", info[j].truck_manned); LOG_INFO(" 违反禁止标线 压实线:{} 压导流线:{}", info[j].cross_line, info[j].cross_diversion_line); } LOG_INFO("标线信息"); std::vector vec_line = result[i].vec_line; for (size_t i = 0; i < vec_line.size(); i++) { LineInfo one_line = vec_line[i]; LOG_INFO(" 标线类型:{}", line_cls[one_line.line_type]); string str_line = ""; for (size_t j = 0; j < one_line.vec_pt.size(); j++) { str_line += to_string(one_line.vec_pt[j].x)+","+to_string(one_line.vec_pt[j].y) + "_"; } LOG_INFO(" 标线点集:{}", str_line); } std::vector vec_road = result[i].vec_road; for (size_t i = 0; i < vec_road.size(); i++) { SegInfo one_seg = vec_road[i]; LOG_INFO(" 车道类型:{}", seg_cls[one_seg.seg_type]); string str_line = ""; for (size_t j = 0; j < one_seg.vec_pt.size(); j++) { str_line += to_string(one_seg.vec_pt[j].x)+","+to_string(one_seg.vec_pt[j].y) + "_"; } LOG_INFO(" 车道点集:{}", str_line); } } }