chenshijun
2019-04-16 080afae264fe7ff89a54886f28dff208fe5a06c4
QiaoJiaSystem/VptServer/VptDetectWrapper.cpp
@@ -4,6 +4,7 @@
#include <basic/debug/Debug.h>
#include "VptDetectWrapper.h"
#include <basic/timer_counter/Clocktimer.h>
VptDetectWrapper::VptDetectWrapper() {
    init();
@@ -20,6 +21,7 @@
void VptDetectWrapper::init() {
    m_param.mode = DEVICE_GPU;
#if 0
    m_param.gpuid = m_gpuIdx;
    m_param.hp_recg_config = SY_CONFIG_OPEN;
    m_param.hcp_recg_config = SY_CONFIG_OPEN;
@@ -28,10 +30,21 @@
    m_param.vehicle_pendant_det_recg_config = SY_CONFIG_OPEN;
    m_param.dbPath = const_cast<char *>(m_dbFilePath.data());
    m_param.log = SY_CONFIG_OPEN;
#else
    m_param.gpuid = m_gpuIdx;
    m_param.hp_recg_config = SY_CONFIG_CLOSE;
    m_param.hcp_recg_config = SY_CONFIG_CLOSE;
    m_param.vehicle_color_config = SY_CONFIG_CLOSE;
    m_param.vehicle_recg_config = SY_CONFIG_CLOSE;
    m_param.vehicle_pendant_det_recg_config = SY_CONFIG_CLOSE;
    m_param.dbPath = const_cast<char *>(m_dbFilePath.data());
    m_param.log = SY_CONFIG_CLOSE;
#endif
    vpt_pic_init(&m_handle, m_param);
}
list<VptDetectResults> VptDetectWrapper::process_image(cv::Mat &_img) {
    ClockTimer ct("VptDetectWrapper::process_image");
    m_results.clear();
    sy_img img;
@@ -50,6 +63,9 @@
        int colorIndex = result.info[i].obj_index;
        if (colorIndex < 0 || colorIndex >= 9)continue;
        if(colorIndex==4) DBG("detect a car, score =" << result.info[i].obj_score);
        if(colorIndex==1) DBG("detect a bike, score =" << result.info[i].obj_score);
        if(colorIndex==2) DBG("detect a moto, score =" << result.info[i].obj_score);
//        sprintf(str_i, "%s:%.2f", type[colorIndex].c_str(), result.info[i].obj_score);
//        rectangle(process_image,
@@ -68,7 +84,15 @@
            m_results.emplace_back(std::move(changeAnalysisRes(colorIndex, result.info[i].analysis_res)));
            m_results.back().bskRect.setRect(result.info[i].obj_rect.left_, result.info[i].obj_rect.top_,
                                             result.info[i].obj_rect.width_, result.info[i].obj_rect.height_);
        } else {}
            m_results.back().obj_score = result.info[i].obj_score;
        } else {
            VptDetectResults vptDetectResults;
            vptDetectResults.sdkDetectType = static_cast<SDKDetectType>(colorIndex);
            vptDetectResults.bskRect.setRect(result.info[i].obj_rect.left_, result.info[i].obj_rect.top_,
                                             result.info[i].obj_rect.width_, result.info[i].obj_rect.height_);
            vptDetectResults.obj_score = result.info[i].obj_score;
            m_results.emplace_back(vptDetectResults);
        }
    }
    //release source
    if (result.info != NULL) {
@@ -81,7 +105,7 @@
        delete[] result.info;
        result.info = NULL;
    }
    DBG(m_results.size());
