Commit 427201b2e4de744f76c6078dfe86dca58fa63041

Authored by Hu Chunming
1 parent 6c52ee6c

完善结果返回

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&lt;string&gt; vec_file_path){ @@ -97,13 +99,13 @@ va_result* PicAnalysis::analysis_file(vector&lt;string&gt; 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&lt;string&gt; vec_file_path){ @@ -117,31 +119,91 @@ va_result* PicAnalysis::analysis_file(vector&lt;string&gt; 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&lt;sy_img&gt; vec_img){ @@ -157,7 +219,10 @@ va_result* PicAnalysis::analysis_img(vector&lt;sy_img&gt; 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&lt;sy_img&gt; vec_img){ @@ -165,25 +230,28 @@ va_result* PicAnalysis::analysis_img(vector&lt;sy_img&gt; 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&lt;sy_img&gt; vec_img){ @@ -192,16 +260,22 @@ va_result* PicAnalysis::analysis_img(vector&lt;sy_img&gt; 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&lt;sy_img&gt; vec_img){ @@ -228,7 +302,6 @@ va_result* PicAnalysis::analysis_img(vector&lt;sy_img&gt; 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&lt;sy_img&gt; vec_img){ @@ -239,7 +312,6 @@ va_result* PicAnalysis::analysis_img(vector&lt;sy_img&gt; 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&lt;sy_img&gt; vec_img){ @@ -250,13 +322,9 @@ va_result* PicAnalysis::analysis_img(vector&lt;sy_img&gt; 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&lt;sy_img&gt; vec_img){ @@ -39,6 +39,12 @@ int VidClothes::detect(vector&lt;sy_img&gt; 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&lt;sy_img&gt; vec_img){ @@ -46,7 +52,8 @@ int VidClothes::detect(vector&lt;sy_img&gt; 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&lt;sy_img&gt; vec_img){ @@ -54,7 +61,7 @@ int VidClothes::detect(vector&lt;sy_img&gt; 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
@@ -9,7 +9,7 @@ public: @@ -9,7 +9,7 @@ public:
9 9
10 int init(int devId); 10 int init(int devId);
11 11
12 - int detect(vector<sy_img> vec_img); 12 + vector<int> detect(vector<sy_img> vec_img);
13 13
14 private: 14 private:
15 int release(); 15 int release();
src/ai_engine_module/include.h
@@ -20,6 +20,7 @@ @@ -20,6 +20,7 @@
20 20
21 #include <chrono> 21 #include <chrono>
22 #include <dirent.h> 22 #include <dirent.h>
  23 +#include <vector>
23 24
24 using namespace std; 25 using namespace std;
25 using namespace cv; 26 using namespace cv;
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