Commit 427201b2e4de744f76c6078dfe86dca58fa63041
1 parent
6c52ee6c
完善结果返回
Showing
9 changed files
with
232 additions
and
166 deletions
jni/VehicleNativeInterface.cpp
@@ -290,22 +290,9 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_vehicle_VehicleNativeI | @@ -290,22 +290,9 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_vehicle_VehicleNativeI | ||
290 | t2 = msecond(); | 290 | t2 = msecond(); |
291 | //printf("va jni info:decode time: %.2f\n", (t2 - t1)); | 291 | //printf("va jni info:decode time: %.2f\n", (t2 - t1)); |
292 | 292 | ||
293 | - | ||
294 | - //��ʼ������ | ||
295 | - | ||
296 | - // va_result *result = new va_result[batchSize]; | ||
297 | - // for (int i = 0; i < batchSize; i++) | ||
298 | - // { | ||
299 | - // result[i].info = new vehicle_info[100]; | ||
300 | - // for (int j = 0; j < 100; j++) | ||
301 | - // { | ||
302 | - // result[i].info[j].vehicle_pendant_det_res.vpd_res = new v_pendant_d_info[300]; | ||
303 | - // //result[i].info[j].vehicle_recg_res.vr_info=new vr_result[3];//TOP3 | ||
304 | - // } | ||
305 | - // } | ||
306 | - | ||
307 | - va_result* result = village_pic_analysis(vaHandle, batch_img, batchSize); | ||
308 | - if (result == nullptr) | 293 | + |
294 | + std::vector<AnalysisResult> vec_result = village_pic_analysis(vaHandle, batch_img, batchSize); | ||
295 | + if (vec_result.size() <= 0) | ||
309 | { | 296 | { |
310 | printf("jni info:village_pic_analysis failed."); | 297 | printf("jni info:village_pic_analysis failed."); |
311 | return -1; | 298 | return -1; |
@@ -320,12 +307,12 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_vehicle_VehicleNativeI | @@ -320,12 +307,12 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_vehicle_VehicleNativeI | ||
320 | { | 307 | { |
321 | 308 | ||
322 | //printf("VAJNI_TEST begin reult: %d, count: %d\n", b, result[b].count); | 309 | //printf("VAJNI_TEST begin reult: %d, count: %d\n", b, result[b].count); |
323 | - for (int c = 0; c < result[b].count; c++) | 310 | + for (int c = 0; c < vec_result[b].info.size(); c++) |
324 | { | 311 | { |
325 | //std::cout << "obj_quality_idx=" << result[b].info[c].obj_quality_idx << std::endl; //聚档数据类型�?-无效数据�?-低质数据�?-优质数据 | 312 | //std::cout << "obj_quality_idx=" << result[b].info[c].obj_quality_idx << std::endl; //聚档数据类型�?-无效数据�?-低质数据�?-优质数据 |
326 | 313 | ||
327 | std::string str_vehicle_type; | 314 | std::string str_vehicle_type; |
328 | - int vehicle_type = result[b].info[c].type; | 315 | + int vehicle_type = vec_result[b].info[c].type; |
329 | //std::cout << "vehicle_type=" << vehicle_type << std::endl; | 316 | //std::cout << "vehicle_type=" << vehicle_type << std::endl; |
330 | if (vehicle_type == 0)str_vehicle_type = "head"; | 317 | if (vehicle_type == 0)str_vehicle_type = "head"; |
331 | else if (vehicle_type == 1)str_vehicle_type = "rear"; | 318 | else if (vehicle_type == 1)str_vehicle_type = "rear"; |
@@ -404,61 +391,37 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_vehicle_VehicleNativeI | @@ -404,61 +391,37 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_vehicle_VehicleNativeI | ||
404 | 391 | ||
405 | for (size_t i = 0; i < batchSize; i++) | 392 | for (size_t i = 0; i < batchSize; i++) |
406 | { | 393 | { |
407 | - jobjectArray vehicleInfoArray = env->NewObjectArray(result[i].count, cls_VehicleInfo, NULL); | 394 | + jobjectArray vehicleInfoArray = env->NewObjectArray(vec_result[i].info.size(), cls_VehicleInfo, NULL); |
408 | 395 | ||
409 | - for (int j = 0; j < result[i].count; j++) | 396 | + for (int j = 0; j < vec_result[i].info.size(); j++) |
410 | { //vehicleDetectRes | 397 | { //vehicleDetectRes |
411 | - 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_); | ||
412 | - jobject vehicleDetectResult = env->NewObject(cls_VehicleDetectResult, mid_VehicleDetectResult, vehicle_detect_res_syRect_rect, result[i].info[j].vehicle_detect_res.score); | 398 | + auto vehicle_info = vec_result[i].info[j]; |
399 | + 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_); | ||
400 | + jobject vehicleDetectResult = env->NewObject(cls_VehicleDetectResult, mid_VehicleDetectResult, vehicle_detect_res_syRect_rect, vehicle_info.vehicle_detect_res.score); | ||
413 | //vehicleWinDetectRes | 401 | //vehicleWinDetectRes |
414 | - 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_); | ||
415 | - jobject vehicleWinDetectResult = env->NewObject(cls_VehicleDetectResult, mid_VehicleDetectResult, vehicle_win_detect_res_syRect_rect, result[i].info[j].vehicle_win_detect_res.score); | 402 | + 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_); |
403 | + jobject vehicleWinDetectResult = env->NewObject(cls_VehicleDetectResult, mid_VehicleDetectResult, vehicle_win_detect_res_syRect_rect, vehicle_info.vehicle_win_detect_res.score); | ||
416 | //vehicleBodyDetectRes | 404 | //vehicleBodyDetectRes |
417 | - 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_); | ||
418 | - jobject vehicleBodyDetectResult = env->NewObject(cls_VehicleDetectResult, mid_VehicleDetectResult, vehicle_body_detect_res_syRect_rect, result[i].info[j].vehicle_body_detect_res.score); | 405 | + 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_); |
406 | + jobject vehicleBodyDetectResult = env->NewObject(cls_VehicleDetectResult, mid_VehicleDetectResult, vehicle_body_detect_res_syRect_rect, vehicle_info.vehicle_body_detect_res.score); | ||
419 | //vehicleColorRes | 407 | //vehicleColorRes |
420 | jobject vehicleColorResult = NULL; | 408 | jobject vehicleColorResult = NULL; |
421 | if (global_vehicle_color_config == SY_CONFIG_OPEN) | 409 | if (global_vehicle_color_config == SY_CONFIG_OPEN) |
422 | { | 410 | { |
423 | - //printf("jni info vc:%f %d\n",result[i].info[j].vehicle_color_res.score, result[i].info[j].vehicle_color_res.index); | ||
424 | - vehicleColorResult = env->NewObject(cls_VehicleColorResult, mid_VehicleColorResult, result[i].info[j].vehicle_color_res.score, result[i].info[j].vehicle_color_res.index); | 411 | + vehicleColorResult = env->NewObject(cls_VehicleColorResult, mid_VehicleColorResult, vehicle_info.vehicle_color_res.score, vehicle_info.vehicle_color_res.index); |
425 | } | 412 | } |
426 | - | ||
427 | - //vehicleRecgRes //0618 atlas�Ļ�top1�Ľӿ� | 413 | + |
414 | + //vehicleRecgRes //0618 atlas�Ļ�top1�Ľӿ� | ||
428 | jobject vehicleRecgResult = NULL; | 415 | jobject vehicleRecgResult = NULL; |
429 | if (global_vehicle_recg_config == SY_CONFIG_OPEN) | 416 | if (global_vehicle_recg_config == SY_CONFIG_OPEN) |
430 | { | 417 | { |
431 | - jstring vehicleBrand = env->NewStringUTF(result[i].info[j].vehicle_recg_res.vehicle_brand); | ||
432 | - jstring vehicleSubbrand = env->NewStringUTF(result[i].info[j].vehicle_recg_res.vehicle_subbrand); | ||
433 | - jstring vehicleIssueYear = env->NewStringUTF(result[i].info[j].vehicle_recg_res.vehicle_issue_year); | ||
434 | - jstring vehicleType = env->NewStringUTF(result[i].info[j].vehicle_recg_res.vehicle_type); | ||
435 | - //cout<<"vehicle_type|"<<result[i].info[j].vehicle_recg_res.vehicle_type<<endl; | ||
436 | - jstring freightTon = env->NewStringUTF(result[i].info[j].vehicle_recg_res.freight_ton); | ||
437 | - vehicleRecgResult = env->NewObject(cls_VehicleRecgResult, mid_VehicleRecgResult, vehicleBrand, vehicleSubbrand, vehicleIssueYear, vehicleType, freightTon, result[i].info[j].vehicle_recg_res.name_score); | ||
438 | - | ||
439 | - //////// | ||
440 | - if(0) | ||
441 | - { | ||
442 | - char *vehicle_brand=result[i].info[i].vehicle_recg_res.vehicle_brand;//����Ʒ�� | ||
443 | - char* vehicle_subbrand=result[i].info[i].vehicle_recg_res.vehicle_subbrand; //������Ʒ�� | ||
444 | - char* vehicle_issue_year=result[i].info[i].vehicle_recg_res.vehicle_issue_year; //������� | ||
445 | - char* vehicle_type_=result[i].info[i].vehicle_recg_res.vehicle_type; //�������� | ||
446 | - char* freight_ton=result[i].info[i].vehicle_recg_res.freight_ton; //�����ּ� | ||
447 | - float name_score=result[i].info[i].vehicle_recg_res.name_score; //ʶ�����Ŷ� | ||
448 | - | ||
449 | - float name_score_thre = 0; | ||
450 | - if(name_score > name_score_thre) | ||
451 | - { | ||
452 | - printf("name_score:%f\n", name_score); | ||
453 | - printf("vehicle_brand:%s\n", vehicle_brand); | ||
454 | - printf("vehicle_subbrand:%s\n", vehicle_subbrand); | ||
455 | - printf("vehicle_issue_year:%s\n", vehicle_issue_year); | ||
456 | - printf("vehicle_type_:%s\n", vehicle_type_); | ||
457 | - printf("freight_ton:%s\n", freight_ton); | ||
458 | - } | ||
459 | - } | ||
460 | - | ||
461 | - } | 418 | + jstring vehicleBrand = env->NewStringUTF(vehicle_info.vehicle_recg_res.vehicle_brand); |
419 | + jstring vehicleSubbrand = env->NewStringUTF(vehicle_info.vehicle_recg_res.vehicle_subbrand); | ||
420 | + jstring vehicleIssueYear = env->NewStringUTF(vehicle_info.vehicle_recg_res.vehicle_issue_year); | ||
421 | + jstring vehicleType = env->NewStringUTF(vehicle_info.vehicle_recg_res.vehicle_type); | ||
422 | + jstring freightTon = env->NewStringUTF(vehicle_info.vehicle_recg_res.freight_ton); | ||
423 | + vehicleRecgResult = env->NewObject(cls_VehicleRecgResult, mid_VehicleRecgResult, vehicleBrand, vehicleSubbrand, vehicleIssueYear, vehicleType, freightTon, vehicle_info.vehicle_recg_res.name_score); | ||
424 | + } | ||
462 | 425 | ||
463 | //vehiclePlateDetRecgRes | 426 | //vehiclePlateDetRecgRes |
464 | jobject vplateResult = NULL; | 427 | jobject vplateResult = NULL; |
@@ -466,130 +429,118 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_vehicle_VehicleNativeI | @@ -466,130 +429,118 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_vehicle_VehicleNativeI | ||
466 | jobjectArray vplateNumArray = NULL; | 429 | jobjectArray vplateNumArray = NULL; |
467 | if (global_vehicle_plate_det_recg_config == SY_CONFIG_OPEN) | 430 | if (global_vehicle_plate_det_recg_config == SY_CONFIG_OPEN) |
468 | { | 431 | { |
469 | - 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_); | 432 | + 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_); |
470 | vplateNumArray = env->NewObjectArray(PLATENUM, cls_VplateNum, NULL); | 433 | vplateNumArray = env->NewObjectArray(PLATENUM, cls_VplateNum, NULL); |
471 | for (size_t k = 0; k < PLATENUM; k++) | 434 | for (size_t k = 0; k < PLATENUM; k++) |
472 | { | 435 | { |
473 | - jstring character = env->NewStringUTF(result[i].info[j].vehicle_plate_det_recg_res.recg[k].character); | ||
474 | - jobject vplateNum = env->NewObject(cls_VplateNum, mid_VplateNum, character, result[i].info[j].vehicle_plate_det_recg_res.recg[k].maxprob); | 436 | + jstring character = env->NewStringUTF(vehicle_info.vehicle_plate_det_recg_res.recg[k].character); |
437 | + jobject vplateNum = env->NewObject(cls_VplateNum, mid_VplateNum, character, vehicle_info.vehicle_plate_det_recg_res.recg[k].maxprob); | ||
475 | env->SetObjectArrayElement(vplateNumArray, k, vplateNum); | 438 | env->SetObjectArrayElement(vplateNumArray, k, vplateNum); |
476 | } | 439 | } |
477 | } | 440 | } |
478 | - | ||
479 | - 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); | ||
480 | - | ||
481 | - //vehiclePendantDetRes | 441 | + |
442 | + 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); | ||
443 | + | ||
444 | + //vehiclePendantDetRes | ||
482 | jobject vehiclePendantDetResult = NULL; | 445 | jobject vehiclePendantDetResult = NULL; |
483 | if (global_vehicle_pendant_det_config == SY_CONFIG_OPEN) | 446 | if (global_vehicle_pendant_det_config == SY_CONFIG_OPEN) |
484 | { | 447 | { |
485 | - jobjectArray vehiclePendantDetInfoArray = env->NewObjectArray(result[i].info[j].vehicle_pendant_det_res.count, cls_VehiclePendantDetInfo, NULL); | ||
486 | - for (size_t m = 0; m < result[i].info[j].vehicle_pendant_det_res.count; m++) | 448 | + jobjectArray vehiclePendantDetInfoArray = env->NewObjectArray(vehicle_info.vehicle_pendant_det_res.size(), cls_VehiclePendantDetInfo, NULL); |
449 | + for (size_t m = 0; m < vehicle_info.vehicle_pendant_det_res.size(); m++) | ||
487 | { | 450 | { |
488 | - jobject vehicle_pendant_det_res_vpd_res_syRect_rect = env->NewObject(cls_SyRect, mid_SyRect, | ||
489 | - result[i].info[j].vehicle_pendant_det_res.vpd_res[m].rect.left_, | ||
490 | - result[i].info[j].vehicle_pendant_det_res.vpd_res[m].rect.top_, | ||
491 | - result[i].info[j].vehicle_pendant_det_res.vpd_res[m].rect.width_, | ||
492 | - result[i].info[j].vehicle_pendant_det_res.vpd_res[m].rect.height_); | 451 | + auto one_pendant_res = vehicle_info.vehicle_pendant_det_res[m]; |
452 | + jobject vehicle_pendant_det_res_vpd_res_syRect_rect = env->NewObject(cls_SyRect, mid_SyRect, one_pendant_res.rect.left_, | ||
453 | + one_pendant_res.rect.top_, one_pendant_res.rect.width_, one_pendant_res.rect.height_); | ||
493 | 454 | ||
494 | - 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); | 455 | + 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); |
495 | 456 | ||
496 | - env->SetObjectArrayElement(vehiclePendantDetInfoArray, m, vehiclePendantDetInfo); | 457 | + env->SetObjectArrayElement(vehiclePendantDetInfoArray, m, vehiclePendantDetInfo); |
497 | } | 458 | } |
498 | - vehiclePendantDetResult = env->NewObject(cls_VehiclePendantDetResult, mid_VehiclePendantDetResult, vehiclePendantDetInfoArray, result[i].info[j].vehicle_pendant_det_res.count); | 459 | + vehiclePendantDetResult = env->NewObject(cls_VehiclePendantDetResult, mid_VehiclePendantDetResult, vehiclePendantDetInfoArray, vehicle_info.vehicle_pendant_det_res.size()); |
499 | } | 460 | } |
500 | - | 461 | + |
501 | //vehicleIllegalDetRes | 462 | //vehicleIllegalDetRes |
502 | jobject vehicleIllegalDetResult = NULL; | 463 | jobject vehicleIllegalDetResult = NULL; |
503 | if (global_vehicle_illegal_config == SY_CONFIG_OPEN) | 464 | if (global_vehicle_illegal_config == SY_CONFIG_OPEN) |
504 | { | 465 | { |
505 | - 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); | ||
506 | - 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); | ||
507 | - 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); | ||
508 | - 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); | ||
509 | - 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); | ||
510 | - 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); | ||
511 | - 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); | ||
512 | - 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); | ||
513 | - 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); | ||
514 | - 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); | ||
515 | - | ||
516 | - jobject vehicleIllegalDetInfo_driver = env->NewObject(cls_VehicleIllegalDetInfo, mid_VehicleIllegalDetInfo, vehicleIllegalDetDetails_driver_belt, vehicleIllegalDetDetails_driver_smoke, vehicleIllegalDetDetails_driver_phone, vehicleIllegalDetDetails_driver_call, vehicleIllegalDetDetails_driver_person); | 466 | + 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); |
467 | + 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); | ||
468 | + 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); | ||
469 | + 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); | ||
470 | + 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); | ||
471 | + 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); | ||
472 | + 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); | ||
473 | + 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); | ||
474 | + 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); | ||
475 | + 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); | ||
476 | + | ||
477 | + jobject vehicleIllegalDetInfo_driver = env->NewObject(cls_VehicleIllegalDetInfo, mid_VehicleIllegalDetInfo, vehicleIllegalDetDetails_driver_belt, vehicleIllegalDetDetails_driver_smoke, vehicleIllegalDetDetails_driver_phone, vehicleIllegalDetDetails_driver_call, vehicleIllegalDetDetails_driver_person); | ||
517 | jobject vehicleIllegalDetInfo_copilot = env->NewObject(cls_VehicleIllegalDetInfo, mid_VehicleIllegalDetInfo, vehicleIllegalDetDetails_copilot_belt, vehicleIllegalDetDetails_copilot_smoke, vehicleIllegalDetDetails_copilot_phone, vehicleIllegalDetDetails_copilot_call, vehicleIllegalDetDetails_copilot_person); | 478 | jobject vehicleIllegalDetInfo_copilot = env->NewObject(cls_VehicleIllegalDetInfo, mid_VehicleIllegalDetInfo, vehicleIllegalDetDetails_copilot_belt, vehicleIllegalDetDetails_copilot_smoke, vehicleIllegalDetDetails_copilot_phone, vehicleIllegalDetDetails_copilot_call, vehicleIllegalDetDetails_copilot_person); |
518 | vehicleIllegalDetResult = env->NewObject(cls_VehicleIllegalDetResult, mid_VehicleIllegalDetResult, vehicleIllegalDetInfo_driver, vehicleIllegalDetInfo_copilot); | 479 | vehicleIllegalDetResult = env->NewObject(cls_VehicleIllegalDetResult, mid_VehicleIllegalDetResult, vehicleIllegalDetInfo_driver, vehicleIllegalDetInfo_copilot); |
519 | } | 480 | } |
520 | - | 481 | + |
521 | //vehicleFeaRes | 482 | //vehicleFeaRes |
522 | jobject vehicleFeaResult = NULL; | 483 | jobject vehicleFeaResult = NULL; |
523 | if (global_vehicle_feature_config == SY_CONFIG_OPEN) | 484 | if (global_vehicle_feature_config == SY_CONFIG_OPEN) |
524 | { | 485 | { |
525 | jfloatArray feature = env->NewFloatArray(VA_FEATURESIZE); | 486 | jfloatArray feature = env->NewFloatArray(VA_FEATURESIZE); |
526 | - env->SetFloatArrayRegion(feature, 0, VA_FEATURESIZE, result[i].info[j].vehicle_fea_res.feature); | 487 | + env->SetFloatArrayRegion(feature, 0, VA_FEATURESIZE, vehicle_info.vehicle_fea_res.feature); |
527 | vehicleFeaResult = env->NewObject(cls_VehicleFeaResult, mid_VehicleFeaResult, feature); | 488 | vehicleFeaResult = env->NewObject(cls_VehicleFeaResult, mid_VehicleFeaResult, feature); |
528 | } | 489 | } |
529 | - | 490 | + |
530 | //MtaResultParam | 491 | //MtaResultParam |
531 | jobject mtaResult = NULL; | 492 | jobject mtaResult = NULL; |
532 | if (global_vehicle_motor_tricycle_analysis_config == SY_CONFIG_OPEN) | 493 | if (global_vehicle_motor_tricycle_analysis_config == SY_CONFIG_OPEN) |
533 | { | 494 | { |
534 | - 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); | ||
535 | - 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); | ||
536 | - 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); | 495 | + 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); |
496 | + jobject mtaDetailsParam_motor_manned = env->NewObject(cls_MtaDetailsParam, mid_MtaDetailsParam, vehicle_info.mta_res.motor_manned.status, vehicle_info.mta_res.motor_manned.confidence); | ||
497 | + jobject mtaDetailsParam_tricycle_manned = env->NewObject(cls_MtaDetailsParam, mid_MtaDetailsParam, vehicle_info.mta_res.tricycle_manned.status, vehicle_info.mta_res.tricycle_manned.confidence); | ||
537 | jobject mtaDetailsParam_motor_driver_hs_rect = NULL; | 498 | jobject mtaDetailsParam_motor_driver_hs_rect = NULL; |
538 | //if (global_vehicle_motor_hs_output_config == SY_CONFIG_OPEN) | 499 | //if (global_vehicle_motor_hs_output_config == SY_CONFIG_OPEN) |
539 | { | 500 | { |
540 | - 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_); | ||
541 | - 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); | 501 | + 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_); |
502 | + 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); | ||
542 | } | 503 | } |
543 | mtaResult = env->NewObject(cls_MtaResult, mid_MtaResult, mtaDetailsParam_motor_driver_helmeted, mtaDetailsParam_motor_manned, mtaDetailsParam_tricycle_manned, mtaDetailsParam_motor_driver_hs_rect); | 504 | mtaResult = env->NewObject(cls_MtaResult, mid_MtaResult, mtaDetailsParam_motor_driver_helmeted, mtaDetailsParam_motor_manned, mtaDetailsParam_tricycle_manned, mtaDetailsParam_motor_driver_hs_rect); |
544 | } | 505 | } |
545 | - | ||
546 | - //LorryMannedResultParam | 506 | + |
507 | + //LorryMannedResultParam | ||
547 | jobject MannedResult = NULL; | 508 | jobject MannedResult = NULL; |
548 | if (global_vehicle_manned_config == SY_CONFIG_OPEN) | 509 | if (global_vehicle_manned_config == SY_CONFIG_OPEN) |
549 | { | 510 | { |
550 | - int MannedResHsCount = result[i].info[j].manned_res.hs_count; | 511 | + int MannedResHsCount = vehicle_info.manned_res.hs_count; |
551 | 512 | ||
552 | jobjectArray hsDetectResultArray = env->NewObjectArray(MannedResHsCount, cls_VehicleDetectResult, NULL); | 513 | jobjectArray hsDetectResultArray = env->NewObjectArray(MannedResHsCount, cls_VehicleDetectResult, NULL); |
553 | - for (size_t m = 0; m < MannedResHsCount; m++) | 514 | + for (size_t m = 0; m < MannedResHsCount; m++) |
554 | { | 515 | { |
555 | jobject Manned_hsDetect_syRect = env->NewObject(cls_SyRect, mid_SyRect, | 516 | jobject Manned_hsDetect_syRect = env->NewObject(cls_SyRect, mid_SyRect, |
556 | - result[i].info[j].manned_res.hs_rect[m].rect.left_, | ||
557 | - result[i].info[j].manned_res.hs_rect[m].rect.top_, | ||
558 | - result[i].info[j].manned_res.hs_rect[m].rect.width_, | ||
559 | - result[i].info[j].manned_res.hs_rect[m].rect.height_); | 517 | + vehicle_info.manned_res.hs_rect[m].rect.left_, |
518 | + vehicle_info.manned_res.hs_rect[m].rect.top_, | ||
519 | + vehicle_info.manned_res.hs_rect[m].rect.width_, | ||
520 | + vehicle_info.manned_res.hs_rect[m].rect.height_); | ||
560 | 521 | ||
561 | - jobject Manned_hsDetect = env->NewObject(cls_VehicleDetectResult, mid_VehicleDetectResult, Manned_hsDetect_syRect, result[i].info[j].manned_res.hs_rect[m].score); | 522 | + jobject Manned_hsDetect = env->NewObject(cls_VehicleDetectResult, mid_VehicleDetectResult, Manned_hsDetect_syRect, vehicle_info.manned_res.hs_rect[m].score); |
562 | 523 | ||
563 | env->SetObjectArrayElement(hsDetectResultArray, m, Manned_hsDetect); | 524 | env->SetObjectArrayElement(hsDetectResultArray, m, Manned_hsDetect); |
564 | } | 525 | } |
565 | 526 | ||
566 | - MannedResult = env->NewObject(cls_MannedResultParam, mid_MannedResult, | ||
567 | - hsDetectResultArray, | ||
568 | - MannedResHsCount); | 527 | + MannedResult = env->NewObject(cls_MannedResultParam, mid_MannedResult, |
528 | + hsDetectResultArray, | ||
529 | + MannedResHsCount); | ||
569 | } | 530 | } |
570 | 531 | ||
571 | - jint type = result[i].info[j].type; | ||
572 | - jobject vehicleInfo = env->NewObject(cls_VehicleInfo, mid_VehicleInfo, vehicleDetectResult, vehicleWinDetectResult, vehicleBodyDetectResult, vehicleColorResult, vehicleRecgResult, vplateResult, vehiclePendantDetResult, vehicleIllegalDetResult, vehicleFeaResult,mtaResult, MannedResult, type ); | 532 | + jint type = vehicle_info.type; |
533 | + jobject vehicleInfo = env->NewObject(cls_VehicleInfo, mid_VehicleInfo, vehicleDetectResult, vehicleWinDetectResult, vehicleBodyDetectResult, vehicleColorResult, vehicleRecgResult, vplateResult, vehiclePendantDetResult, vehicleIllegalDetResult, vehicleFeaResult,mtaResult, MannedResult, type ); | ||
573 | 534 | ||
574 | - env->SetObjectArrayElement(vehicleInfoArray, j, vehicleInfo); | 535 | + env->SetObjectArrayElement(vehicleInfoArray, j, vehicleInfo); |
575 | } | 536 | } |
576 | 537 | ||
577 | - jobject vehicleAnalysisResult = env->NewObject(cls_vehicleAnalysisResult, mid_vehicleAnalysisResult, vehicleInfoArray, result[i].count); | 538 | + jobject vehicleAnalysisResult = env->NewObject(cls_vehicleAnalysisResult, mid_vehicleAnalysisResult, vehicleInfoArray, vec_result[i].info.size()); |
578 | env->SetObjectArrayElement(vehicleAnalysisResultParams, i, vehicleAnalysisResult); | 539 | env->SetObjectArrayElement(vehicleAnalysisResultParams, i, vehicleAnalysisResult); |
579 | } | 540 | } |
580 | 541 | ||
581 | } | 542 | } |
582 | 543 | ||
583 | - for (int i = 0; i < batchSize; i++) | ||
584 | - { | ||
585 | - for (int j = 0; j < 100; j++) | ||
586 | - { | ||
587 | - delete[] result[i].info[j].vehicle_pendant_det_res.vpd_res; | ||
588 | - } | ||
589 | - delete[] result[i].info; | ||
590 | - } | ||
591 | - delete[] result; | ||
592 | - | ||
593 | ACL_CALL(aclrtSetCurrentContext(ctx), ACL_ERROR_NONE, FAILED); | 544 | ACL_CALL(aclrtSetCurrentContext(ctx), ACL_ERROR_NONE, FAILED); |
594 | delete dvpp; | 545 | delete dvpp; |
595 | dvpp = nullptr; | 546 | dvpp = nullptr; |
@@ -609,7 +560,7 @@ JNIEXPORT void JNICALL Java_com_objecteye_nativeinterface_vehicle_VehicleNativeI | @@ -609,7 +560,7 @@ JNIEXPORT void JNICALL Java_com_objecteye_nativeinterface_vehicle_VehicleNativeI | ||
609 | void *vaHandle = (void *)handle; | 560 | void *vaHandle = (void *)handle; |
610 | if (vaHandle != NULL) | 561 | if (vaHandle != NULL) |
611 | { | 562 | { |
612 | - va_release(&vaHandle); | 563 | + village_pic_release(&vaHandle); |
613 | } | 564 | } |
614 | } | 565 | } |
615 | 566 |
src/PicAnalysis.cpp
@@ -76,12 +76,14 @@ int PicAnalysis::init(VillageParam param) { | @@ -76,12 +76,14 @@ int PicAnalysis::init(VillageParam param) { | ||
76 | return 0; | 76 | return 0; |
77 | } | 77 | } |
78 | 78 | ||
79 | -va_result* PicAnalysis::analysis_file(vector<string> vec_file_path){ | 79 | +vector<AnalysisResult> PicAnalysis::analysis_file(vector<string> vec_file_path){ |
80 | + | ||
81 | + vector<AnalysisResult> result; | ||
80 | 82 | ||
81 | int ret = aclrtSetCurrentContext(m_ctx); | 83 | int ret = aclrtSetCurrentContext(m_ctx); |
82 | if (SY_SUCCESS != ret) { | 84 | if (SY_SUCCESS != ret) { |
83 | printf("aclrtSetCurrentContext failed!"); | 85 | printf("aclrtSetCurrentContext failed!"); |
84 | - return nullptr; | 86 | + return result; |
85 | } | 87 | } |
86 | 88 | ||
87 | const int batch_size = vec_file_path.size(); | 89 | const int batch_size = vec_file_path.size(); |
@@ -97,13 +99,13 @@ va_result* PicAnalysis::analysis_file(vector<string> vec_file_path){ | @@ -97,13 +99,13 @@ va_result* PicAnalysis::analysis_file(vector<string> vec_file_path){ | ||
97 | ret = Utils::ReadImageFile(src, file_path); //将二进制图像读入内存,并读取宽高信息 | 99 | ret = Utils::ReadImageFile(src, file_path); //将二进制图像读入内存,并读取宽高信息 |
98 | if(ret != SY_SUCCESS){ | 100 | if(ret != SY_SUCCESS){ |
99 | LOG_ERROR("ReadImageFile failed!"); | 101 | LOG_ERROR("ReadImageFile failed!"); |
100 | - return nullptr; | 102 | + return result; |
101 | } | 103 | } |
102 | 104 | ||
103 | ret = m_dvpp->CvtJpegToYuv420sp(dvpp_data[i], src); //解码 | 105 | ret = m_dvpp->CvtJpegToYuv420sp(dvpp_data[i], src); //解码 |
104 | if(ret != SY_SUCCESS){ | 106 | if(ret != SY_SUCCESS){ |
105 | LOG_ERROR("CvtJpegToYuv420sp failed!"); | 107 | LOG_ERROR("CvtJpegToYuv420sp failed!"); |
106 | - return nullptr; | 108 | + return result; |
107 | } | 109 | } |
108 | 110 | ||
109 | sy_img img; | 111 | sy_img img; |
@@ -117,31 +119,91 @@ va_result* PicAnalysis::analysis_file(vector<string> vec_file_path){ | @@ -117,31 +119,91 @@ va_result* PicAnalysis::analysis_file(vector<string> vec_file_path){ | ||
117 | return analysis_img(vec_img); | 119 | return analysis_img(vec_img); |
118 | } | 120 | } |
119 | 121 | ||
120 | -va_result* PicAnalysis::analysis_img(vector<sy_img> vec_img){ | 122 | +vector<AnalysisResult> PicAnalysis::va_result2AnalysisResult(va_result* result, int batchsize) { |
123 | + | ||
124 | + vector<AnalysisResult> vec_result; | ||
125 | + | ||
126 | + for (int b = 0; b < batchsize; b++) | ||
127 | + { | ||
128 | + vector<VehicleInfo> vec_info; | ||
129 | + for(int c=0;c<result[b].count;c++) | ||
130 | + { | ||
131 | + vehicle_info result_info = result[b].info[c]; | ||
132 | + | ||
133 | + VehicleInfo info; | ||
134 | + info.vehicle_detect_res = result_info.vehicle_detect_res ; | ||
135 | + info.vehicle_win_detect_res = result_info.vehicle_win_detect_res ; | ||
136 | + info.vehicle_body_detect_res = result_info.vehicle_body_detect_res ; | ||
137 | + info.vehicle_color_res = result_info.vehicle_color_res ; | ||
138 | + info.vehicle_recg_res = result_info.vehicle_recg_res ; | ||
139 | + info.vehicle_plate_det_recg_res = result_info.vehicle_plate_det_recg_res; | ||
140 | + info.vehicle_illegal_det_res = result_info.vehicle_illegal_det_res ; | ||
141 | + info.vehicle_fea_res = result_info.vehicle_fea_res ; | ||
142 | + info.mta_res = result_info.mta_res ; | ||
143 | + info.manned_res = result_info.manned_res ; | ||
144 | + info.type = result_info.type ; | ||
145 | + info.vpt_type = result_info.vpt_type ; | ||
146 | + info.rainshed = result_info.rainshed ; | ||
147 | + | ||
148 | + auto pendant_result = result_info.vehicle_pendant_det_res; | ||
149 | + for (size_t j = 0; j < pendant_result.count; j++) | ||
150 | + { | ||
151 | + auto pendant_det_info = pendant_result.vpd_res[j]; | ||
152 | + | ||
153 | + pendant_info one_pendant_info; | ||
154 | + one_pendant_info.rect = pendant_det_info.rect; | ||
155 | + one_pendant_info.index = pendant_det_info.index; | ||
156 | + one_pendant_info.confidence = pendant_det_info.confidence; | ||
157 | + one_pendant_info.driver_copilot_info = pendant_det_info.driver_copilot_info; | ||
158 | + info.vehicle_pendant_det_res.push_back(one_pendant_info); | ||
159 | + } | ||
160 | + | ||
161 | + vec_info.push_back(info); | ||
162 | + } | ||
163 | + | ||
164 | + AnalysisResult one_result; | ||
165 | + one_result.info = vec_info; | ||
166 | + vec_result.push_back(one_result); | ||
167 | + } | ||
168 | + | ||
169 | + return vec_result; | ||
170 | +} | ||
171 | + | ||
172 | +vector<AnalysisResult> PicAnalysis::analysis_img(vector<sy_img> vec_img){ | ||
173 | + | ||
174 | + vector<AnalysisResult> vec_result; | ||
121 | 175 | ||
122 | const int batch_size = vec_img.size(); | 176 | const int batch_size = vec_img.size(); |
123 | 177 | ||
124 | int ret = aclrtSetCurrentContext(m_ctx); | 178 | int ret = aclrtSetCurrentContext(m_ctx); |
125 | if (SY_SUCCESS != ret) { | 179 | if (SY_SUCCESS != ret) { |
126 | printf("aclrtSetCurrentContext failed!"); | 180 | printf("aclrtSetCurrentContext failed!"); |
127 | - return nullptr; | 181 | + return vec_result; |
128 | } | 182 | } |
129 | 183 | ||
130 | va_result* result = m_vehicle_analysis.detect(vec_img); | 184 | va_result* result = m_vehicle_analysis.detect(vec_img); |
131 | 185 | ||
186 | + if (result) { | ||
187 | + | ||
188 | + vec_result = va_result2AnalysisResult(result, batch_size); | ||
189 | + m_vehicle_analysis.release_result(result, vec_img.size()); | ||
190 | + } | ||
191 | + | ||
132 | m_road_seg_algorithm.detect(vec_img); | 192 | m_road_seg_algorithm.detect(vec_img); |
133 | 193 | ||
134 | - for (int b = 0; b < batch_size; b++) | 194 | + for (int b = 0; b < vec_result.size(); b++) |
135 | { | 195 | { |
196 | + vector<VehicleInfo>& vec_info = vec_result[b].info; | ||
197 | + | ||
136 | sy_img img = vec_img[b]; | 198 | sy_img img = vec_img[b]; |
137 | ImageData src; | 199 | ImageData src; |
138 | src.width = img.w_; | 200 | src.width = img.w_; |
139 | src.height = img.h_; | 201 | src.height = img.h_; |
140 | src.data_naked = img.data_; | 202 | src.data_naked = img.data_; |
141 | - for(int c=0;c<result[b].count;c++) | 203 | + for(int c=0;c<vec_info.size();c++) |
142 | { | 204 | { |
143 | - vehicle_info& result_info = result[b].info[c]; | ||
144 | - int shot_type=result[b].info[c].type; | 205 | + VehicleInfo& result_info = vec_info[c]; |
206 | + int shot_type=result_info.type; | ||
145 | 207 | ||
146 | // 行人 | 208 | // 行人 |
147 | if (6 == shot_type) | 209 | if (6 == shot_type) |
@@ -157,7 +219,10 @@ va_result* PicAnalysis::analysis_img(vector<sy_img> vec_img){ | @@ -157,7 +219,10 @@ va_result* PicAnalysis::analysis_img(vector<sy_img> vec_img){ | ||
157 | vector<sy_img> vec_human_img; | 219 | vector<sy_img> vec_human_img; |
158 | vec_human_img.push_back(img); | 220 | vec_human_img.push_back(img); |
159 | 221 | ||
160 | - human_analysis(vec_human_img); | 222 | + vector<BodyColorInfo> vec_body_color = m_human_algorithm.detect(vec_human_img); |
223 | + | ||
224 | + result_info.human_upper_color = vec_body_color[0].upper_body_color; | ||
225 | + result_info.human_lower_color = vec_body_color[0].lower_body_color; | ||
161 | 226 | ||
162 | delete human_data; | 227 | delete human_data; |
163 | human_data = nullptr; | 228 | human_data = nullptr; |
@@ -165,25 +230,28 @@ va_result* PicAnalysis::analysis_img(vector<sy_img> vec_img){ | @@ -165,25 +230,28 @@ va_result* PicAnalysis::analysis_img(vector<sy_img> vec_img){ | ||
165 | // 车尾,判断是否 货车尾部货厢载人 | 230 | // 车尾,判断是否 货车尾部货厢载人 |
166 | if(result_info.vpt_type == 6 || result_info.vpt_type == 7){ | 231 | if(result_info.vpt_type == 6 || result_info.vpt_type == 7){ |
167 | if(result_info.manned_res.hs_count > 0){ | 232 | if(result_info.manned_res.hs_count > 0){ |
168 | - // 货车载人 | 233 | + result_info.manned = 1; |
169 | } | 234 | } |
170 | } | 235 | } |
171 | } else { | 236 | } else { |
172 | if(result_info.vpt_type == 1 || result_info.vpt_type == 2 || result_info.vpt_type == 3){ | 237 | if(result_info.vpt_type == 1 || result_info.vpt_type == 2 || result_info.vpt_type == 3){ |
173 | if(result_info.manned_res.hs_count >= 3){ | 238 | if(result_info.manned_res.hs_count >= 3){ |
174 | // 摩托车、三轮车载人 | 239 | // 摩托车、三轮车载人 |
240 | + result_info.manned = 1; | ||
175 | } | 241 | } |
176 | } | 242 | } |
177 | } | 243 | } |
178 | 244 | ||
179 | // 司乘 | 245 | // 司乘 |
180 | - int vpd_num = result_info.vehicle_pendant_det_res.count; | 246 | + auto& pendant_res = result_info.vehicle_pendant_det_res; |
247 | + int vpd_num = pendant_res.size(); | ||
181 | vector<sy_img> vec_human_img; | 248 | vector<sy_img> vec_human_img; |
249 | + vector<ImageData*> vec_data; | ||
182 | for(int p=0; p<vpd_num; p++) | 250 | for(int p=0; p<vpd_num; p++) |
183 | { | 251 | { |
184 | - int index = result_info.vehicle_pendant_det_res.vpd_res[p].index; | ||
185 | - if(index == 0){ | ||
186 | - sy_rect human_rect = result_info.vehicle_pendant_det_res.vpd_res[p].rect; | 252 | + int index = pendant_res[p].index; |
253 | + if(index == 0){ //driver | ||
254 | + sy_rect human_rect = pendant_res[p].rect; | ||
187 | ImageData* human_data = m_crop_util.crop(src, human_rect.left_, human_rect.top_, human_rect.left_ + human_rect.width_, human_rect.top_ + human_rect.height_); | 255 | ImageData* human_data = m_crop_util.crop(src, human_rect.left_, human_rect.top_, human_rect.left_ + human_rect.width_, human_rect.top_ + human_rect.height_); |
188 | 256 | ||
189 | sy_img img; | 257 | sy_img img; |
@@ -192,16 +260,22 @@ va_result* PicAnalysis::analysis_img(vector<sy_img> vec_img){ | @@ -192,16 +260,22 @@ va_result* PicAnalysis::analysis_img(vector<sy_img> vec_img){ | ||
192 | img.data_ = human_data->data_naked; | 260 | img.data_ = human_data->data_naked; |
193 | 261 | ||
194 | vec_human_img.push_back(img); | 262 | vec_human_img.push_back(img); |
263 | + | ||
264 | + vec_data.push_back(human_data); | ||
195 | } | 265 | } |
196 | } | 266 | } |
197 | 267 | ||
198 | - m_clothes_algorithm.detect(vec_human_img); | 268 | + vector<int> vec_color = m_clothes_algorithm.detect(vec_human_img); |
199 | 269 | ||
200 | - for(int p=0; p<vpd_num; p++) | 270 | + for(int p=0; p<vec_color.size(); p++) |
201 | { | 271 | { |
202 | - int index = result_info.vehicle_pendant_det_res.vpd_res[p].index; | ||
203 | - if(index == 0){ | ||
204 | - sy_rect human_rect = result_info.vehicle_pendant_det_res.vpd_res[p].rect; | 272 | + int index = pendant_res[p].index; |
273 | + if(index == 0) { // 更新司乘衣着颜色 | ||
274 | + pendant_res[p].iColor = vec_color[p]; | ||
275 | + | ||
276 | + ImageData* human_data = vec_data[p]; | ||
277 | + delete human_data; | ||
278 | + human_data = nullptr; | ||
205 | } | 279 | } |
206 | } | 280 | } |
207 | 281 | ||
@@ -228,7 +302,6 @@ va_result* PicAnalysis::analysis_img(vector<sy_img> vec_img){ | @@ -228,7 +302,6 @@ va_result* PicAnalysis::analysis_img(vector<sy_img> vec_img){ | ||
228 | { | 302 | { |
229 | result_info.rainshed = vec_rainshed_result[0]; | 303 | result_info.rainshed = vec_rainshed_result[0]; |
230 | } | 304 | } |
231 | - | ||
232 | 305 | ||
233 | vector<int> vec_phone_result = m_motor_phone_algorithm.detect(vec_motor_img); | 306 | vector<int> vec_phone_result = m_motor_phone_algorithm.detect(vec_motor_img); |
234 | if (vec_phone_result.size() > 0) | 307 | if (vec_phone_result.size() > 0) |
@@ -239,7 +312,6 @@ va_result* PicAnalysis::analysis_img(vector<sy_img> vec_img){ | @@ -239,7 +312,6 @@ va_result* PicAnalysis::analysis_img(vector<sy_img> vec_img){ | ||
239 | delete motor_data; | 312 | delete motor_data; |
240 | motor_data = nullptr; | 313 | motor_data = nullptr; |
241 | } | 314 | } |
242 | - | ||
243 | } | 315 | } |
244 | } | 316 | } |
245 | 317 | ||
@@ -250,13 +322,9 @@ va_result* PicAnalysis::analysis_img(vector<sy_img> vec_img){ | @@ -250,13 +322,9 @@ va_result* PicAnalysis::analysis_img(vector<sy_img> vec_img){ | ||
250 | // head_tail_result.clear(); | 322 | // head_tail_result.clear(); |
251 | // } | 323 | // } |
252 | 324 | ||
253 | - // if (reult) { | ||
254 | - // m_vehicle_analysis.release_result(reult, vec_img.size()); | ||
255 | - // } | ||
256 | - | ||
257 | LOG_INFO("analysis_sync finished!"); | 325 | LOG_INFO("analysis_sync finished!"); |
258 | 326 | ||
259 | - return result; | 327 | + return vec_result; |
260 | } | 328 | } |
261 | 329 | ||
262 | int PicAnalysis::release() { | 330 | int PicAnalysis::release() { |
src/PicAnalysis.h
@@ -24,9 +24,9 @@ public: | @@ -24,9 +24,9 @@ public: | ||
24 | int init(VillageParam param); | 24 | int init(VillageParam param); |
25 | 25 | ||
26 | // todo 接口定义是二进制流的,这个地方有待修改 | 26 | // todo 接口定义是二进制流的,这个地方有待修改 |
27 | - va_result* analysis_file(vector<string> file_path); | 27 | + vector<AnalysisResult> analysis_file(vector<string> file_path); |
28 | 28 | ||
29 | - va_result* analysis_img(vector<sy_img> vec_img); | 29 | + vector<AnalysisResult> analysis_img(vector<sy_img> vec_img); |
30 | 30 | ||
31 | private: | 31 | private: |
32 | 32 | ||
@@ -36,6 +36,8 @@ private: | @@ -36,6 +36,8 @@ private: | ||
36 | 36 | ||
37 | int check_motor_retrograde_motion(vector<sy_img> vec_img); | 37 | int check_motor_retrograde_motion(vector<sy_img> vec_img); |
38 | 38 | ||
39 | + vector<AnalysisResult> va_result2AnalysisResult(va_result* result, int batchsize); | ||
40 | + | ||
39 | private: | 41 | private: |
40 | aclrtContext m_ctx{nullptr}; | 42 | aclrtContext m_ctx{nullptr}; |
41 | aclrtStream stream{nullptr}; | 43 | aclrtStream stream{nullptr}; |
src/ai_engine_module/VidClothes.cpp
@@ -28,9 +28,9 @@ int VidClothes::init(int devId){ | @@ -28,9 +28,9 @@ int VidClothes::init(int devId){ | ||
28 | return SY_SUCCESS; | 28 | return SY_SUCCESS; |
29 | } | 29 | } |
30 | 30 | ||
31 | -int VidClothes::detect(vector<sy_img> vec_img){ | 31 | +vector<int> VidClothes::detect(vector<sy_img> vec_img){ |
32 | 32 | ||
33 | - ACL_CALL(aclrtSetCurrentContext(ctx), SY_SUCCESS, SY_FAILED); | 33 | + vector<int> vec_color; |
34 | 34 | ||
35 | const int batchsize = vec_img.size(); | 35 | const int batchsize = vec_img.size(); |
36 | vidclothes_result * results = new vidclothes_result[batchsize]; | 36 | vidclothes_result * results = new vidclothes_result[batchsize]; |
@@ -39,6 +39,12 @@ int VidClothes::detect(vector<sy_img> vec_img){ | @@ -39,6 +39,12 @@ int VidClothes::detect(vector<sy_img> vec_img){ | ||
39 | 39 | ||
40 | do | 40 | do |
41 | { | 41 | { |
42 | + ret = aclrtSetCurrentContext(ctx); | ||
43 | + if (SY_SUCCESS != ret) { | ||
44 | + printf("aclrtSetCurrentContext failed!"); | ||
45 | + break; | ||
46 | + } | ||
47 | + | ||
42 | ret = vidclothes_batch(m_handle, vec_img.data(), batchsize, results); | 48 | ret = vidclothes_batch(m_handle, vec_img.data(), batchsize, results); |
43 | if (SY_SUCCESS != ret) { | 49 | if (SY_SUCCESS != ret) { |
44 | printf("vidclothesClassification process failed!"); | 50 | printf("vidclothesClassification process failed!"); |
@@ -46,7 +52,8 @@ int VidClothes::detect(vector<sy_img> vec_img){ | @@ -46,7 +52,8 @@ int VidClothes::detect(vector<sy_img> vec_img){ | ||
46 | } | 52 | } |
47 | 53 | ||
48 | for(int batchIdx = 0;batchIdx<batchsize;batchIdx++) { | 54 | for(int batchIdx = 0;batchIdx<batchsize;batchIdx++) { |
49 | - printf("index:%d,confidence:%f\n",results[batchIdx].index,results[batchIdx].score); | 55 | + // printf("index:%d,confidence:%f\n",results[batchIdx].index,results[batchIdx].score); |
56 | + vec_color.push_back(results[batchIdx].index); | ||
50 | } | 57 | } |
51 | } while (0); | 58 | } while (0); |
52 | 59 | ||
@@ -54,7 +61,7 @@ int VidClothes::detect(vector<sy_img> vec_img){ | @@ -54,7 +61,7 @@ int VidClothes::detect(vector<sy_img> vec_img){ | ||
54 | delete [] results; | 61 | delete [] results; |
55 | } | 62 | } |
56 | 63 | ||
57 | - return ret; | 64 | + return vec_color; |
58 | } | 65 | } |
59 | 66 | ||
60 | int VidClothes::release() { | 67 | int VidClothes::release() { |
src/ai_engine_module/VidClothes.h
src/ai_engine_module/include.h
src/village_inc.h
@@ -2,6 +2,8 @@ | @@ -2,6 +2,8 @@ | ||
2 | #define __VILLAGE_INC_H__ | 2 | #define __VILLAGE_INC_H__ |
3 | 3 | ||
4 | #include <string> | 4 | #include <string> |
5 | +#include <vector> | ||
6 | +#include "vehicle_analysis.h" | ||
5 | 7 | ||
6 | struct VillageParam { | 8 | struct VillageParam { |
7 | int dev_id; | 9 | int dev_id; |
@@ -9,5 +11,42 @@ struct VillageParam { | @@ -9,5 +11,42 @@ struct VillageParam { | ||
9 | std::string model_path; | 11 | std::string model_path; |
10 | }; | 12 | }; |
11 | 13 | ||
14 | +typedef struct pendant_info | ||
15 | +{ | ||
16 | + sy_rect rect; | ||
17 | + 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 | ||
18 | + float confidence; | ||
19 | + int driver_copilot_info; | ||
20 | + int iColor; //13类:"棕", "橙", "灰", "白", "粉", "紫", "红", "绿", "蓝", "银", "青", "黄", "黑" | ||
21 | +} pendant_info; | ||
22 | + | ||
23 | +typedef struct VehicleInfo { | ||
24 | + vd_result vehicle_detect_res; | ||
25 | + vd_result vehicle_win_detect_res; | ||
26 | + vd_result vehicle_body_detect_res; | ||
27 | + vc_result vehicle_color_res; | ||
28 | + vr_result vehicle_recg_res; | ||
29 | + vplate_results vehicle_plate_det_recg_res; | ||
30 | + std::vector<pendant_info> vehicle_pendant_det_res; | ||
31 | + vid_result vehicle_illegal_det_res; | ||
32 | + vf_result vehicle_fea_res; | ||
33 | + | ||
34 | + mta_result mta_res; | ||
35 | + | ||
36 | + manned_result manned_res; | ||
37 | + | ||
38 | + int type; | ||
39 | + int vpt_type; | ||
40 | + int rainshed; //是否安装雨棚, 0 有雨棚 1 无雨棚 | ||
41 | + int manned; | ||
42 | + | ||
43 | + int human_upper_color; | ||
44 | + int human_lower_color; | ||
45 | + | ||
46 | +} VehicleInfo; | ||
47 | + | ||
48 | +typedef struct AnalysisResult { | ||
49 | + std::vector<VehicleInfo> info; | ||
50 | +} AnalysisResult; | ||
12 | 51 | ||
13 | #endif // __VILLAGE_INC_H__ | 52 | #endif // __VILLAGE_INC_H__ |
14 | \ No newline at end of file | 53 | \ No newline at end of file |
src/village_pic_interface.cpp
1 | #include "village_pic_interface.h" | 1 | #include "village_pic_interface.h" |
2 | #include "PicAnalysis.h" | 2 | #include "PicAnalysis.h" |
3 | 3 | ||
4 | -#include <vector> | ||
5 | - | ||
6 | 4 | ||
7 | int village_pic_init(void **handle, VillageParam param) | 5 | int village_pic_init(void **handle, VillageParam param) |
8 | { | 6 | { |
@@ -11,7 +9,7 @@ int village_pic_init(void **handle, VillageParam param) | @@ -11,7 +9,7 @@ int village_pic_init(void **handle, VillageParam param) | ||
11 | return tools->init(param); | 9 | return tools->init(param); |
12 | } | 10 | } |
13 | 11 | ||
14 | -va_result* village_pic_analysis(void *handle, sy_img* img_array, int batch_size) | 12 | +std::vector<AnalysisResult> village_pic_analysis(void *handle, sy_img* img_array, int batch_size) |
15 | { | 13 | { |
16 | std::vector<sy_img> vec_img; | 14 | std::vector<sy_img> vec_img; |
17 | for (size_t i = 0; i < batch_size; i++) | 15 | for (size_t i = 0; i < batch_size; i++) |
src/village_pic_interface.h
@@ -10,14 +10,14 @@ | @@ -10,14 +10,14 @@ | ||
10 | #define VILLAGE_PIC_API __attribute__ ((visibility ("default"))) | 10 | #define VILLAGE_PIC_API __attribute__ ((visibility ("default"))) |
11 | #endif | 11 | #endif |
12 | 12 | ||
13 | -#include "vehicle_analysis.h" | ||
14 | #include "village_inc.h" | 13 | #include "village_inc.h" |
14 | +#include <vector> | ||
15 | 15 | ||
16 | extern "C" | 16 | extern "C" |
17 | { | 17 | { |
18 | VILLAGE_PIC_API int village_pic_init(void **handle, VillageParam param); | 18 | VILLAGE_PIC_API int village_pic_init(void **handle, VillageParam param); |
19 | 19 | ||
20 | - VILLAGE_PIC_API va_result* village_pic_analysis(void *handle, sy_img* imgs, int batch_size); | 20 | + VILLAGE_PIC_API std::vector<AnalysisResult> village_pic_analysis(void *handle, sy_img* imgs, int batch_size); |
21 | 21 | ||
22 | VILLAGE_PIC_API int village_pic_release(void **handle); | 22 | VILLAGE_PIC_API int village_pic_release(void **handle); |
23 | 23 |