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 | 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<string> 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<string> 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<sy_img> 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<sy_img> 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<sy_img> 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<sy_img> 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<sy_img> 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<sy_img> 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<sy_img> 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<sy_img> 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<sy_img> 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
src/ai_engine_module/include.h
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 | ... | ... |