#include "../village_pic_interface.h" #include #include #include #include #include #include "../utils/logger.hpp" #include "../utils/DeviceUtil.hpp" using namespace std; void show_result(std::vector r, vector vec_path); void GetFileNames(string path,vector& filenames) { DIR *pDir; struct dirent* ptr; if(!(pDir = opendir(path.c_str()))){ cout<<"Folder doesn't Exist!"<d_name, ".") != 0 && strcmp(ptr->d_name, "..") != 0){ filenames.push_back(path + "/" + ptr->d_name); } } closedir(pDir); } vector GetFilesFromFile(string file_path){ vector vec_files; fstream infile(file_path); string text; while (getline(infile, text)){ // text.erase(text.size() - 1, 1); vec_files.push_back(text); } infile.close(); return vec_files; } 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; // GetFileNames("/home/share/data/villiage_test/test3", vec_path); // vec_path = GetFilesFromFile("./files1.log"); { string path = "/home/share/data/villiage_test/test3/192.168.10.67_01_20230601160330100_15.jpg"; vec_path.push_back(path); } size_t last_recoder = 0; int index = 0; int max_value = vec_path.size(); // while (true) { // for (size_t i = 0; i < vec_path.size(); i++) { int first_index = rand() % max_value; int second_index = rand() % max_value; vector vec_file_name; vec_file_name.push_back(vec_path[first_index]); // vec_file_name.push_back(vec_path[second_index]); std::vector result = village_pic_analysis_file(vaHandle, vec_file_name); show_result(result, vec_path); size_t cur_recoder = GetDeviceMem(0); if (cur_recoder > last_recoder) { // LOG_INFO("memesize cur: {} last:{} file:{} file:{}", cur_recoder, last_recoder, vec_path[first_index], vec_path[second_index]); LOG_INFO("memesize cur: {} last:{} ", cur_recoder, last_recoder); } last_recoder = cur_recoder; } // LOG_INFO("第{}次完成:{}", index, vec_path.size()); LOG_INFO("第{}次完成", index); index++; } 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[] = {"未知","行车道/机动车道", "非机动车道", "应急车道", "导流线", "人行横道", "禁停区域", "十字路口区域", "农村道路"}; 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++) { LOG_INFO("-------------------------------------------第{}张图---------------------------------------------", 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; 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]); 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("驾乘人员特征"); 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(" 不戴头盔:{} 置信度:{}", 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 = ""; const cv::Scalar color(seg_colors[i][0], seg_colors[i][1], seg_colors[i][2]); size_t j = 0; for (; j < one_line.vec_pt.size() - 1; j++) { cv::line(image, one_line.vec_pt[j], one_line.vec_pt[j+1], color, 2, 8); str_line += to_string(one_line.vec_pt[j].x)+","+to_string(one_line.vec_pt[j].y) + "_"; } str_line += to_string(one_line.vec_pt[j].x)+","+to_string(one_line.vec_pt[j].y) + "_"; LOG_INFO(" 标线点集:{}", str_line); } std::vector > polys; 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) + "_"; } // polys.push_back(one_seg.vec_pt); const cv::Scalar color(seg_colors[i][0], seg_colors[i][1], seg_colors[i][2]); cv::polylines(image, one_seg.vec_pt, true, color, 3); // cv::fillPoly(image, one_seg.vec_pt, color); LOG_INFO(" 车道点集:{}", str_line); } // const cv::Scalar color(0, 0, 255); // cv::fillPoly(image, polys, color); } cv::imwrite("./show_result.jpg", image); image.release(); }