在.\luckfox_pico_rkmpi_example.7z\luckfox_pico_rkmpi_example\example\luckfox_pico_rtsp_retinaface\src\main.cc文件中增加FPS与人脸框
- int main(int argc, char *argv[]) {
- system("RkLunch-stop.sh");
- RK_S32 s32Ret = 0;
-
- int width = DISP_WIDTH;
- int height = DISP_HEIGHT;
-
- int model_width = 640;
- int model_height = 640;
-
- float scale_x = (float)width / (float)model_width;
- float scale_y = (float)height / (float)model_height;
- int sX,sY,eX,eY;
-
- char fps_text[16];
- float fps = 0;
- memset(fps_text,0,16);
-
- char text[16];
- memset(text,0,16);
-
-
- rknn_app_context_t rknn_app_ctx;
- object_detect_result_list od_results;
-
- const char *model_path = "./model/retinaface.rknn";
- memset(&rknn_app_ctx, 0, sizeof(rknn_app_context_t));
- if(init_retinaface_model(model_path, &rknn_app_ctx) != RK_SUCCESS)
- {
- RK_LOGE("rknn model init fail!");
- return -1;
- }
-
-
- VENC_STREAM_S stFrame;
- stFrame.pstPack = (VENC_PACK_S *)malloc(sizeof(VENC_PACK_S));
- RK_U64 H264_PTS = 0;
- RK_U32 H264_TimeRef = 0;
- VIDEO_FRAME_INFO_S stViFrame;
-
-
- MB_POOL_CONFIG_S PoolCfg;
- memset(&PoolCfg, 0, sizeof(MB_POOL_CONFIG_S));
- PoolCfg.u64MBSize = width * height * 3 ;
- PoolCfg.u32MBCnt = 1;
- PoolCfg.enAllocType = MB_ALLOC_TYPE_DMA;
-
- MB_POOL src_Pool = RK_MPI_MB_CreatePool(&PoolCfg);
- printf("Create Pool success !\n");
-
-
- MB_BLK src_Blk = RK_MPI_MB_GetMB(src_Pool, width * height * 3, RK_TRUE);
-
-
- VIDEO_FRAME_INFO_S h264_frame;
- h264_frame.stVFrame.u32Width = width;
- h264_frame.stVFrame.u32Height = height;
- h264_frame.stVFrame.u32VirWidth = width;
- h264_frame.stVFrame.u32VirHeight = height;
- h264_frame.stVFrame.enPixelFormat = RK_FMT_RGB888;
- h264_frame.stVFrame.u32FrameFlag = 160;
- h264_frame.stVFrame.pMbBlk = src_Blk;
- unsigned char *data = (unsigned char *)RK_MPI_MB_Handle2VirAddr(src_Blk);
- cv::Mat frame(cv::Size(width,height),CV_8UC3,data);
-
-
- RK_BOOL multi_sensor = RK_FALSE;
- const char *iq_dir = "/etc/iqfiles";
- rk_aiq_working_mode_t hdr_mode = RK_AIQ_WORKING_MODE_NORMAL;
-
- SAMPLE_COMM_ISP_Init(0, hdr_mode, multi_sensor, iq_dir);
- SAMPLE_COMM_ISP_Run(0);
-
-
- if (RK_MPI_SYS_Init() != RK_SUCCESS) {
- RK_LOGE("rk mpi sys init fail!");
- return -1;
- }
-
-
- rtsp_demo_handle g_rtsplive = NULL;
- rtsp_session_handle g_rtsp_session;
- g_rtsplive = create_rtsp_demo(554);
- g_rtsp_session = rtsp_new_session(g_rtsplive, "/live/0");
- rtsp_set_video(g_rtsp_session, RTSP_CODEC_ID_VIDEO_H264, NULL, 0);
- rtsp_sync_video_ts(g_rtsp_session, rtsp_get_reltime(), rtsp_get_ntptime());
-
-
- vi_dev_init();
- vi_chn_init(0, width, height);
-
-
- RK_CODEC_ID_E enCodecType = RK_VIDEO_ID_AVC;
- venc_init(0, width, height, enCodecType);
-
- printf("init success\n");
-
- while(1)
- {
-
- h264_frame.stVFrame.u32TimeRef = H264_TimeRef++;
- h264_frame.stVFrame.u64PTS = TEST_COMM_GetNowUs();
- s32Ret = RK_MPI_VI_GetChnFrame(0, 0, &stViFrame, -1);
- if(s32Ret == RK_SUCCESS)
- {
- void *vi_data = RK_MPI_MB_Handle2VirAddr(stViFrame.stVFrame.pMbBlk);
-
- cv::Mat yuv420sp(height + height / 2, width, CV_8UC1, vi_data);
- cv::Mat bgr(height, width, CV_8UC3, data);
- cv::Mat model_bgr(model_height, model_width, CV_8UC3);
-
- cv::cvtColor(yuv420sp, bgr, cv::COLOR_YUV420sp2BGR);
- cv::resize(bgr, frame, cv::Size(width ,height), 0, 0, cv::INTER_LINEAR);
-
- cv::resize(bgr, model_bgr, cv::Size(model_width ,model_height), 0, 0, cv::INTER_LINEAR);
-
- memcpy(rknn_app_ctx.input_mems[0]->virt_addr, model_bgr.data, model_width * model_height * 3);
- inference_retinaface_model(&rknn_app_ctx, &od_results);
-
- sprintf(fps_text,"fps = %.2f",fps);
- cv::putText(frame,fps_text,
- cv::Point(40, 40),
- cv::FONT_HERSHEY_SIMPLEX,1,
- cv::Scalar(0,255,0),2);
-
- for(int i = 0; i < od_results.count; i++)
- {
- if(od_results.count >= 1)
- {
- object_detect_result *det_result = &(od_results.results[i]);
-
- sX = (int)((float)det_result->box.left *scale_x);
- sY = (int)((float)det_result->box.top *scale_y);
- eX = (int)((float)det_result->box.right *scale_x);
- eY = (int)((float)det_result->box.bottom *scale_y);
- printf("%d %d %d %d\n",sX,sY,eX,eY);
- cv::rectangle(frame,cv::Point(sX,sY),
- cv::Point(eX,eY),cv::Scalar(0,255,0),3);
-
- sprintf(text, " %.1f%%", det_result->prop * 100);
- cv::putText(frame,text,cv::Point(sX, sY - 8),
- cv::FONT_HERSHEY_SIMPLEX,1,
- cv::Scalar(0,255,0),2);
-
- }
- }
-
- }
- memcpy(data, frame.data, width * height * 3);
-
-
- RK_MPI_VENC_SendFrame(0, &h264_frame ,-1);
-
-
- s32Ret = RK_MPI_VENC_GetStream(0, &stFrame, -1);
- if(s32Ret == RK_SUCCESS)
- {
- if(g_rtsplive && g_rtsp_session)
- {
-
- void *pData = RK_MPI_MB_Handle2VirAddr(stFrame.pstPack->pMbBlk);
- rtsp_tx_video(g_rtsp_session, (uint8_t *)pData, stFrame.pstPack->u32Len,
- stFrame.pstPack->u64PTS);
- rtsp_do_event(g_rtsplive);
- }
- RK_U64 nowUs = TEST_COMM_GetNowUs();
- fps = (float) 1000000 / (float)(nowUs - h264_frame.stVFrame.u64PTS);
- }
-
-
- s32Ret = RK_MPI_VI_ReleaseChnFrame(0, 0, &stViFrame);
- if (s32Ret != RK_SUCCESS) {
- RK_LOGE("RK_MPI_VI_ReleaseChnFrame fail %x", s32Ret);
- }
- s32Ret = RK_MPI_VENC_ReleaseStream(0, &stFrame);
- if (s32Ret != RK_SUCCESS) {
- RK_LOGE("RK_MPI_VENC_ReleaseStream fail %x", s32Ret);
- }
-
- }
-
-
- RK_MPI_MB_ReleaseMB(src_Blk);
-
- RK_MPI_MB_DestroyPool(src_Pool);
-
- RK_MPI_VI_DisableChn(0, 0);
- RK_MPI_VI_DisableDev(0);
-
- SAMPLE_COMM_ISP_Stop(0);
-
- RK_MPI_VENC_StopRecvFrame(0);
- RK_MPI_VENC_DestroyChn(0);
-
- free(stFrame.pstPack);
-
- if (g_rtsplive)
- rtsp_del_demo(g_rtsplive);
-
- RK_MPI_SYS_Exit();
-
- release_retinaface_model(&rknn_app_ctx);
- return 0;
- }