From a69649804af1cdef936258aab4a5f719cdb32154 Mon Sep 17 00:00:00 2001
From: pansen <pansen626@sina.com>
Date: 星期二, 09 四月 2019 20:58:19 +0800
Subject: [PATCH] 添加vpt封装

---
 QiaoJiaSystem/VptServer/CMakeLists.txt       |  103 +++++++
 QiaoJiaSystem/VptServer/mainAssist.h         |  125 ++++++++
 QiaoJiaSystem/VptServer/VptDetectWrapper.cpp |  174 ++++++++++++
 QiaoJiaSystem/CMakeLists.txt                 |    2 
 QiaoJiaSystem/VptServer/VptDetectWrapper.h   |  180 ++++++++++++
 QiaoJiaSystem/VptServer/main.cpp             |  201 ++++++++++++++
 6 files changed, 784 insertions(+), 1 deletions(-)

diff --git a/QiaoJiaSystem/CMakeLists.txt b/QiaoJiaSystem/CMakeLists.txt
index 1db175e..d9aa5d9 100644
--- a/QiaoJiaSystem/CMakeLists.txt
+++ b/QiaoJiaSystem/CMakeLists.txt
@@ -36,4 +36,4 @@
 add_subdirectory(VideoToImageMulth)
 #add_subdirectory(GB28181DecoderModel)
 #add_subdirectory(FaceSearchDbWithImg)
