VehicleAnalysis.cpp 4.2 KB
#include "VehicleAnalysis.h"


VehicleAnalysis::VehicleAnalysis() {
    cout << va_get_version() << endl;
}

VehicleAnalysis::~VehicleAnalysis() {
    release();
}

int VehicleAnalysis::init(VehicleAnalysisParam tParam) {

    va_param param;
	param.vehicle_detect_config= SY_CONFIG_OPEN;  //1.开启车检测 SY_CONFIG_CLOSE  SY_CONFIG_OPEN
    param.vehicle_recg_config= SY_CONFIG_OPEN;     //4.开启车型识别
	param.vehicle_recg_supplement_config= SY_CONFIG_OPEN;     //4.开启车型识别补充识别
    param.vehicle_plate_det_recg_config= SY_CONFIG_OPEN; //5.开启车牌检测识别	
    param.vehicle_pendant_det_config= SY_CONFIG_OPEN; //6.开启车属性检测识别
    param.vehicle_motor_tricycle_analysis_config= SY_CONFIG_OPEN;  //8.摩托车分析	
    param.vehicle_manned_config= SY_CONFIG_OPEN;  //8.开启载人分析	
    param.vehicle_illegal_config= SY_CONFIG_OPEN;  //7.开启车违规
	param.vehicle_color_config= SY_CONFIG_OPEN;  //3.开启车颜色识别
	param.vehicle_feature_config= SY_CONFIG_OPEN;  //8.开启车辆特征提取
	
	param.gpuid=tParam.devId;
		
	//车检测参数	
	//param.vehicle_det_param.process_min_l = 720;// 720;
	//param.vehicle_det_param.process_max_l = 1280;//1280;	
	//param.vehicle_det_param.thresld=0.3;
	//param.min_obj_size=200;  //最小目标	
	param.vehicle_det_thresld=0.4;
	
	//车牌检测参数
	//param.vehicle_plate_det_param.process_min_l=320;
	//param.vehicle_plate_det_param.process_max_l=320;	
	//param.vehicle_plate_det_param.thresld=0.4;
	param.vehicle_plate_det_thresld=0.5;
	
	//车属性检测参数
	//param.vehicle_attribute_det_param.process_min_l=360;
	//param.vehicle_attribute_det_param.process_max_l=640;	
	//param.vehicle_attribute_det_param.thresld=0.3;
	param.vehicle_attribute_det_thresld=0.5;
	
	//车logo检测参数
	//param.vehicle_logo_det_param.process_min_l=512;
	//param.vehicle_logo_det_param.process_max_l=512;	
	//param.vehicle_logo_det_param.thresld=0.1;
	param.vehicle_logo_det_thresld=0.1;	
	
	//车颜色阈值
	param.vc_thresld = 0.5;
	
    string dbPath = tParam.sdk_root + "/models/vehicle_analysis/db/vr_h0725x210605_r191230.db";
    string models_path = tParam.sdk_root + "/models/vehicle_analysis/";
	//车型参数
	param.dbPath= (char*)dbPath.data();	
	param.models_Path= (char*)models_path.data();	//所有模型的地址

    param.log_level = tParam.log_level;
    param.log_path = tParam.log_path;
    param.log_days = tParam.log_days;
    param.log_mem = tParam.log_mem;

    LOG_INFO("va_init start");
    // 内部有 ctx
    int ret = va_init(&m_handle, param);
    if (ret != 0) {
        return -1;
	}

    LOG_INFO("va_init success");
    return 0;
}

va_result * VehicleAnalysis::detect(vector<sy_img> vec_img) {
			
    int batch_size = vec_img.size();
    
    va_result *result=new va_result[batch_size];
    for(int b=0;b<batch_size;b++)
    {
        result[b].count=0;
        result[b].info=new vehicle_info[100];
        for(int c=0; c<100; c++)
        {
            result[b].info[c].vehicle_pendant_det_res.vpd_res=new v_pendant_d_info[300];	
        }			
    }

    LOG_INFO("va_batch start");
    
    int ret = va_batch(m_handle, vec_img.data(), batch_size, result);

    LOG_INFO("va_batch end:{}", ret);

    //delete result
    // for(int b=0;b<batch_size;b++)
    // {
    //     for(int c=0; c<100; c++)
    //     {
    //         if(result[b].info[c].vehicle_pendant_det_res.vpd_res!=NULL)
    //             delete[] result[b].info[c].vehicle_pendant_det_res.vpd_res;
    //     }
    //     if(result[b].info!=NULL){
    //         delete[] result[b].info;
    //     }
    // }

    // if(result!=NULL){
    //     delete[] result;
    // }

    return result;  
}

void VehicleAnalysis::release(){
    if (m_handle) {
        va_release(&m_handle);
    }
}

void VehicleAnalysis::release_result(va_result* result, int batch_size){
    for(int b=0;b<batch_size;b++)
    {
        for(int c=0; c<100; c++)
        {
            if(result[b].info[c].vehicle_pendant_det_res.vpd_res!=NULL)
                delete[] result[b].info[c].vehicle_pendant_det_res.vpd_res;
            
        }
        if(result[b].info!=NULL){
            delete[] result[b].info;
        }
            
    }

    if(result!=NULL){
        delete[] result;
    }
}