static HI_VOID* SAMPLE_SVP_NNIE_ViToVo_IVEColorU8C3Face(HI_VOID* pArgs)
{
#ifdef _REFRASH_PRINT_
auto t1 = std::chrono::steady_clock::now();
auto t2 = std::chrono::steady_clock::now();
#endif
#ifdef _ALL_TIME_PRINT_
float avg_time_all = 0.1f;
#endif
HI_S32 s32Ret;
VIDEO_FRAME_INFO_S stExtFrmInfo;//stExtFrmInfo转为CIF(352x288)分辨率
HI_S32 s32MilliSec = -1;//-1; //阻塞模式
HI_S32 s32VpssGrp = 0;
HI_S32 as32VpssChn[] = {VPSS_CHN0, VPSS_CHN1};//, VPSS_CHN1
int frame_idx = 0;
stExtFrmInfo.u32PoolId = VB_INVALID_POOLID;
int img_width = 416;//960;
int img_height = 416;//544;
HI_S32 resize_size_width = 416;
HI_S32 resize_size_height = 416;
//云天sdk参数设置
arctern::ArcternManager manager(_LICENSE_FILE_);
arctern::ObjectTrackerParameter tracker_parameter;
tracker_parameter.single_tracker_type = "SLK";
tracker_parameter.ive_input_img_width = img_width;
tracker_parameter.ive_input_img_height = img_height;
tracker_parameter.min_obj_size = 31;
tracker_parameter.min_iou_threshold = 0.65;
tracker_parameter.max_time_lost = 5;//lost时间,当过5帧还处于loss就丢掉此status
int tarck_num = 5;
//初始化 face_dect
int result = 0;
arctern::FaceDetectorParameter face_det_param;
result += manager.set_face_det_model(_MODEL_BIN_,face_det_param);
result += manager.setup_optical_flow_tracker_faceFeatMatch01_params(tracker_parameter);
if(!result){
std::cout << "set model SUCCESS: " << result << std::endl;
}
//webserver
WebsockerService ws(8080);
ws.StartService();
//IVE模块
// IVE_IMAGE_S img_8UC1;
// IVE_IMAGE_S img_8UC1_resize;
IVE_IMAGE_S img_8UC3planar_resize;
HI_BOOL bInstant = HI_TRUE;
HI_U32 u32Size = resize_size_width * resize_size_height;
HI_U32 pImage_R[u32Size];
HI_U32 pImage_G[u32Size];
HI_U32 pImage_B[u32Size];
int w_pad = 32;
int h_pad = 200;
// cv::Mat DstImage = cv::Mat::zeros(resize_size_height, resize_size_width, CV_8UC1);
cv::Mat imageB;
std::vector<cv::Mat> mbgr(3);
//时间初始化
#ifdef _NEVER_PRINT_
float avg_time_GetChnFrame = 0.1f;
float avg_time_CreateImage = 0.1f;
float avg_time_DmaImage_8UC1 = 0.1f;
float avg_time_resize_8UC1 = 0.1f;
float avg_time_arctern=0.1f;
float avg_send_text=0.f;
float avg_time_mbgr =0.1f;
float avg_time_memcpy =0.1f;
#endif
//test pading
#ifdef _TEST_PADING_
char* pVBufVirt_Y;
HI_U32 u32Size_img = 0;
HI_U64 phy_addr;
cv::Mat yuvImage;
#endif
// 1.创建目标图
// s32Ret = SAMPLE_COMM_IVE_CreateImage(&img_8UC1, IVE_IMAGE_TYPE_U8C1, 1920, 1080);
// s32Ret = SAMPLE_COMM_IVE_CreateImage(&img_8UC1_resize, IVE_IMAGE_TYPE_U8C1, 416, 416);
s32Ret = SAMPLE_COMM_IVE_CreateImage_8UC3planar(&img_8UC3planar_resize, IVE_IMAGE_TYPE_U8C3_PLANAR, 416, 416);
while (HI_FALSE == s_bNnieStopSignal)
{
#ifdef _REFRASH_PRINT_
std::cout <<"---"<< "frame:" <<frame_idx <<std::endl;
t1 = std::chrono::steady_clock::now();
std::cout << "\r" << std::chrono::duration_cast<std::chrono::milliseconds>(t1 - t2).count() << " ms " << std::flush;
t2 = t1;
#endif
#ifdef _ALL_TIME_PRINT_
struct timeval time_all_0,time_all_1;
gettimeofday(&time_all_0,NULL);
#endif
#ifdef _NEVER_PRINT_
struct timeval t_GetChnFrame_0,t_GetChnFrame_1;
gettimeofday(&t_GetChnFrame_0,NULL);
#endif
s32Ret = HI_MPI_VPSS_GetChnFrame(s32VpssGrp, as32VpssChn[1], &stExtFrmInfo, s32MilliSec); //1 路是小的
if(HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("Error(%#x),HI_MPI_VPSS_GetChnFrame failed, VPSS_GRP(%d), VPSS_CHN(%d)!\n",
s32Ret,s32VpssGrp, as32VpssCh