-
+add_subdirectory(VptServer)
diff --git a/QiaoJiaSystem/VptServer/CMakeLists.txt b/QiaoJiaSystem/VptServer/CMakeLists.txt
new file mode 100644
index 0000000..6b4a0d4
--- /dev/null
+++ b/QiaoJiaSystem/VptServer/CMakeLists.txt
@@ -0,0 +1,103 @@
+cmake_minimum_required(VERSION 3.5)
+
+STRING(REGEX REPLACE ".*/(.*)" "\\1" CURRENT_FOLDER ${CMAKE_CURRENT_SOURCE_DIR})
+project(${CURRENT_FOLDER})
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_BUILD_TYPE debug)
+add_compile_options(-fPIC)
+#add_definitions(-DGLOG)
+#add_definitions(-DTestCode)
+add_definitions(-DDEBUG_ERR -DDEBUG_INFO -fpermissive)
+
+set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../build)
+set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../build)
+
+# packages
+#find_package(CUDA)
+
+#include_directories ("${PROJECT_SOURCE_DIR}")
+
+# nvcc flags
+#set(CUDA_NVCC_FLAGS -O3;-G;-g)
+#set(CUDA_NVCC_FLAGS -gencode arch=compute_20,code=sm_20;-G;-g)
+#set(CUDA_NVCC_FLAGS -gencode arch=compute_52,code=sm_52;-G;-g)
+
+#file(GLOB_RECURSE CURRENT_HEADERS *.h *.hpp *.cuh)
+#file(GLOB CURRENT_SOURCES *.cpp *.cu)
+
+#source_group("Include" FILES ${CURRENT_HEADERS})
+#source_group("Source" FILES ${CURRENT_SOURCES})
+
+#cuda_add_executable(${PROJECT_NAME} ${CURRENT_HEADERS} ${CURRENT_SOURCES})
+#cuda_add_library(${PROJECT_NAME} SHARED ${CURRENT_HEADERS} ${CURRENT_SOURCES})
+#cuda_add_library(${PROJECT_NAME} STATIC ${CURRENT_HEADERS} ${CURRENT_SOURCES})
+
+SET(SOURCES
+    VptDetectWrapper.cpp
+    #    GlobalSignalWaitLock.hpp
+    )
+
+SET(LIBS
+    avformat
+    avcodec
+    swresample
+    swscale
+    avutil
+    bz2 dl z
+
+    opencv_world
+
+    cuda
+    cudnn
+
+    human_car_parsing
+    human_parsing
+    utools
+    vehicle_color
+    vehicle_plate_dr
+    vehicle_recognition
+    vpt_det
+    vpt_pic
+
+    glog
+    pthread
+    )
+
+include_directories(
+    ../../../BasicPlatForm/libs/Vpts/include
+
+    #glog
+    ../../../BasicPlatForm/libs/glog/include
+
+    ../../../BasicPlatForm/libs/opencv/include
+    ../../../BasicPlatForm/libs/ffmpeg/include
+    ../../../BasicPlatForm/basic/util/opencv/
+    ../../../BasicPlatForm/basic/debug/
+    ../../../BasicPlatForm/
+    ../../../BasicPlatForm/basic/pipe_element/ffmpeg/
+
+    /usr/include/x86_64-linux-gnu/qt5
+
+)
+
+link_directories(
+    ../../../BasicPlatForm/libs/Vpts/lib
+    #glog
+    /usr/local/lib/
+    /usr/local/cuda/lib64/
+    #glog
+    ../../../BasicPlatForm/libs/glog/lib
+    ../../../BasicPlatForm/libs/opencv/lib
+    ../../../BasicPlatForm/libs/ffmpeg/lib
+
+)
+
+add_executable(${PROJECT_NAME}
+    #    testmain.cpp
+    main.cpp
+    ${SOURCES}
+    )
+
+target_link_libraries(${PROJECT_NAME}
+    ${LIBS}
+    )
diff --git a/QiaoJiaSystem/VptServer/VptDetectWrapper.cpp b/QiaoJiaSystem/VptServer/VptDetectWrapper.cpp
new file mode 100644
index 0000000..98fbfcb
--- /dev/null
+++ b/QiaoJiaSystem/VptServer/VptDetectWrapper.cpp
@@ -0,0 +1,174 @@
+//
+// Created by ps on 19-4-9.
+//
+
+#include <basic/debug/Debug.h>
+#include "VptDetectWrapper.h"
+
+VptDetectWrapper::VptDetectWrapper() {
+    init();
+}
+
+VptDetectWrapper::VptDetectWrapper(int _gpuIdx, string _dbFilePath) : m_gpuIdx(_gpuIdx),
+                                                                      m_dbFilePath(_dbFilePath) {
+    init();
+}
+
+VptDetectWrapper::~VptDetectWrapper() {
+    vpt_pic_release(&m_handle);
+}
+
+void VptDetectWrapper::init() {
+    m_param.mode = DEVICE_GPU;
+    m_param.gpuid = m_gpuIdx;
+    m_param.hp_recg_config = SY_CONFIG_OPEN;
+    m_param.hcp_recg_config = SY_CONFIG_OPEN;
+    m_param.vehicle_color_config = SY_CONFIG_OPEN;
+    m_param.vehicle_recg_config = SY_CONFIG_OPEN;
+    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;
+    vpt_pic_init(&m_handle, m_param);
+}
+
+void VptDetectWrapper::process_image(cv::Mat &_img) {
+    m_results.clear();
+
+    sy_img img;
+    img.set_data(_img.cols, _img.rows, _img.channels(), _img.data);
+
+    vptpic_result result;
+    result.info = new vptobj_info[MAX_DET_COUNT];
+
+    int ret = vpt_pic_process(m_handle, img, &result);
+
+
+    int size = result.count;
+    for (int i = 0; i < size; i++) {
+
+        char str_i[100];
+        int colorIndex = result.info[i].obj_index;
+
+        if (colorIndex < 0 || colorIndex >= 9)continue;
+//        sprintf(str_i, "%s:%.2f", type[colorIndex].c_str(), result.info[i].obj_score);
+
+//        rectangle(process_image,
+//                  cvPoint(result.info[i].obj_rect.left_ - 5, result.info[i].obj_rect.top_ - 15),
+//                  cvPoint(result.info[i].obj_rect.left_ + result.info[i].obj_rect.width_ + 5,
+//                          result.info[i].obj_rect.top_ + result.info[i].obj_rect.height_ + 10),
+//                  cv::Scalar(color[colorIndex][0], color[colorIndex][1], color[colorIndex][2]), 3, 1);
+//
+//        cv::putText(process_image, str_i,
+//                    cv::Point(result.info[i].obj_rect.left_, result.info[i].obj_rect.top_),
+//                    fontFace, fontScale,
+//                    cv::Scalar(color[colorIndex][0], color[colorIndex][1], color[colorIndex][2]), thickness, 8);
+
+        //杈撳嚭浜屾灞炴�у垎鏋愮粨鏋�
+        if (result.info[i].analysis_res != NULL) {
+            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 {}
+    }
+    DBG(m_results.size());
+}
+
+VptDetectResults VptDetectWrapper::changeAnalysisRes(int index, void *result) {
+
+    VptDetectResults vptDetectResults;
+    vptDetectResults.sdkDetectType = static_cast<SDKDetectType>(index);
+//    vptDetectResults.vptDetectRes.carDetectRes;
+    switch (vptDetectResults.sdkDetectType) {
+        case SDKDetectType::person : {
+            hp_res *cur_res = (hp_res *) result;
+            memcpy(vptDetectResults.vptDetectRes.personDetectRes.res_objs, cur_res->res_objs,
+                   sizeof(classfy_boj_res) * HP_FIR_INDEX_SIZE);
+            //test code
+            for (int i = 0; i < HP_FIR_INDEX_SIZE; i++) {
+                int resIndex = vptDetectResults.vptDetectRes.personDetectRes.res_objs[i].res_index;
+                cout << vptDetectResults.vptDetectRes.personDetectRes.res_objs[i].res_prob << "  ";
+                cout << HpResStr[i][resIndex] << " " << endl;
+            }
+            //test code end
+        };
+            break;
+        case SDKDetectType::bike:
+        case SDKDetectType::motor : {
+            hcp_res *cur_res = (hcp_res *) result;
+            memcpy(vptDetectResults.vptDetectRes.perRideCarDetectRes.res_objs, cur_res->res_objs,
+                   sizeof(classfy_boj_res) * HCP_FIR_INDEX_SIZE);
+            for (int i = 0; i < HCP_FIR_INDEX_SIZE; i++) {
+                int resIndex = vptDetectResults.vptDetectRes.perRideCarDetectRes.res_objs[i].res_index;
+                cout << vptDetectResults.vptDetectRes.perRideCarDetectRes.res_objs[i].res_prob << "  ";
+                cout << HpResStr[i][resIndex] << " " << endl;
+            }
+            cout << endl << endl;
+        };
+            break;
+        case SDKDetectType::car :
+        case SDKDetectType::bigbus :
+        case SDKDetectType::lorry :
+        case SDKDetectType::midibus : {
+            vehicle_res *cur_res = (vehicle_res *) result;
+            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 (cur_res->vr_res.vehicle_brand != NULL) {
+//                cout << "  杞﹁締鍝佺墝 - " << cur_res->vr_res.vehicle_brand << endl;
+                carRes.vehicle_brand = std::move(string(cur_res->vr_res.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 = std::move(string(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 = std::move(string(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 = std::move(string(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 = std::move(string(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;
+
+                for (int m = 0; m < 7; m++) {
+//                    printf("%s", cur_res->vp_res.recg[m].character);
+                    carRes.carPlate.append(cur_res->vp_res.recg[m].character);
+                }
+                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;
+    }
+    return vptDetectResults;
+}
+
diff --git a/QiaoJiaSystem/VptServer/VptDetectWrapper.h b/QiaoJiaSystem/VptServer/VptDetectWrapper.h
new file mode 100644
index 0000000..a36ea73
--- /dev/null
+++ b/QiaoJiaSystem/VptServer/VptDetectWrapper.h
@@ -0,0 +1,180 @@
+//
+// Created by ps on 19-4-9.
+//
+
+#ifndef QIAOJIASYSTEM_VPTDETECTWRAPPER_H
+#define QIAOJIASYSTEM_VPTDETECTWRAPPER_H
+
+#include <libs/Vpts/include/vpt_pic_header.h>
+#include <libs/Vpts/include/vpt_pic.h>
+#include <opencv2/opencv.hpp>
+#include <CvMath.hpp>
+#include "mainAssist.h"
+
+//鍒嗙被缁撴灉缁撴瀯浣�
+//struct ClassfyObjRes {
+//    int res_index;      //鍒嗙被缁撴灉
+//    float res_prob;     //鍒嗙被缁撴瀯浣�
+//};
+
+struct PersonDetectRes {
+//    std::string head;
+//    std::string head_color;
+//    std::string eye;
+//    std::string mouth;
+//    std::string up;
+//    std::string up_color;
+//    std::string clothing_text;
+//    std::string down;
+//    std::string down_color;
+//    std::string bao;
+//    std::string sex;
+//    std::string age;
+//    std::string viewpoint;
+//    std::string dasan;
+//    std::string child;
+//    std::string personstate;
+    classfy_boj_res res_objs[HP_FIR_INDEX_SIZE];          //鍒嗙被缁撴灉
+};
+
+struct PerRideCarDetectRes {
+//    std::string hcp_up;
+//    std::string hcp_up_color;
+//    std::string hcp_down;
+//    std::string hcp_down_color;
+//    std::string bao;
+//    std::string hcp_bag_color;
+//    std::string hcp_head;
+//    std::string hcp_clothing_text;
+//    std::string hcp_sex;
+//    std::string hcp_figure;
+//    std::string hcp_nationality;
+//    std::string hcp_age;
+//    std::string hcp_eye;
+//    std::string hcp_mouth;
+//    std::string hcp_weibo;
+//    std::string hcp_carColor;
+//    std::string hcp_orient;
+//    std::string hcp_drivenum;
+//    std::string hcp_dasan;
+//    std::string hcp_take;
+
+    classfy_boj_res res_objs[HCP_FIR_INDEX_SIZE];          //鍒嗙被缁撴灉
+};
+
+struct CarDetectRes {
+    //杞﹀瀷璇嗗埆缁撴灉
+    std::string vehicle_brand;              //杞﹁締鍝佺墝
+    std::string vehicle_subbrand;           //杞﹁締瀛愬搧鐗�
+    std::string vehicle_issue_year;         //杞﹁締骞存
+    std::string vehicle_type;               //杞﹁締绫诲瀷
+    std::string freight_ton;                //璐ц溅鍚ㄧ骇
+    float vehicle_score;                    //杞﹀瀷璇嗗埆缃俊搴�
+
+    //杞﹂鑹茶瘑鍒粨鏋�
+    ColorLabel colorLabel;                  //杞﹂鑹�
+    float colorLabelProb;                   //杞﹂鑹茬疆淇″害
+
+    //杞︾墝妫�娴嬬粨鏋�
+    BskRect carPlateRect;                   //杞︾墝鍖哄煙
+    float carPlateRectScore;                //杞︾墝鍖哄煙缃俊搴�
+    std::string carPlate;                   //杞︾墝
+    float carPlateScore;                    //杞︾墝缃俊搴�
+    int carPlatetype;
+};
+
+union VPTDetectRes {
+
+    struct TestVPTDetectRes {
+        int i;
+    };
+
+    VPTDetectRes() : testVPTDetectRes(TestVPTDetectRes()) {
+
+    }
+
+    ~VPTDetectRes() {
+
+    }
+
+    TestVPTDetectRes testVPTDetectRes;
+    PersonDetectRes personDetectRes;
+    PerRideCarDetectRes perRideCarDetectRes;
+    CarDetectRes carDetectRes;
+};
+
+enum class SDKDetectType {
+    test = -1,
+    person = 0,     // PersonDetectRes
+    bike,           // PerRideCarDetectRes
+    motor,          // PerRideCarDetectRes
+    tricycle,       //
+    car,            // CarDetectRes
+    bigbus,         // CarDetectRes
+    lorry,          // CarDetectRes
+    tractor,        //
+    midibus         // CarDetectRes
+};
+
+struct VptDetectResults {
+public:
+    VptDetectResults() {}
+
+    virtual ~VptDetectResults() {}
+
+    VptDetectResults(const VptDetectResults &src) {
+
+        this->sdkDetectType = src.sdkDetectType;
+        this->bskRect = src.bskRect;
+
+        switch (src.sdkDetectType) {
+            case SDKDetectType::person :
+                this->vptDetectRes.personDetectRes = src.vptDetectRes.personDetectRes;
+                break;
+            case SDKDetectType::bike:
+            case SDKDetectType::motor :
+                this->vptDetectRes.perRideCarDetectRes = src.vptDetectRes.perRideCarDetectRes;
+                break;
+            case SDKDetectType::car :
+            case SDKDetectType::bigbus :
+            case SDKDetectType::lorry :
+            case SDKDetectType::midibus :
+                this->vptDetectRes.carDetectRes = src.vptDetectRes.carDetectRes;
+                break;
+        }
+    }
+
+    SDKDetectType sdkDetectType;
+    VPTDetectRes vptDetectRes;
+    BskRect bskRect;
+};
+
+class VptDetectWrapper {
+public:
+    VptDetectWrapper();
+
+    VptDetectWrapper(int _gpuIdx, string _dbFilePath);
+
+    virtual ~VptDetectWrapper();
+
+
+    void process_image(cv::Mat &_img);
+
+private:
+
+    void init();
+
+    VptDetectResults changeAnalysisRes(int index, void *result);
+
+private:
+    list<VptDetectResults> m_results;
+
+    void *m_handle;
+    vptpic_param m_param;
+
+    int m_gpuIdx{0};
+    std::string m_dbFilePath{"CarBodyFeature.db"};
+};
+
+
+#endif //QIAOJIASYSTEM_VPTDETECTWRAPPER_H
diff --git a/QiaoJiaSystem/VptServer/main.cpp b/QiaoJiaSystem/VptServer/main.cpp
new file mode 100644
index 0000000..91e0087
--- /dev/null
+++ b/QiaoJiaSystem/VptServer/main.cpp
@@ -0,0 +1,201 @@
+锘�#include "vpt_pic.h"
+//#include <highgui.h>
+#include <opencv2/opencv.hpp>
+#include <iostream>
+#include <fstream>
+#include <string>
+#include "sy_common.h"
+#include "mainAssist.h"
+
+#ifdef _WIN32
+#include<windows.h>
+#else
+
+#include <sys/time.h>
+#include <basic/util/app/AppUtil.h>
+
+#endif
+
+using namespace std;
+
+
+void printfAnalysisRes(int index, void *result);
+
+int main(int argc, char **argv) {
+    string imgpath;
+
+    if (argc < 2) {
+        printf("Parameter number not right.\n");
+        return 0;
+    } else {
+        imgpath = argv[1];
+    }
+
+    printf("SDK Version: %s\n", vpt_pic_get_version());
+
+    CvFont font;
+    cvInitFont(&font, CV_FONT_HERSHEY_COMPLEX, 1.0, 1.0, 0, 1, 3);
+    int fontFace = CV_FONT_HERSHEY_COMPLEX;
+    double fontScale = 1;
+    int thickness = 2;
+
+    void *handle;
+    vptpic_param param;
+    param.mode = DEVICE_GPU;
+    param.gpuid = 0;
+
+    param.hp_recg_config = SY_CONFIG_OPEN;
+    param.hcp_recg_config = SY_CONFIG_OPEN;
+    param.vehicle_color_config = SY_CONFIG_OPEN;
+    param.vehicle_recg_config = SY_CONFIG_OPEN;
+    param.vehicle_pendant_det_recg_config = SY_CONFIG_OPEN;
+
+    param.dbPath = "CarBodyFeature.db";
+    param.log = SY_CONFIG_OPEN;
+
+    vpt_pic_init(&handle, param);
+
+    cv::VideoCapture capture;
+    capture.open(imgpath);
+
+    cv::Mat process_image;
+    capture >> process_image;//璇诲嚭姣忎竴甯х殑鍥惧儚
+
+    cv::Mat image;
+
+    while (!process_image.empty()) {
+
+        process_image.copyTo(image);
+        sy_img img;
+        img.set_data(image.cols, image.rows, image.channels(), image.data);
+
+        vptpic_result result;
+        result.info = new vptobj_info[MAX_DET_COUNT];
+        int ret = vpt_pic_process(handle, img, &result);
+
+        for (int i = 0; i < result.count; i++) {
+            char str_i[100];
+            int colorIndex = result.info[i].obj_index;
+            if (colorIndex < 0 || colorIndex >= 9)continue;
+            sprintf(str_i, "%s:%.2f", type[colorIndex].c_str(), result.info[i].obj_score);
+
+            rectangle(process_image,
+                      cvPoint(result.info[i].obj_rect.left_ - 5, result.info[i].obj_rect.top_ - 15),
+                      cvPoint(result.info[i].obj_rect.left_ + result.info[i].obj_rect.width_ + 5,
+                              result.info[i].obj_rect.top_ + result.info[i].obj_rect.height_ + 10),
+                      cv::Scalar(color[colorIndex][0], color[colorIndex][1], color[colorIndex][2]), 3, 1);
+
+            cv::putText(process_image, str_i,
+                        cv::Point(result.info[i].obj_rect.left_, result.info[i].obj_rect.top_),
+                        fontFace, fontScale,
+                        cv::Scalar(color[colorIndex][0], color[colorIndex][1], color[colorIndex][2]), thickness, 8);
+
+            //杈撳嚭浜屾灞炴�у垎鏋愮粨鏋�
+            printfAnalysisRes(colorIndex, result.info[i].analysis_res);
+        }
+
+#ifdef _MSC_VER
+        cv::imshow("res", image);
+        cv::waitKey(0);
+#else
+        char svpath[1024];
+        memset(svpath, 0, sizeof(svpath));
+        std::string strNewTime2 = AppUtil::getTimeUSecString();
+        strNewTime2.append(".jpg");
+
+        sprintf(svpath, "vpt_res/%s", strNewTime2.c_str());
+        imwrite(svpath, process_image);
+#endif
+        //release source
+        if (result.info != NULL) {
+            for (int i = 0; i < MAX_DET_COUNT; i++) {
+                if (result.info[i].analysis_res != NULL) {
+                    delete result.info[i].analysis_res;
+                    result.info[i].analysis_res = NULL;
+                }
+            }
+            delete[] result.info;
+            result.info = NULL;
+        }
+
+        capture >> process_image;//璇诲嚭姣忎竴甯х殑鍥惧儚
+    }
+
+
+    vpt_pic_release(&handle);
+
+    return 0;
+}
+
+
+void printfAnalysisRes(int index, void *result) {
+    if (index == 0 && result != NULL)    //琛屼汉浜屾灞炴�у垎鏋愮粨鏋�
+    {
+        hp_res *cur_res = (hp_res *) result;
+
+        for (int i = 0; i < HP_FIR_INDEX_SIZE; i++) {
+            int resIndex = cur_res->res_objs[i].res_index;
+            cur_res->res_objs[i].res_prob;
+            cout << HpResStr[i][resIndex] << " " << endl;
+
+        }
+        cout << endl << endl;
+    } else if ((index == 1 || index == 2) && result != NULL)    //琛屼汉浜屾灞炴�у垎鏋愮粨鏋�
+    {
+        hcp_res *cur_res = (hcp_res *) result;
+
+        for (int i = 0; i < HCP_FIR_INDEX_SIZE; i++) {
+            int resIndex = cur_res->res_objs[i].res_index;
+            cur_res->res_objs[i].res_prob;
+//            cout << HcpResStr[i][resIndex] << " " << endl;
+        }
+        cout << endl << endl;
+    } else if (index > 3 && index != 7 && result != NULL)    //杞﹁締浜屾灞炴�у垎鏋愮粨鏋滆緭鍑�
+    {
+        vehicle_res *cur_res = (vehicle_res *) result;
+
+        cout << "杞﹂鑹�: " << colorLabel[cur_res->vc_res.res_index] << " " << cur_res->vc_res.res_prob << endl;
+
+        cout << "杞﹀瀷璇嗗埆: " << endl;
+        if (cur_res->vr_res.vehicle_brand != NULL) {
+            cout << "  杞﹁締鍝佺墝 - " << cur_res->vr_res.vehicle_brand << endl;
+            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;
+            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;
+            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;
+            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;
+            delete[] cur_res->vr_res.freight_ton;
+            cur_res->vr_res.freight_ton = NULL;
+        }
+        cout << " " << cur_res->vr_res.name_score << endl;
+
+
+        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;
+
+            for (int m = 0; m < 7; m++) {
+                printf("%s", cur_res->vp_res.recg[m].character);
+            }
+            printf(" numScore = %.2f, detectScore = %.2f\n", cur_res->vp_res.numScore, cur_res->vp_res.detectScore);
+        }
+
+        cout << endl;
+    }
+}
diff --git a/QiaoJiaSystem/VptServer/mainAssist.h b/QiaoJiaSystem/VptServer/mainAssist.h
new file mode 100644
index 0000000..7f0835f
--- /dev/null
+++ b/QiaoJiaSystem/VptServer/mainAssist.h
@@ -0,0 +1,125 @@
+锘�#include <string>
+
+#ifndef QIAOJIASYSTEM_MAINASSIST_H
+#define QIAOJIASYSTEM_MAINASSIST_H
+using namespace std;
+
+//琛屼汉浜屾灞炴�у垎鏋愮粨鏋�
+static string head[5] = {"闀垮彂", "鐭彂", "鍏夊ご", "甯藉瓙", "鍏朵粬"};
+static string head_color[9] = {"榛�", "鐧�", "鐏�", "绾�", "钃�", "榛�", "缁�", "澶氳壊", "鍏朵粬"};
+static string eye[2] = {"鏈埓鐪奸暅", "鎴寸溂闀�"};
+static string mouth[2] = {"鏈埓鍙g僵", "鎴村彛缃�"};
+static string up[9] = {"T鎭�", "琛~", "姣涜。", "缇界粧鏈�", "澶ц。", "澶栧", "杩炶。瑁�", "鏃犱笂琛�", "鍏朵粬"};
+static string up_color[9] = {"榛�", "鐧�", "鐏�", "绾�", "钃�", "榛�", "缁�", "澶氳壊", "鍏朵粬"};
+static string clothing_text[5] = {"绾壊", "纰庤姳", "鏉$汗", "鏍煎瓙", "鍏朵粬"};
+static string down[6] = {"闀胯¥", "鐭¥", "闀胯", "鐭", "杩炶。瑁�", "鍏朵粬"};
+static string down_color[9] = {"榛�", "鐧�", "鐏�", "绾�", "钃�", "榛�", "缁�", "澶氳壊", "鍏朵粬"};
+static string bao[5] = {"鏃犲寘", "鍗曡偐鍖�", "鑳屽寘/鍙岃偐鍖�", "鎵嬫彁鍖�/鎵嬫彁鐗�", "鎷夋潌绠�/灏忔帹杞�"};
+static string sex[3] = {"鐢�", "濂�", "鍏朵粬"};
+static string age[5] = {"灏忓", "闈掑勾", "涓勾", "鑰佸勾", "鍏朵粬"};
+static string viewpoint[3] = {"姝i潰", "鑳岄潰", "渚ч潰"};
+static string dasan[2] = {"鏈墦浼�", "鎵撲紴"};
+static string child[2] = {"鏈姳灏忓", "鎶卞皬瀛�"};
+static string personstate[5] = {"琛岃蛋", "濂旇窇", "韫插潗", "鎺ㄨ溅", "鍏朵粬"};
+
+static string HpResStr[16][9] = {
+    {"闀垮彂",   "鐭彂",  "鍏夊ご",     "甯藉瓙",      "鍏朵粬"},
+    {"榛�",    "鐧�",   "鐏�",      "绾�",       "钃�",   "榛�",  "缁�",   "澶氳壊",  "鍏朵粬"},
+    {"鏈埓鐪奸暅", "鎴寸溂闀�"},
+    {"鏈埓鍙g僵", "鎴村彛缃�"},
+    {"T鎭�",   "琛~",  "姣涜。",     "缇界粧鏈�",     "澶ц。",  "澶栧", "杩炶。瑁�", "鏃犱笂琛�", "鍏朵粬"},
+    {"榛�",    "鐧�",   "鐏�",      "绾�",       "钃�",   "榛�",  "缁�",   "澶氳壊",  "鍏朵粬"},
+    {"绾壊",   "纰庤姳",  "鏉$汗",     "鏍煎瓙",      "鍏朵粬"},
+    {"闀胯¥",   "鐭¥",  "闀胯",     "鐭",      "杩炶。瑁�", "鍏朵粬"},
+    {"榛�",    "鐧�",   "鐏�",      "绾�",       "钃�",   "榛�",  "缁�",   "澶氳壊",  "鍏朵粬"},
+    {"鏃犲寘",   "鍗曡偐鍖�", "鑳屽寘/鍙岃偐鍖�", "鎵嬫彁鍖�/鎵嬫彁鐗�", "鎷夋潌绠�/灏忔帹杞�"},
+    {"鐢�",    "濂�",   "鍏朵粬"},
+    {"灏忓",   "闈掑勾",  "涓勾",     "鑰佸勾",      "鍏朵粬"},
+    {"姝i潰",   "鑳岄潰",  "渚ч潰"},
+    {"鏈墦浼�",  "鎵撲紴"},
+    {"鏈姳灏忓", "鎶卞皬瀛�"},
+    {"琛岃蛋",   "濂旇窇",  "韫插潗",     "鎺ㄨ溅",      "鍏朵粬"}
+};
+
+
+//浜洪獞杞︿簩娆″睘鎬у垎鏋愮粨鏋�
+static string hcp_up[12] = {"T鎭�", "椹敳/鍚婂甫/鑳屽績", "琛~", "瑗挎湇", "姣涜。", "鐨。/澶瑰厠", "缇界粧鏈�", "澶ц。/椋庤。", "澶栧", "杩炶。瑁�", "鏃犱笂琛�", "鍏朵粬"};
+static string hcp_up_color[12] = {"榛�", "鐧�", "绾�", "榛�", "钃�", "缁�", "绱�", "妫�", "鐏�", "姗�", "澶氳壊", "鍏朵粬"};
+static string hcp_down[6] = {"闀胯¥", "鐭¥", "闀胯", "鐭", "杩炶。瑁�", "鍏朵粬"};
+static string hcp_down_color[12] = {"榛�", "鐧�", "绾�", "榛�", "钃�", "缁�", "绱�", "妫�", "鐏�", "姗�", "澶氳壊", "鍏朵粬"};
+static string hcp_bao[5] = {"鏃犲寘", "鍗曡偐鍖�", "鍙岃偐鍖�", "鍏朵粬", "閽卞寘"};
+static string hcp_bag_color[12] = {"榛�", "鐧�", "绾�", "榛�", "钃�", "缁�", "绱�", "妫�", "鐏�", "姗�", "澶氳壊", "鍏朵粬"};
+static string hcp_head[6] = {"闀垮彂", "鐭彂", "鍏夊ご", "甯藉瓙", "澶寸洈", "鍏朵粬"};
+static string hcp_clothing_text[5] = {"绾壊", "纰庤姳", "鏉$汗", "鏍煎瓙", "鍏朵粬"};
+static string hcp_sex[3] = {"鐢�", "濂�", "涓嶆槑"};
+static string hcp_figure[3] = {"鑳�", "鐦�", "涓�"};
+static string hcp_nationality[5] = {"姹夋棌", "缁存棌", "榛戜汉", "鐧戒汉", "鍏朵粬"};
+static string hcp_age[6] = {"骞煎効", "鍎跨", "闈掑勾", "涓勾", "鑰佸勾", "涓嶆槑"};
+static string hcp_eye[4] = {"姝e父鐪肩潧", "鐪奸暅", "澧ㄩ暅", "鍏朵粬"};
+static string hcp_mouth[3] = {"姝e父鍢�", "鎴村彛缃�", "鍏朵粬"};
+static string hcp_weibo[3] = {"鏃犲洿宸�", "鏅�氬洿宸�", "鍖呭ご鍥村肪"};
+static string hcp_carColor[13] = {"榛�", "鐧�", "绾�", "榛�", "钃�", "缁�", "绱�", "妫�", "鐏�", "姗�", "澶氳壊", "鍏朵粬", "閾�"};
+static string hcp_orient[3] = {"姝i潰", "鑳岄潰", "渚ч潰"};
+static string hcp_drivenum[4] = {"0浜�", "1浜�", "2浜�", "鏇村浜�"};
+static string hcp_dasan[2] = {"鏃�", "鏈�"};
+static string hcp_take[2] = {"鏃�", "鐗╁搧"};
+
+static string HcpResStr[20][13] = {
+    {"T鎭�",   "椹敳/鍚婂甫/鑳屽績", "琛~",  "瑗挎湇", "姣涜。",  "鐨。/澶瑰厠", "缇界粧鏈�", "澶ц。/椋庤。", "澶栧", "杩炶。瑁�", "鏃犱笂琛�", "鍏朵粬"},
+    {"榛�",    "鐧�",        "绾�",   "榛�",  "钃�",   "缁�",     "绱�",   "妫�",     "鐏�",  "姗�",   "澶氳壊",  "鍏朵粬"},
+    {"闀胯¥",   "鐭¥",       "闀胯",  "鐭", "杩炶。瑁�", "鍏朵粬"},
+    {"榛�",    "鐧�",        "绾�",   "榛�",  "钃�",   "缁�",     "绱�",   "妫�",     "鐏�",  "姗�",   "澶氳壊",  "鍏朵粬"},
+    {"鏃犲寘",   "鍗曡偐鍖�",      "鍙岃偐鍖�", "鍏朵粬", "閽卞寘"},
+    {"榛�",    "鐧�",        "绾�",   "榛�",  "钃�",   "缁�",     "绱�",   "妫�",     "鐏�",  "姗�",   "澶氳壊",  "鍏朵粬"},
+    {"闀垮彂",   "鐭彂",       "鍏夊ご",  "甯藉瓙", "澶寸洈",  "鍏朵粬"},
+    {"绾壊",   "纰庤姳",       "鏉$汗",  "鏍煎瓙", "鍏朵粬"},
+    {"鐢�",    "濂�",        "涓嶆槑"},
+    {"鑳�",    "鐦�",        "涓�"},
+    {"姹夋棌",   "缁存棌",       "榛戜汉",  "鐧戒汉", "鍏朵粬"},
+    {"骞煎効",   "鍎跨",       "闈掑勾",  "涓勾", "鑰佸勾",  "涓嶆槑"},
+    {"姝e父鐪肩潧", "鐪奸暅",       "澧ㄩ暅",  "鍏朵粬"},
+    {"姝e父鍢�",  "鎴村彛缃�",      "鍏朵粬"},
+    {"鏃犲洿宸�",  "鏅�氬洿宸�",     "鍖呭ご鍥村肪"},
+    {"榛�",    "鐧�",        "绾�",   "榛�",  "钃�",   "缁�",     "绱�",   "妫�",     "鐏�",  "姗�",   "澶氳壊",  "鍏朵粬", "閾�"},
+    {"姝i潰",   "鑳岄潰",       "渚ч潰"},
+    {"0浜�",   "1浜�",       "2浜�",  "鏇村浜�"},
+    {"鏃�",    "鏈�"},
+    {"鏃�",    "鐗╁搧"},
+};
+
+
+//杞﹁締浜屾灞炴�у垎鏋愮粨鏋�
+static char colorLabel[14][8] = {"妫�", "姗�", "鐏�", "鐧�", "绮�", "绱�", "绾�", "缁�", "钃�", "閲�", "閾�", "闈�", "榛�", "榛�"};
+
+enum class ColorLabel {
+    Brown = 0,
+    Orange,
+    Gray,
+    White,
+    Powder,
+    Purple,
+    Red,
+    Green,
+    Blue,
+    Gold,
+    Silver,
+    BlueGreen,
+    Yellow,
+    black
+};
+
+
+static const int detectType = 9;
+static std::string type[detectType] = {"person", "bike", "motor", "tricycle", "car", "bigbus", "lorry", "tractor",
+                                       "midibus"};
+static int color[detectType][3] = {{41,  244, 222},
+                                   {255, 128, 0},
+                                   {100, 13,  244},
+                                   {255, 215, 0},
+                                   {18,  220, 87},
+                                   {0,   128, 0},
+                                   {0,   128, 255},
+                                   {255, 0,   0},
+                                   {91,  46,  0}};
+
+#endif //QIAOJIASYSTEM_MAINASSIST_H
\ No newline at end of file

--
Gitblit v1.8.0