//    DBG(m_results.size());
    return m_results;
}
@@ -127,62 +151,68 @@
            auto &carRes = vptDetectResults.vptDetectRes.carDetectRes;
            // 车颜色
            carRes.colorLabel = static_cast<ColorLabel>(cur_res->vc_res.res_index);
            carRes.colorLabelProb = cur_res->vc_res.res_prob;
            if(m_param.vehicle_color_config == SY_CONFIG_OPEN) {
                carRes.colorLabel = static_cast<ColorLabel>(cur_res->vc_res.res_index);
                carRes.colorLabelProb = cur_res->vc_res.res_prob;
            }
            // 车型识别
            if (cur_res->vr_res.vehicle_brand != NULL) {
                cout << "  车辆品牌 - " << cur_res->vr_res.vehicle_brand << endl;
                carRes.vehicle_brand = cur_res->vr_res.vehicle_brand;
            if(m_param.vehicle_recg_config == SY_CONFIG_OPEN) {
                if (cur_res->vr_res.vehicle_brand != NULL) {
                    cout << "  车辆品牌 - " << cur_res->vr_res.vehicle_brand << endl;
                    carRes.vehicle_brand = cur_res->vr_res.vehicle_brand;
//                carRes.vehicle_brand = string(cur_res->vr_res.vehicle_brand);
//                carRes.vehicle_brand = "发";
                delete[] cur_res->vr_res.vehicle_brand;
                cur_res->vr_res.vehicle_brand = NULL;
            }
            if (cur_res->vr_res.vehicle_subbrand != NULL) {
                cout << "  车辆子品牌 - " << cur_res->vr_res.vehicle_subbrand << endl;
                carRes.vehicle_subbrand = cur_res->vr_res.vehicle_subbrand;
//                carRes.vehicle_subbrand = cur_res->vr_res.vehicle_subbrand;
                delete[] cur_res->vr_res.vehicle_subbrand;
                cur_res->vr_res.vehicle_subbrand = NULL;
            }
            if (cur_res->vr_res.vehicle_issue_year != NULL) {
                cout << "  车辆年款 - " << cur_res->vr_res.vehicle_issue_year << endl;
                carRes.vehicle_issue_year = cur_res->vr_res.vehicle_issue_year;
                delete[] cur_res->vr_res.vehicle_issue_year;
                cur_res->vr_res.vehicle_issue_year = NULL;
            }
            if (cur_res->vr_res.vehicle_type != NULL) {
                cout << "  车辆类型 - " << cur_res->vr_res.vehicle_type << endl;
                carRes.vehicle_type = cur_res->vr_res.vehicle_type;
                delete[] cur_res->vr_res.vehicle_type;
                cur_res->vr_res.vehicle_type = NULL;
            }
            if (cur_res->vr_res.freight_ton != NULL) {
                cout << "  货车吨级 - " << cur_res->vr_res.freight_ton << endl;
                carRes.freight_ton = cur_res->vr_res.freight_ton;
                delete[] cur_res->vr_res.freight_ton;
                cur_res->vr_res.freight_ton = NULL;
            }
//            cout << " " << cur_res->vr_res.name_score << endl;
            carRes.vehicle_score = cur_res->vr_res.name_score;
            // 车牌
            if (cur_res->vp_res.rect.height_ != 0 && cur_res->vp_res.rect.width_ != 0) {
                cout << "车牌位置: " << cur_res->vp_res.rect.left_ << " " << cur_res->vp_res.rect.top_ << " "
                     << cur_res->vp_res.rect.width_ << " " << cur_res->vp_res.rect.height_ << endl;
                carRes.carPlateRect.setRect(cur_res->vp_res.rect.left_, cur_res->vp_res.rect.top_,
                                            cur_res->vp_res.rect.width_, cur_res->vp_res.rect.height_);
                carRes.carPlateRectScore = cur_res->vp_res.detectScore;
                std::string _carPlate;
                for (int m = 0; m < 7; m++) {
                    printf("%s", cur_res->vp_res.recg[m].character);
                    _carPlate.append(cur_res->vp_res.recg[m].character);
                    delete[] cur_res->vr_res.vehicle_brand;
                    cur_res->vr_res.vehicle_brand = NULL;
                }
                carRes.carPlate = const_cast<char *>(_carPlate.c_str());
                carRes.carPlateRectScore = cur_res->vp_res.numScore;
                carRes.carPlatetype = cur_res->vp_res.type;
                if (cur_res->vr_res.vehicle_subbrand != NULL) {
                    cout << "  车辆子品牌 - " << cur_res->vr_res.vehicle_subbrand << endl;
                    carRes.vehicle_subbrand = cur_res->vr_res.vehicle_subbrand;
//                carRes.vehicle_subbrand = cur_res->vr_res.vehicle_subbrand;
                    delete[] cur_res->vr_res.vehicle_subbrand;
                    cur_res->vr_res.vehicle_subbrand = NULL;
                }
                if (cur_res->vr_res.vehicle_issue_year != NULL) {
                    cout << "  车辆年款 - " << cur_res->vr_res.vehicle_issue_year << endl;
                    carRes.vehicle_issue_year = cur_res->vr_res.vehicle_issue_year;
                    delete[] cur_res->vr_res.vehicle_issue_year;
                    cur_res->vr_res.vehicle_issue_year = NULL;
                }
                if (cur_res->vr_res.vehicle_type != NULL) {
                    cout << "  车辆类型 - " << cur_res->vr_res.vehicle_type << endl;
                    carRes.vehicle_type = cur_res->vr_res.vehicle_type;
                    delete[] cur_res->vr_res.vehicle_type;
                    cur_res->vr_res.vehicle_type = NULL;
                }
                if (cur_res->vr_res.freight_ton != NULL) {
                    cout << "  货车吨级 - " << cur_res->vr_res.freight_ton << endl;
                    carRes.freight_ton = cur_res->vr_res.freight_ton;
                    delete[] cur_res->vr_res.freight_ton;
                    cur_res->vr_res.freight_ton = NULL;
                }
//            cout << " " << cur_res->vr_res.name_score << endl;
                carRes.vehicle_score = cur_res->vr_res.name_score;
            }
            if(m_param.vehicle_pendant_det_recg_config == SY_CONFIG_OPEN) {
                // 车牌
                if (cur_res->vp_res.rect.height_ != 0 && cur_res->vp_res.rect.width_ != 0) {
                    cout << "车牌位置: " << cur_res->vp_res.rect.left_ << " " << cur_res->vp_res.rect.top_ << " "
                         << cur_res->vp_res.rect.width_ << " " << cur_res->vp_res.rect.height_ << endl;
                    carRes.carPlateRect.setRect(cur_res->vp_res.rect.left_, cur_res->vp_res.rect.top_,
                                                cur_res->vp_res.rect.width_, cur_res->vp_res.rect.height_);
                    carRes.carPlateRectScore = cur_res->vp_res.detectScore;
                    std::string _carPlate;
                    for (int m = 0; m < 7; m++) {
                        printf("%s", cur_res->vp_res.recg[m].character);
                        _carPlate.append(cur_res->vp_res.recg[m].character);
                    }
                    carRes.carPlate = const_cast<char *>(_carPlate.c_str());
                    carRes.carPlateRectScore = cur_res->vp_res.numScore;
                    carRes.carPlatetype = cur_res->vp_res.type;
//                printf(" numScore = %.2f, detectScore = %.2f\n", cur_res->vp_res.numScore, cur_res->vp_res.detectScore);
                }
            }
        };
            break;