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 290 t2 = msecond();
291 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 297 printf("jni info:village_pic_analysis failed.");
311 298 return -1;
... ... @@ -320,12 +307,12 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_vehicle_VehicleNativeI
320 307 {
321 308  
322 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 312 //std::cout << "obj_quality_idx=" << result[b].info[c].obj_quality_idx << std::endl; //聚档数据类型�?-无效数据�?-低质数据�?-优质数据
326 313  
327 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 316 //std::cout << "vehicle_type=" << vehicle_type << std::endl;
330 317 if (vehicle_type == 0)str_vehicle_type = "head";
331 318 else if (vehicle_type == 1)str_vehicle_type = "rear";
... ... @@ -404,61 +391,37 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_vehicle_VehicleNativeI
404 391  
405 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 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 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 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 407 //vehicleColorRes
420 408 jobject vehicleColorResult = NULL;
421 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 415 jobject vehicleRecgResult = NULL;
429 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 426 //vehiclePlateDetRecgRes
464 427 jobject vplateResult = NULL;
... ... @@ -466,130 +429,118 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_vehicle_VehicleNativeI
466 429 jobjectArray vplateNumArray = NULL;
467 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 433 vplateNumArray = env->NewObjectArray(PLATENUM, cls_VplateNum, NULL);
471 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 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 445 jobject vehiclePendantDetResult = NULL;
483 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 462 //vehicleIllegalDetRes
502 463 jobject vehicleIllegalDetResult = NULL;
503 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 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 479 vehicleIllegalDetResult = env->NewObject(cls_VehicleIllegalDetResult, mid_VehicleIllegalDetResult, vehicleIllegalDetInfo_driver, vehicleIllegalDetInfo_copilot);
519 480 }
520   -
  481 +
521 482 //vehicleFeaRes
522 483 jobject vehicleFeaResult = NULL;
523 484 if (global_vehicle_feature_config == SY_CONFIG_OPEN)
524 485 {
525 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 488 vehicleFeaResult = env->NewObject(cls_VehicleFeaResult, mid_VehicleFeaResult, feature);
528 489 }
529   -
  490 +
