diff --git a/jni/VehicleNativeInterface.cpp b/jni/VehicleNativeInterface.cpp index 19cf78e..9afc1e5 100644 --- a/jni/VehicleNativeInterface.cpp +++ b/jni/VehicleNativeInterface.cpp @@ -290,22 +290,9 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_vehicle_VehicleNativeI t2 = msecond(); //printf("va jni info:decode time: %.2f\n", (t2 - t1)); - - //��ʼ������ - - // va_result *result = new va_result[batchSize]; - // for (int i = 0; i < batchSize; i++) - // { - // result[i].info = new vehicle_info[100]; - // for (int j = 0; j < 100; j++) - // { - // result[i].info[j].vehicle_pendant_det_res.vpd_res = new v_pendant_d_info[300]; - // //result[i].info[j].vehicle_recg_res.vr_info=new vr_result[3];//TOP3 - // } - // } - - va_result* result = village_pic_analysis(vaHandle, batch_img, batchSize); - if (result == nullptr) + + std::vector vec_result = village_pic_analysis(vaHandle, batch_img, batchSize); + if (vec_result.size() <= 0) { printf("jni info:village_pic_analysis failed."); return -1; @@ -320,12 +307,12 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_vehicle_VehicleNativeI { //printf("VAJNI_TEST begin reult: %d, count: %d\n", b, result[b].count); - for (int c = 0; c < result[b].count; c++) + for (int c = 0; c < vec_result[b].info.size(); c++) { //std::cout << "obj_quality_idx=" << result[b].info[c].obj_quality_idx << std::endl; //聚档数据类型�?-无效数据�?-低质数据�?-优质数据 std::string str_vehicle_type; - int vehicle_type = result[b].info[c].type; + int vehicle_type = vec_result[b].info[c].type; //std::cout << "vehicle_type=" << vehicle_type << std::endl; if (vehicle_type == 0)str_vehicle_type = "head"; else if (vehicle_type == 1)str_vehicle_type = "rear"; @@ -404,61 +391,37 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_vehicle_VehicleNativeI for (size_t i = 0; i < batchSize; i++) { - jobjectArray vehicleInfoArray = env->NewObjectArray(result[i].count, cls_VehicleInfo, NULL); + jobjectArray vehicleInfoArray = env->NewObjectArray(vec_result[i].info.size(), cls_VehicleInfo, NULL); - for (int j = 0; j < result[i].count; j++) + for (int j = 0; j < vec_result[i].info.size(); j++) { //vehicleDetectRes - jobject vehicle_detect_res_syRect_rect = env->NewObject(cls_SyRect, mid_SyRect, result[i].info[j].vehicle_detect_res.rect.left_, result[i].info[j].vehicle_detect_res.rect.top_, result[i].info[j].vehicle_detect_res.rect.width_, result[i].info[j].vehicle_detect_res.rect.height_); - jobject vehicleDetectResult = env->NewObject(cls_VehicleDetectResult, mid_VehicleDetectResult, vehicle_detect_res_syRect_rect, result[i].info[j].vehicle_detect_res.score); + auto vehicle_info = vec_result[i].info[j]; + jobject vehicle_detect_res_syRect_rect = env->NewObject(cls_SyRect, mid_SyRect, vehicle_info.vehicle_detect_res.rect.left_, vehicle_info.vehicle_detect_res.rect.top_, vehicle_info.vehicle_detect_res.rect.width_, vehicle_info.vehicle_detect_res.rect.height_); + jobject vehicleDetectResult = env->NewObject(cls_VehicleDetectResult, mid_VehicleDetectResult, vehicle_detect_res_syRect_rect, vehicle_info.vehicle_detect_res.score); //vehicleWinDetectRes - jobject vehicle_win_detect_res_syRect_rect = env->NewObject(cls_SyRect, mid_SyRect, result[i].info[j].vehicle_win_detect_res.rect.left_, result[i].info[j].vehicle_win_detect_res.rect.top_, result[i].info[j].vehicle_win_detect_res.rect.width_, result[i].info[j].vehicle_win_detect_res.rect.height_); - jobject vehicleWinDetectResult = env->NewObject(cls_VehicleDetectResult, mid_VehicleDetectResult, vehicle_win_detect_res_syRect_rect, result[i].info[j].vehicle_win_detect_res.score); + jobject vehicle_win_detect_res_syRect_rect = env->NewObject(cls_SyRect, mid_SyRect, vehicle_info.vehicle_win_detect_res.rect.left_, vehicle_info.vehicle_win_detect_res.rect.top_, vehicle_info.vehicle_win_detect_res.rect.width_, vehicle_info.vehicle_win_detect_res.rect.height_); + jobject vehicleWinDetectResult = env->NewObject(cls_VehicleDetectResult, mid_VehicleDetectResult, vehicle_win_detect_res_syRect_rect, vehicle_info.vehicle_win_detect_res.score); //vehicleBodyDetectRes - jobject vehicle_body_detect_res_syRect_rect = env->NewObject(cls_SyRect, mid_SyRect, result[i].info[j].vehicle_body_detect_res.rect.left_, result[i].info[j].vehicle_body_detect_res.rect.top_, result[i].info[j].vehicle_body_detect_res.rect.width_, result[i].info[j].vehicle_body_detect_res.rect.height_); - jobject vehicleBodyDetectResult = env->NewObject(cls_VehicleDetectResult, mid_VehicleDetectResult, vehicle_body_detect_res_syRect_rect, result[i].info[j].vehicle_body_detect_res.score); + jobject vehicle_body_detect_res_syRect_rect = env->NewObject(cls_SyRect, mid_SyRect, vehicle_info.vehicle_body_detect_res.rect.left_, vehicle_info.vehicle_body_detect_res.rect.top_, vehicle_info.vehicle_body_detect_res.rect.width_, vehicle_info.vehicle_body_detect_res.rect.height_); + jobject vehicleBodyDetectResult = env->NewObject(cls_VehicleDetectResult, mid_VehicleDetectResult, vehicle_body_detect_res_syRect_rect, vehicle_info.vehicle_body_detect_res.score); //vehicleColorRes jobject vehicleColorResult = NULL; if (global_vehicle_color_config == SY_CONFIG_OPEN) { - //printf("jni info vc:%f %d\n",result[i].info[j].vehicle_color_res.score, result[i].info[j].vehicle_color_res.index); - vehicleColorResult = env->NewObject(cls_VehicleColorResult, mid_VehicleColorResult, result[i].info[j].vehicle_color_res.score, result[i].info[j].vehicle_color_res.index); + vehicleColorResult = env->NewObject(cls_VehicleColorResult, mid_VehicleColorResult, vehicle_info.vehicle_color_res.score, vehicle_info.vehicle_color_res.index); } - - //vehicleRecgRes //0618 atlas�Ļ�top1�Ľӿ� + + //vehicleRecgRes //0618 atlas�Ļ�top1�Ľӿ� jobject vehicleRecgResult = NULL; if (global_vehicle_recg_config == SY_CONFIG_OPEN) { - jstring vehicleBrand = env->NewStringUTF(result[i].info[j].vehicle_recg_res.vehicle_brand); - jstring vehicleSubbrand = env->NewStringUTF(result[i].info[j].vehicle_recg_res.vehicle_subbrand); - jstring vehicleIssueYear = env->NewStringUTF(result[i].info[j].vehicle_recg_res.vehicle_issue_year); - jstring vehicleType = env->NewStringUTF(result[i].info[j].vehicle_recg_res.vehicle_type); - //cout<<"vehicle_type|"<NewStringUTF(result[i].info[j].vehicle_recg_res.freight_ton); - vehicleRecgResult = env->NewObject(cls_VehicleRecgResult, mid_VehicleRecgResult, vehicleBrand, vehicleSubbrand, vehicleIssueYear, vehicleType, freightTon, result[i].info[j].vehicle_recg_res.name_score); - - //////// - if(0) - { - char *vehicle_brand=result[i].info[i].vehicle_recg_res.vehicle_brand;//����Ʒ�� - char* vehicle_subbrand=result[i].info[i].vehicle_recg_res.vehicle_subbrand; //������Ʒ�� - char* vehicle_issue_year=result[i].info[i].vehicle_recg_res.vehicle_issue_year; //������� - char* vehicle_type_=result[i].info[i].vehicle_recg_res.vehicle_type; //�������� - char* freight_ton=result[i].info[i].vehicle_recg_res.freight_ton; //�����ּ� - float name_score=result[i].info[i].vehicle_recg_res.name_score; //ʶ�����Ŷ� - - float name_score_thre = 0; - if(name_score > name_score_thre) - { - printf("name_score:%f\n", name_score); - printf("vehicle_brand:%s\n", vehicle_brand); - printf("vehicle_subbrand:%s\n", vehicle_subbrand); - printf("vehicle_issue_year:%s\n", vehicle_issue_year); - printf("vehicle_type_:%s\n", vehicle_type_); - printf("freight_ton:%s\n", freight_ton); - } - } - - } + jstring vehicleBrand = env->NewStringUTF(vehicle_info.vehicle_recg_res.vehicle_brand); + jstring vehicleSubbrand = env->NewStringUTF(vehicle_info.vehicle_recg_res.vehicle_subbrand); + jstring vehicleIssueYear = env->NewStringUTF(vehicle_info.vehicle_recg_res.vehicle_issue_year); + jstring vehicleType = env->NewStringUTF(vehicle_info.vehicle_recg_res.vehicle_type); + jstring freightTon = env->NewStringUTF(vehicle_info.vehicle_recg_res.freight_ton); + vehicleRecgResult = env->NewObject(cls_VehicleRecgResult, mid_VehicleRecgResult, vehicleBrand, vehicleSubbrand, vehicleIssueYear, vehicleType, freightTon, vehicle_info.vehicle_recg_res.name_score); + } //vehiclePlateDetRecgRes jobject vplateResult = NULL; @@ -466,130 +429,118 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_vehicle_VehicleNativeI jobjectArray vplateNumArray = NULL; if (global_vehicle_plate_det_recg_config == SY_CONFIG_OPEN) { - vehicle_plate_det_recg_res_syRect_rect = env->NewObject(cls_SyRect, mid_SyRect, result[i].info[j].vehicle_plate_det_recg_res.rect.left_, result[i].info[j].vehicle_plate_det_recg_res.rect.top_, result[i].info[j].vehicle_plate_det_recg_res.rect.width_, result[i].info[j].vehicle_plate_det_recg_res.rect.height_); + vehicle_plate_det_recg_res_syRect_rect = env->NewObject(cls_SyRect, mid_SyRect, vehicle_info.vehicle_plate_det_recg_res.rect.left_, vehicle_info.vehicle_plate_det_recg_res.rect.top_, vehicle_info.vehicle_plate_det_recg_res.rect.width_, vehicle_info.vehicle_plate_det_recg_res.rect.height_); vplateNumArray = env->NewObjectArray(PLATENUM, cls_VplateNum, NULL); for (size_t k = 0; k < PLATENUM; k++) { - jstring character = env->NewStringUTF(result[i].info[j].vehicle_plate_det_recg_res.recg[k].character); - jobject vplateNum = env->NewObject(cls_VplateNum, mid_VplateNum, character, result[i].info[j].vehicle_plate_det_recg_res.recg[k].maxprob); + jstring character = env->NewStringUTF(vehicle_info.vehicle_plate_det_recg_res.recg[k].character); + jobject vplateNum = env->NewObject(cls_VplateNum, mid_VplateNum, character, vehicle_info.vehicle_plate_det_recg_res.recg[k].maxprob); env->SetObjectArrayElement(vplateNumArray, k, vplateNum); } } - - vplateResult = env->NewObject(cls_VplateResult, mid_VplateResult, vehicle_plate_det_recg_res_syRect_rect, result[i].info[j].vehicle_plate_det_recg_res.detect_score, vplateNumArray, result[i].info[j].vehicle_plate_det_recg_res.num_score, result[i].info[j].vehicle_plate_det_recg_res.type, result[i].info[j].vehicle_plate_det_recg_res.special_type); - - //vehiclePendantDetRes + + vplateResult = env->NewObject(cls_VplateResult, mid_VplateResult, vehicle_plate_det_recg_res_syRect_rect, vehicle_info.vehicle_plate_det_recg_res.detect_score, vplateNumArray, vehicle_info.vehicle_plate_det_recg_res.num_score, vehicle_info.vehicle_plate_det_recg_res.type, vehicle_info.vehicle_plate_det_recg_res.special_type); + + //vehiclePendantDetRes jobject vehiclePendantDetResult = NULL; if (global_vehicle_pendant_det_config == SY_CONFIG_OPEN) { - jobjectArray vehiclePendantDetInfoArray = env->NewObjectArray(result[i].info[j].vehicle_pendant_det_res.count, cls_VehiclePendantDetInfo, NULL); - for (size_t m = 0; m < result[i].info[j].vehicle_pendant_det_res.count; m++) + jobjectArray vehiclePendantDetInfoArray = env->NewObjectArray(vehicle_info.vehicle_pendant_det_res.size(), cls_VehiclePendantDetInfo, NULL); + for (size_t m = 0; m < vehicle_info.vehicle_pendant_det_res.size(); m++) { - jobject vehicle_pendant_det_res_vpd_res_syRect_rect = env->NewObject(cls_SyRect, mid_SyRect, - result[i].info[j].vehicle_pendant_det_res.vpd_res[m].rect.left_, - result[i].info[j].vehicle_pendant_det_res.vpd_res[m].rect.top_, - result[i].info[j].vehicle_pendant_det_res.vpd_res[m].rect.width_, - result[i].info[j].vehicle_pendant_det_res.vpd_res[m].rect.height_); + auto one_pendant_res = vehicle_info.vehicle_pendant_det_res[m]; + jobject vehicle_pendant_det_res_vpd_res_syRect_rect = env->NewObject(cls_SyRect, mid_SyRect, one_pendant_res.rect.left_, + one_pendant_res.rect.top_, one_pendant_res.rect.width_, one_pendant_res.rect.height_); - jobject vehiclePendantDetInfo = env->NewObject(cls_VehiclePendantDetInfo, mid_VehiclePendantDetInfo, vehicle_pendant_det_res_vpd_res_syRect_rect, result[i].info[j].vehicle_pendant_det_res.vpd_res[m].index, result[i].info[j].vehicle_pendant_det_res.vpd_res[m].confidence, result[i].info[j].vehicle_pendant_det_res.vpd_res[m].driver_copilot_info); + jobject vehiclePendantDetInfo = env->NewObject(cls_VehiclePendantDetInfo, mid_VehiclePendantDetInfo, vehicle_pendant_det_res_vpd_res_syRect_rect, one_pendant_res.index, one_pendant_res.confidence, one_pendant_res.driver_copilot_info); - env->SetObjectArrayElement(vehiclePendantDetInfoArray, m, vehiclePendantDetInfo); + env->SetObjectArrayElement(vehiclePendantDetInfoArray, m, vehiclePendantDetInfo); } - vehiclePendantDetResult = env->NewObject(cls_VehiclePendantDetResult, mid_VehiclePendantDetResult, vehiclePendantDetInfoArray, result[i].info[j].vehicle_pendant_det_res.count); + vehiclePendantDetResult = env->NewObject(cls_VehiclePendantDetResult, mid_VehiclePendantDetResult, vehiclePendantDetInfoArray, vehicle_info.vehicle_pendant_det_res.size()); } - + //vehicleIllegalDetRes jobject vehicleIllegalDetResult = NULL; if (global_vehicle_illegal_config == SY_CONFIG_OPEN) { - jobject vehicleIllegalDetDetails_driver_belt = env->NewObject(cls_VehicleIllegalDetDetails, mid_VehicleIllegalDetDetails, result[i].info[j].vehicle_illegal_det_res.driver.belt.status, result[i].info[j].vehicle_illegal_det_res.driver.belt.confidence); - jobject vehicleIllegalDetDetails_driver_smoke = env->NewObject(cls_VehicleIllegalDetDetails, mid_VehicleIllegalDetDetails, result[i].info[j].vehicle_illegal_det_res.driver.smoke.status, result[i].info[j].vehicle_illegal_det_res.driver.smoke.confidence); - jobject vehicleIllegalDetDetails_driver_call = env->NewObject(cls_VehicleIllegalDetDetails, mid_VehicleIllegalDetDetails, result[i].info[j].vehicle_illegal_det_res.driver.call.status, result[i].info[j].vehicle_illegal_det_res.driver.call.confidence); - jobject vehicleIllegalDetDetails_driver_phone = env->NewObject(cls_VehicleIllegalDetDetails, mid_VehicleIllegalDetDetails, result[i].info[j].vehicle_illegal_det_res.driver.phone.status, result[i].info[j].vehicle_illegal_det_res.driver.phone.confidence); - jobject vehicleIllegalDetDetails_driver_person = env->NewObject(cls_VehicleIllegalDetDetails, mid_VehicleIllegalDetDetails, result[i].info[j].vehicle_illegal_det_res.driver.person.status, result[i].info[j].vehicle_illegal_det_res.driver.person.confidence); - jobject vehicleIllegalDetDetails_copilot_belt = env->NewObject(cls_VehicleIllegalDetDetails, mid_VehicleIllegalDetDetails, result[i].info[j].vehicle_illegal_det_res.copilot.belt.status, result[i].info[j].vehicle_illegal_det_res.copilot.belt.confidence); - jobject vehicleIllegalDetDetails_copilot_smoke = env->NewObject(cls_VehicleIllegalDetDetails, mid_VehicleIllegalDetDetails, result[i].info[j].vehicle_illegal_det_res.copilot.smoke.status, result[i].info[j].vehicle_illegal_det_res.copilot.smoke.confidence); - jobject vehicleIllegalDetDetails_copilot_call = env->NewObject(cls_VehicleIllegalDetDetails, mid_VehicleIllegalDetDetails, result[i].info[j].vehicle_illegal_det_res.copilot.call.status, result[i].info[j].vehicle_illegal_det_res.copilot.call.confidence); - jobject vehicleIllegalDetDetails_copilot_phone = env->NewObject(cls_VehicleIllegalDetDetails, mid_VehicleIllegalDetDetails, result[i].info[j].vehicle_illegal_det_res.copilot.phone.status, result[i].info[j].vehicle_illegal_det_res.copilot.phone.confidence); - jobject vehicleIllegalDetDetails_copilot_person = env->NewObject(cls_VehicleIllegalDetDetails, mid_VehicleIllegalDetDetails, result[i].info[j].vehicle_illegal_det_res.copilot.person.status, result[i].info[j].vehicle_illegal_det_res.copilot.person.confidence); - - jobject vehicleIllegalDetInfo_driver = env->NewObject(cls_VehicleIllegalDetInfo, mid_VehicleIllegalDetInfo, vehicleIllegalDetDetails_driver_belt, vehicleIllegalDetDetails_driver_smoke, vehicleIllegalDetDetails_driver_phone, vehicleIllegalDetDetails_driver_call, vehicleIllegalDetDetails_driver_person); + jobject vehicleIllegalDetDetails_driver_belt = env->NewObject(cls_VehicleIllegalDetDetails, mid_VehicleIllegalDetDetails, vehicle_info.vehicle_illegal_det_res.driver.belt.status, vehicle_info.vehicle_illegal_det_res.driver.belt.confidence); + jobject vehicleIllegalDetDetails_driver_smoke = env->NewObject(cls_VehicleIllegalDetDetails, mid_VehicleIllegalDetDetails, vehicle_info.vehicle_illegal_det_res.driver.smoke.status, vehicle_info.vehicle_illegal_det_res.driver.smoke.confidence); + jobject vehicleIllegalDetDetails_driver_call = env->NewObject(cls_VehicleIllegalDetDetails, mid_VehicleIllegalDetDetails, vehicle_info.vehicle_illegal_det_res.driver.call.status, vehicle_info.vehicle_illegal_det_res.driver.call.confidence); + jobject vehicleIllegalDetDetails_driver_phone = env->NewObject(cls_VehicleIllegalDetDetails, mid_VehicleIllegalDetDetails, vehicle_info.vehicle_illegal_det_res.driver.phone.status, vehicle_info.vehicle_illegal_det_res.driver.phone.confidence); + jobject vehicleIllegalDetDetails_driver_person = env->NewObject(cls_VehicleIllegalDetDetails, mid_VehicleIllegalDetDetails, vehicle_info.vehicle_illegal_det_res.driver.person.status, vehicle_info.vehicle_illegal_det_res.driver.person.confidence); + jobject vehicleIllegalDetDetails_copilot_belt = env->NewObject(cls_VehicleIllegalDetDetails, mid_VehicleIllegalDetDetails, vehicle_info.vehicle_illegal_det_res.copilot.belt.status, vehicle_info.vehicle_illegal_det_res.copilot.belt.confidence); + jobject vehicleIllegalDetDetails_copilot_smoke = env->NewObject(cls_VehicleIllegalDetDetails, mid_VehicleIllegalDetDetails, vehicle_info.vehicle_illegal_det_res.copilot.smoke.status, vehicle_info.vehicle_illegal_det_res.copilot.smoke.confidence); + jobject vehicleIllegalDetDetails_copilot_call = env->NewObject(cls_VehicleIllegalDetDetails, mid_VehicleIllegalDetDetails, vehicle_info.vehicle_illegal_det_res.copilot.call.status, vehicle_info.vehicle_illegal_det_res.copilot.call.confidence); + jobject vehicleIllegalDetDetails_copilot_phone = env->NewObject(cls_VehicleIllegalDetDetails, mid_VehicleIllegalDetDetails, vehicle_info.vehicle_illegal_det_res.copilot.phone.status, vehicle_info.vehicle_illegal_det_res.copilot.phone.confidence); + jobject vehicleIllegalDetDetails_copilot_person = env->NewObject(cls_VehicleIllegalDetDetails, mid_VehicleIllegalDetDetails, vehicle_info.vehicle_illegal_det_res.copilot.person.status, vehicle_info.vehicle_illegal_det_res.copilot.person.confidence); + + jobject vehicleIllegalDetInfo_driver = env->NewObject(cls_VehicleIllegalDetInfo, mid_VehicleIllegalDetInfo, vehicleIllegalDetDetails_driver_belt, vehicleIllegalDetDetails_driver_smoke, vehicleIllegalDetDetails_driver_phone, vehicleIllegalDetDetails_driver_call, vehicleIllegalDetDetails_driver_person); jobject vehicleIllegalDetInfo_copilot = env->NewObject(cls_VehicleIllegalDetInfo, mid_VehicleIllegalDetInfo, vehicleIllegalDetDetails_copilot_belt, vehicleIllegalDetDetails_copilot_smoke, vehicleIllegalDetDetails_copilot_phone, vehicleIllegalDetDetails_copilot_call, vehicleIllegalDetDetails_copilot_person); vehicleIllegalDetResult = env->NewObject(cls_VehicleIllegalDetResult, mid_VehicleIllegalDetResult, vehicleIllegalDetInfo_driver, vehicleIllegalDetInfo_copilot); } - + //vehicleFeaRes jobject vehicleFeaResult = NULL; if (global_vehicle_feature_config == SY_CONFIG_OPEN) { jfloatArray feature = env->NewFloatArray(VA_FEATURESIZE); - env->SetFloatArrayRegion(feature, 0, VA_FEATURESIZE, result[i].info[j].vehicle_fea_res.feature); + env->SetFloatArrayRegion(feature, 0, VA_FEATURESIZE, vehicle_info.vehicle_fea_res.feature); vehicleFeaResult = env->NewObject(cls_VehicleFeaResult, mid_VehicleFeaResult, feature); } - + //MtaResultParam jobject mtaResult = NULL; if (global_vehicle_motor_tricycle_analysis_config == SY_CONFIG_OPEN) { - jobject mtaDetailsParam_motor_driver_helmeted = env->NewObject(cls_MtaDetailsParam, mid_MtaDetailsParam, result[i].info[j].mta_res.motor_driver_helmeted.status, result[i].info[j].mta_res.motor_driver_helmeted.confidence); - jobject mtaDetailsParam_motor_manned = env->NewObject(cls_MtaDetailsParam, mid_MtaDetailsParam, result[i].info[j].mta_res.motor_manned.status, result[i].info[j].mta_res.motor_manned.confidence); - jobject mtaDetailsParam_tricycle_manned = env->NewObject(cls_MtaDetailsParam, mid_MtaDetailsParam, result[i].info[j].mta_res.tricycle_manned.status, result[i].info[j].mta_res.tricycle_manned.confidence); + jobject mtaDetailsParam_motor_driver_helmeted = env->NewObject(cls_MtaDetailsParam, mid_MtaDetailsParam, vehicle_info.mta_res.motor_driver_helmeted.status, vehicle_info.mta_res.motor_driver_helmeted.confidence); + jobject mtaDetailsParam_motor_manned = env->NewObject(cls_MtaDetailsParam, mid_MtaDetailsParam, vehicle_info.mta_res.motor_manned.status, vehicle_info.mta_res.motor_manned.confidence); + jobject mtaDetailsParam_tricycle_manned = env->NewObject(cls_MtaDetailsParam, mid_MtaDetailsParam, vehicle_info.mta_res.tricycle_manned.status, vehicle_info.mta_res.tricycle_manned.confidence); jobject mtaDetailsParam_motor_driver_hs_rect = NULL; //if (global_vehicle_motor_hs_output_config == SY_CONFIG_OPEN) { - jobject mtaDetailsParam_motor_driver_hs_rect_syRect_rect = env->NewObject(cls_SyRect, mid_SyRect, result[i].info[j].mta_res.motor_driver_hs_rect.rect.left_, result[i].info[j].mta_res.motor_driver_hs_rect.rect.top_, result[i].info[j].mta_res.motor_driver_hs_rect.rect.width_, result[i].info[j].mta_res.motor_driver_hs_rect.rect.height_); - mtaDetailsParam_motor_driver_hs_rect = env->NewObject(cls_VehicleDetectResult, mid_VehicleDetectResult, mtaDetailsParam_motor_driver_hs_rect_syRect_rect, result[i].info[j].mta_res.motor_driver_hs_rect.score); + jobject mtaDetailsParam_motor_driver_hs_rect_syRect_rect = env->NewObject(cls_SyRect, mid_SyRect, vehicle_info.mta_res.motor_driver_hs_rect.rect.left_, vehicle_info.mta_res.motor_driver_hs_rect.rect.top_, vehicle_info.mta_res.motor_driver_hs_rect.rect.width_, vehicle_info.mta_res.motor_driver_hs_rect.rect.height_); + mtaDetailsParam_motor_driver_hs_rect = env->NewObject(cls_VehicleDetectResult, mid_VehicleDetectResult, mtaDetailsParam_motor_driver_hs_rect_syRect_rect, vehicle_info.mta_res.motor_driver_hs_rect.score); } mtaResult = env->NewObject(cls_MtaResult, mid_MtaResult, mtaDetailsParam_motor_driver_helmeted, mtaDetailsParam_motor_manned, mtaDetailsParam_tricycle_manned, mtaDetailsParam_motor_driver_hs_rect); } - - //LorryMannedResultParam + + //LorryMannedResultParam jobject MannedResult = NULL; if (global_vehicle_manned_config == SY_CONFIG_OPEN) { - int MannedResHsCount = result[i].info[j].manned_res.hs_count; + int MannedResHsCount = vehicle_info.manned_res.hs_count; jobjectArray hsDetectResultArray = env->NewObjectArray(MannedResHsCount, cls_VehicleDetectResult, NULL); - for (size_t m = 0; m < MannedResHsCount; m++) + for (size_t m = 0; m < MannedResHsCount; m++) { jobject Manned_hsDetect_syRect = env->NewObject(cls_SyRect, mid_SyRect, - result[i].info[j].manned_res.hs_rect[m].rect.left_, - result[i].info[j].manned_res.hs_rect[m].rect.top_, - result[i].info[j].manned_res.hs_rect[m].rect.width_, - result[i].info[j].manned_res.hs_rect[m].rect.height_); + vehicle_info.manned_res.hs_rect[m].rect.left_, + vehicle_info.manned_res.hs_rect[m].rect.top_, + vehicle_info.manned_res.hs_rect[m].rect.width_, + vehicle_info.manned_res.hs_rect[m].rect.height_); - jobject Manned_hsDetect = env->NewObject(cls_VehicleDetectResult, mid_VehicleDetectResult, Manned_hsDetect_syRect, result[i].info[j].manned_res.hs_rect[m].score); + jobject Manned_hsDetect = env->NewObject(cls_VehicleDetectResult, mid_VehicleDetectResult, Manned_hsDetect_syRect, vehicle_info.manned_res.hs_rect[m].score); env->SetObjectArrayElement(hsDetectResultArray, m, Manned_hsDetect); } - MannedResult = env->NewObject(cls_MannedResultParam, mid_MannedResult, - hsDetectResultArray, - MannedResHsCount); + MannedResult = env->NewObject(cls_MannedResultParam, mid_MannedResult, + hsDetectResultArray, + MannedResHsCount); } - jint type = result[i].info[j].type; - jobject vehicleInfo = env->NewObject(cls_VehicleInfo, mid_VehicleInfo, vehicleDetectResult, vehicleWinDetectResult, vehicleBodyDetectResult, vehicleColorResult, vehicleRecgResult, vplateResult, vehiclePendantDetResult, vehicleIllegalDetResult, vehicleFeaResult,mtaResult, MannedResult, type ); + jint type = vehicle_info.type; + jobject vehicleInfo = env->NewObject(cls_VehicleInfo, mid_VehicleInfo, vehicleDetectResult, vehicleWinDetectResult, vehicleBodyDetectResult, vehicleColorResult, vehicleRecgResult, vplateResult, vehiclePendantDetResult, vehicleIllegalDetResult, vehicleFeaResult,mtaResult, MannedResult, type ); - env->SetObjectArrayElement(vehicleInfoArray, j, vehicleInfo); + env->SetObjectArrayElement(vehicleInfoArray, j, vehicleInfo); } - jobject vehicleAnalysisResult = env->NewObject(cls_vehicleAnalysisResult, mid_vehicleAnalysisResult, vehicleInfoArray, result[i].count); + jobject vehicleAnalysisResult = env->NewObject(cls_vehicleAnalysisResult, mid_vehicleAnalysisResult, vehicleInfoArray, vec_result[i].info.size()); env->SetObjectArrayElement(vehicleAnalysisResultParams, i, vehicleAnalysisResult); } } - for (int i = 0; i < batchSize; i++) - { - for (int j = 0; j < 100; j++) - { - delete[] result[i].info[j].vehicle_pendant_det_res.vpd_res; - } - delete[] result[i].info; - } - delete[] result; - ACL_CALL(aclrtSetCurrentContext(ctx), ACL_ERROR_NONE, FAILED); delete dvpp; dvpp = nullptr; @@ -609,7 +560,7 @@ JNIEXPORT void JNICALL Java_com_objecteye_nativeinterface_vehicle_VehicleNativeI void *vaHandle = (void *)handle; if (vaHandle != NULL) { - va_release(&vaHandle); + village_pic_release(&vaHandle); } } diff --git a/src/PicAnalysis.cpp b/src/PicAnalysis.cpp index 59430c3..f7f80bb 100644 --- a/src/PicAnalysis.cpp +++ b/src/PicAnalysis.cpp @@ -76,12 +76,14 @@ int PicAnalysis::init(VillageParam param) { return 0; } -va_result* PicAnalysis::analysis_file(vector vec_file_path){ +vector PicAnalysis::analysis_file(vector vec_file_path){ + + vector result; int ret = aclrtSetCurrentContext(m_ctx); if (SY_SUCCESS != ret) { printf("aclrtSetCurrentContext failed!"); - return nullptr; + return result; } const int batch_size = vec_file_path.size(); @@ -97,13 +99,13 @@ va_result* PicAnalysis::analysis_file(vector vec_file_path){ ret = Utils::ReadImageFile(src, file_path); //将二进制图像读入内存,并读取宽高信息 if(ret != SY_SUCCESS){ LOG_ERROR("ReadImageFile failed!"); - return nullptr; + return result; } ret = m_dvpp->CvtJpegToYuv420sp(dvpp_data[i], src); //解码 if(ret != SY_SUCCESS){ LOG_ERROR("CvtJpegToYuv420sp failed!"); - return nullptr; + return result; } sy_img img; @@ -117,31 +119,91 @@ va_result* PicAnalysis::analysis_file(vector vec_file_path){ return analysis_img(vec_img); } -va_result* PicAnalysis::analysis_img(vector vec_img){ +vector PicAnalysis::va_result2AnalysisResult(va_result* result, int batchsize) { + + vector vec_result; + + for (int b = 0; b < batchsize; b++) + { + vector vec_info; + for(int c=0;c PicAnalysis::analysis_img(vector vec_img){ + + vector vec_result; const int batch_size = vec_img.size(); int ret = aclrtSetCurrentContext(m_ctx); if (SY_SUCCESS != ret) { printf("aclrtSetCurrentContext failed!"); - return nullptr; + return vec_result; } va_result* result = m_vehicle_analysis.detect(vec_img); + if (result) { + + vec_result = va_result2AnalysisResult(result, batch_size); + m_vehicle_analysis.release_result(result, vec_img.size()); + } + m_road_seg_algorithm.detect(vec_img); - for (int b = 0; b < batch_size; b++) + for (int b = 0; b < vec_result.size(); b++) { + vector& vec_info = vec_result[b].info; + sy_img img = vec_img[b]; ImageData src; src.width = img.w_; src.height = img.h_; src.data_naked = img.data_; - for(int c=0;c vec_img){ vector vec_human_img; vec_human_img.push_back(img); - human_analysis(vec_human_img); + vector vec_body_color = m_human_algorithm.detect(vec_human_img); + + result_info.human_upper_color = vec_body_color[0].upper_body_color; + result_info.human_lower_color = vec_body_color[0].lower_body_color; delete human_data; human_data = nullptr; @@ -165,25 +230,28 @@ va_result* PicAnalysis::analysis_img(vector vec_img){ // 车尾,判断是否 货车尾部货厢载人 if(result_info.vpt_type == 6 || result_info.vpt_type == 7){ if(result_info.manned_res.hs_count > 0){ - // 货车载人 + result_info.manned = 1; } } } else { if(result_info.vpt_type == 1 || result_info.vpt_type == 2 || result_info.vpt_type == 3){ if(result_info.manned_res.hs_count >= 3){ // 摩托车、三轮车载人 + result_info.manned = 1; } } } // 司乘 - int vpd_num = result_info.vehicle_pendant_det_res.count; + auto& pendant_res = result_info.vehicle_pendant_det_res; + int vpd_num = pendant_res.size(); vector vec_human_img; + vector vec_data; for(int p=0; p vec_img){ img.data_ = human_data->data_naked; vec_human_img.push_back(img); + + vec_data.push_back(human_data); } } - m_clothes_algorithm.detect(vec_human_img); + vector vec_color = m_clothes_algorithm.detect(vec_human_img); - for(int p=0; p vec_img){ { result_info.rainshed = vec_rainshed_result[0]; } - vector vec_phone_result = m_motor_phone_algorithm.detect(vec_motor_img); if (vec_phone_result.size() > 0) @@ -239,7 +312,6 @@ va_result* PicAnalysis::analysis_img(vector vec_img){ delete motor_data; motor_data = nullptr; } - } } @@ -250,13 +322,9 @@ va_result* PicAnalysis::analysis_img(vector vec_img){ // head_tail_result.clear(); // } - // if (reult) { - // m_vehicle_analysis.release_result(reult, vec_img.size()); - // } - LOG_INFO("analysis_sync finished!"); - return result; + return vec_result; } int PicAnalysis::release() { diff --git a/src/PicAnalysis.h b/src/PicAnalysis.h index 2b346cd..c355c73 100644 --- a/src/PicAnalysis.h +++ b/src/PicAnalysis.h @@ -24,9 +24,9 @@ public: int init(VillageParam param); // todo 接口定义是二进制流的,这个地方有待修改 - va_result* analysis_file(vector file_path); + vector analysis_file(vector file_path); - va_result* analysis_img(vector vec_img); + vector analysis_img(vector vec_img); private: @@ -36,6 +36,8 @@ private: int check_motor_retrograde_motion(vector vec_img); + vector va_result2AnalysisResult(va_result* result, int batchsize); + private: aclrtContext m_ctx{nullptr}; aclrtStream stream{nullptr}; diff --git a/src/ai_engine_module/VidClothes.cpp b/src/ai_engine_module/VidClothes.cpp index bfacf93..574eddf 100644 --- a/src/ai_engine_module/VidClothes.cpp +++ b/src/ai_engine_module/VidClothes.cpp @@ -28,9 +28,9 @@ int VidClothes::init(int devId){ return SY_SUCCESS; } -int VidClothes::detect(vector vec_img){ +vector VidClothes::detect(vector vec_img){ - ACL_CALL(aclrtSetCurrentContext(ctx), SY_SUCCESS, SY_FAILED); + vector vec_color; const int batchsize = vec_img.size(); vidclothes_result * results = new vidclothes_result[batchsize]; @@ -39,6 +39,12 @@ int VidClothes::detect(vector vec_img){ do { + ret = aclrtSetCurrentContext(ctx); + if (SY_SUCCESS != ret) { + printf("aclrtSetCurrentContext failed!"); + break; + } + ret = vidclothes_batch(m_handle, vec_img.data(), batchsize, results); if (SY_SUCCESS != ret) { printf("vidclothesClassification process failed!"); @@ -46,7 +52,8 @@ int VidClothes::detect(vector vec_img){ } for(int batchIdx = 0;batchIdx vec_img){ delete [] results; } - return ret; + return vec_color; } int VidClothes::release() { diff --git a/src/ai_engine_module/VidClothes.h b/src/ai_engine_module/VidClothes.h index 641d125..5a4f1de 100644 --- a/src/ai_engine_module/VidClothes.h +++ b/src/ai_engine_module/VidClothes.h @@ -9,7 +9,7 @@ public: int init(int devId); - int detect(vector vec_img); + vector detect(vector vec_img); private: int release(); diff --git a/src/ai_engine_module/include.h b/src/ai_engine_module/include.h index 3ed0b74..0f10e1f 100644 --- a/src/ai_engine_module/include.h +++ b/src/ai_engine_module/include.h @@ -20,6 +20,7 @@ #include #include +#include using namespace std; using namespace cv; diff --git a/src/village_inc.h b/src/village_inc.h index 1b09e5d..80178e3 100644 --- a/src/village_inc.h +++ b/src/village_inc.h @@ -2,6 +2,8 @@ #define __VILLAGE_INC_H__ #include +#include +#include "vehicle_analysis.h" struct VillageParam { int dev_id; @@ -9,5 +11,42 @@ struct VillageParam { std::string model_path; }; +typedef struct pendant_info +{ + sy_rect rect; + int index; //���� 0-driver 1-face 2-belt 3-sunshield 4-tag 5-decoration 6-napkinbox 7-zhuanjt 8-callPhone 9-sunRoof 10-holder 11-smoke + float confidence; + int driver_copilot_info; + int iColor; //13类:"棕", "橙", "灰", "白", "粉", "紫", "红", "绿", "蓝", "银", "青", "黄", "黑" +} pendant_info; + +typedef struct VehicleInfo { + vd_result vehicle_detect_res; + vd_result vehicle_win_detect_res; + vd_result vehicle_body_detect_res; + vc_result vehicle_color_res; + vr_result vehicle_recg_res; + vplate_results vehicle_plate_det_recg_res; + std::vector vehicle_pendant_det_res; + vid_result vehicle_illegal_det_res; + vf_result vehicle_fea_res; + + mta_result mta_res; + + manned_result manned_res; + + int type; + int vpt_type; + int rainshed; //是否安装雨棚, 0 有雨棚 1 无雨棚 + int manned; + + int human_upper_color; + int human_lower_color; + +} VehicleInfo; + +typedef struct AnalysisResult { + std::vector info; +} AnalysisResult; #endif // __VILLAGE_INC_H__ \ No newline at end of file diff --git a/src/village_pic_interface.cpp b/src/village_pic_interface.cpp index 7865b17..a608d1b 100644 --- a/src/village_pic_interface.cpp +++ b/src/village_pic_interface.cpp @@ -1,8 +1,6 @@ #include "village_pic_interface.h" #include "PicAnalysis.h" -#include - int village_pic_init(void **handle, VillageParam param) { @@ -11,7 +9,7 @@ int village_pic_init(void **handle, VillageParam param) return tools->init(param); } -va_result* village_pic_analysis(void *handle, sy_img* img_array, int batch_size) +std::vector village_pic_analysis(void *handle, sy_img* img_array, int batch_size) { std::vector vec_img; for (size_t i = 0; i < batch_size; i++) diff --git a/src/village_pic_interface.h b/src/village_pic_interface.h index 1cd3943..317984c 100644 --- a/src/village_pic_interface.h +++ b/src/village_pic_interface.h @@ -10,14 +10,14 @@ #define VILLAGE_PIC_API __attribute__ ((visibility ("default"))) #endif -#include "vehicle_analysis.h" #include "village_inc.h" +#include extern "C" { VILLAGE_PIC_API int village_pic_init(void **handle, VillageParam param); - VILLAGE_PIC_API va_result* village_pic_analysis(void *handle, sy_img* imgs, int batch_size); + VILLAGE_PIC_API std::vector village_pic_analysis(void *handle, sy_img* imgs, int batch_size); VILLAGE_PIC_API int village_pic_release(void **handle);