530 491 //MtaResultParam
531 492 jobject mtaResult = NULL;
532 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 498 jobject mtaDetailsParam_motor_driver_hs_rect = NULL;
538 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 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 508 jobject MannedResult = NULL;
548 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 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 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 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 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 544 ACL_CALL(aclrtSetCurrentContext(ctx), ACL_ERROR_NONE, FAILED);
594 545 delete dvpp;
595 546 dvpp = nullptr;
... ... @@ -609,7 +560,7 @@ JNIEXPORT void JNICALL Java_com_objecteye_nativeinterface_vehicle_VehicleNativeI
609 560 void *vaHandle = (void *)handle;
610 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 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 83 int ret = aclrtSetCurrentContext(m_ctx);
82 84 if (SY_SUCCESS != ret) {
83 85 printf("aclrtSetCurrentContext failed!");
84   - return nullptr;
  86 + return result;
85 87 }
86 88  
87 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 99 ret = Utils::ReadImageFile(src, file_path); //将二进制图像读入内存,并读取宽高信息
98 100 if(ret != SY_SUCCESS){
99 101 LOG_ERROR("ReadImageFile failed!");
100   - return nullptr;
  102 + return result;
101 103 }
102 104  
103 105 ret = m_dvpp->CvtJpegToYuv420sp(dvpp_data[i], src); //解码
104 106 if(ret != SY_SUCCESS){
105 107 LOG_ERROR("CvtJpegToYuv420sp failed!");
106   - return nullptr;
  108 + return result;
107 109 }
108 110  
109 111 sy_img img;
... ... @@ -117,31 +119,91 @@ va_result* PicAnalysis::analysis_file(vector&lt;string&gt; vec_file_path){
117 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 176 const int batch_size = vec_img.size();
123 177  
124 178 int ret = aclrtSetCurrentContext(m_ctx);
125 179 if (SY_SUCCESS != ret) {
126 180 printf("aclrtSetCurrentContext failed!");
127   - return nullptr;
  181 + return vec_result;
128 182 }
129 183  
130 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 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 198 sy_img img = vec_img[b];
137 199 ImageData src;
138 200 src.width = img.w_;
139 201 src.height = img.h_;
140 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 209 if (6 == shot_type)
... ... @@ -157,7 +219,10 @@ va_result* PicAnalysis::analysis_img(vector&lt;sy_img&gt; vec_img){
157 219 vector<sy_img> vec_human_img;
158 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 227 delete human_data;
163 228 human_data = nullptr;
... ... @@ -165,25 +230,28 @@ va_result* PicAnalysis::analysis_img(vector&lt;sy_img&gt; vec_img){
165 230 // 车尾,判断是否 货车尾部货厢载人
166 231 if(result_info.vpt_type == 6 || result_info.vpt_type == 7){
167 232 if(result_info.manned_res.hs_count > 0){
168   - // 货车载人
  233 + result_info.manned = 1;
169 234 }
170 235 }
171 236 } else {
172 237 if(result_info.vpt_type == 1 || result_info.vpt_type == 2 || result_info.vpt_type == 3){
173 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 248 vector<sy_img> vec_human_img;
  249 + vector<ImageData*> vec_data;
182 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 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 257 sy_img img;
... ... @@ -192,16 +260,22 @@ va_result* PicAnalysis::analysis_img(vector&lt;sy_img&gt; vec_img){
192 260 img.data_ = human_data->data_naked;
193 261  
194 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 302 {
229 303 result_info.rainshed = vec_rainshed_result[0];
230 304 }
231   -
232 305  
233 306 vector<int> vec_phone_result = m_motor_phone_algorithm.detect(vec_motor_img);
234 307 if (vec_phone_result.size() > 0)
... ... @@ -239,7 +312,6 @@ va_result* PicAnalysis::analysis_img(vector&lt;sy_img&gt; vec_img){
239 312 delete motor_data;
240 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 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 325 LOG_INFO("analysis_sync finished!");
258 326  
259   - return result;
  327 + return vec_result;
260 328 }
261 329  
262 330 int PicAnalysis::release() {
... ...
src/PicAnalysis.h
... ... @@ -24,9 +24,9 @@ public:
24 24 int init(VillageParam param);
25 25  
26 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 31 private:
32 32  
... ... @@ -36,6 +36,8 @@ private:
36 36  
37 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 41 private:
40 42 aclrtContext m_ctx{nullptr};
41 43 aclrtStream stream{nullptr};
... ...
src/ai_engine_module/VidClothes.cpp
... ... @@ -28,9 +28,9 @@ int VidClothes::init(int devId){
28 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 35 const int batchsize = vec_img.size();
36 36 vidclothes_result * results = new vidclothes_result[batchsize];
... ... @@ -39,6 +39,12 @@ int VidClothes::detect(vector&lt;sy_img&gt; vec_img){
39 39  
40 40 do
41 41 {
  42 + ret = aclrtSetCurrentContext(ctx);
  43 + if (SY_SUCCESS != ret) {
  44 + printf("aclrtSetCurrentContext failed!");
  45 + break;
  46 + }
  47 +
42 48 ret = vidclothes_batch(m_handle, vec_img.data(), batchsize, results);
43 49 if (SY_SUCCESS != ret) {
44 50 printf("vidclothesClassification process failed!");
... ... @@ -46,7 +52,8 @@ int VidClothes::detect(vector&lt;sy_img&gt; vec_img){
46 52 }
47 53  
48 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 58 } while (0);
52 59  
... ... @@ -54,7 +61,7 @@ int VidClothes::detect(vector&lt;sy_img&gt; vec_img){
54 61 delete [] results;
55 62 }
56 63  
57   - return ret;
  64 + return vec_color;
58 65 }
59 66  
60 67 int VidClothes::release() {
... ...
src/ai_engine_module/VidClothes.h
... ... @@ -9,7 +9,7 @@ public:
9 9  
10 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 14 private:
15 15 int release();
... ...
src/ai_engine_module/include.h
... ... @@ -20,6 +20,7 @@
20 20  
21 21 #include <chrono>
22 22 #include <dirent.h>
  23 +#include <vector>
23 24  
24 25 using namespace std;
25 26 using namespace cv;
... ...
src/village_inc.h
... ... @@ -2,6 +2,8 @@
2 2 #define __VILLAGE_INC_H__
3 3  
4 4 #include <string>
  5 +#include <vector>
  6 +#include "vehicle_analysis.h"
5 7  
6 8 struct VillageParam {
7 9 int dev_id;
... ... @@ -9,5 +11,42 @@ struct VillageParam {
9 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 52 #endif // __VILLAGE_INC_H__
14 53 \ No newline at end of file
... ...
src/village_pic_interface.cpp
1 1 #include "village_pic_interface.h"
2 2 #include "PicAnalysis.h"
3 3  
4   -#include <vector>
5   -
6 4  
7 5 int village_pic_init(void **handle, VillageParam param)
8 6 {
... ... @@ -11,7 +9,7 @@ int village_pic_init(void **handle, VillageParam param)
11 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 14 std::vector<sy_img> vec_img;
17 15 for (size_t i = 0; i < batch_size; i++)
... ...
src/village_pic_interface.h
... ... @@ -10,14 +10,14 @@
10 10 #define VILLAGE_PIC_API __attribute__ ((visibility ("default")))
11 11 #endif
12 12  
13   -#include "vehicle_analysis.h"
14 13 #include "village_inc.h"
  14 +#include <vector>
15 15  
16 16 extern "C"
17 17 {
18 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 22 VILLAGE_PIC_API int village_pic_release(void **handle);
23 23  
... ...