opencv获取的图像mat 如何实现rstp进行推流
-
因为我看实例rv1106的芯片如果要实现rstp推流就需要转码成h264,opencv获取的图像怎么转,我试过mpp进行转但是不行,根本行不通,有什么方案可以进行实现
您好,这是一个 luckfox-pico 使用 rtsp 推流人脸检测结果图像的例程,您可以参考一下
https://github.com/luckfox-eng29/luckfo ... etinaface/
目前使用的方案是 vi 与 vpss 连接,从 vpss 中获取一帧图像使用 opencv-mobile 处理后使用 RK_MPI_VENC_SendFrame 将帧数据上传到 venc 编码为 H264 再进行 rtsp 推流。
您可以参考这个例程直接创建一个 VIDEO_FRAME_INFO_S 结构体将 opencv-mobile 获取的图像数据拷贝进去再上传到 venc 编码;
本例程使用的 rtsp 推流方案使用的是瑞芯微官方提供的接口,对输入格式有需求也没有开放源码,您也可以采取使用其他 rtspsetver 方案,支持更多格式的输入。
https://github.com/luckfox-eng29/luckfo ... etinaface/
目前使用的方案是 vi 与 vpss 连接,从 vpss 中获取一帧图像使用 opencv-mobile 处理后使用 RK_MPI_VENC_SendFrame 将帧数据上传到 venc 编码为 H264 再进行 rtsp 推流。
您可以参考这个例程直接创建一个 VIDEO_FRAME_INFO_S 结构体将 opencv-mobile 获取的图像数据拷贝进去再上传到 venc 编码;
本例程使用的 rtsp 推流方案使用的是瑞芯微官方提供的接口,对输入格式有需求也没有开放源码,您也可以采取使用其他 rtspsetver 方案,支持更多格式的输入。
另外我想实现给服务器进行推流但是运用到了rtsp_set_server_address(g_rtsplive, "IP"); 这个函数时在编译时报错应该是显示没有定义如下函数
那如果我想要发送指定服务器还需要引进哪些库呢?
Code: Select all
home/alientek/RV1106_ai_demo/luckfox_pico_rtsp_retinaface-master/src/rtsp_opencv.cc: In function 'int main(int, char**)':
/home/alientek/RV1106_ai_demo/luckfox_pico_rtsp_retinaface-master/src/rtsp_opencv.cc:221:2: error: 'rtsp_set_server_address' was not declared in this scope
rtsp_set_server_address(g_rtsplive, "172.32.0.93"); // set RTSP server IP 172.32.0.93
^~~~~~~~~~~~~~~~~~~~~~~
/home/alientek/RV1106_ai_demo/luckfox_pico_rtsp_retinaface-master/src/rtsp_opencv.cc:221:2: note: suggested alternative: 'rtsp_sever_tx_video'
rtsp_set_server_address(g_rtsplive, "172.32.0.93"); // set RTSP server IP 172.32.0.93
^~~~~~~~~~~~~~~~~~~~~~~
您好,感谢您对了 luckfox-pico 在 rtsp 推流 rknn 模型推理图像问题的关注,目前我们对 rtsp 推流的例程还处于开发阶段,延迟效果是 rtsp 推流时受编解码,网络延迟等因素导致的,使用其他模型也会存在较为明显的延迟,目前的这个例程使用的 rtsp 配置还待优化,该例程主要为题主的问题提出参考思路。chenmodegaoyang wrote: ↑2024-02-22 4:04 您好您这个demo试了一下,发现这个人脸识别推流的画面矩形框和识别有一点延迟效果可能不太好,想换成另一个rknn中demo里的物体识别的yolov5模型那个我记得在我的帖子上的demo中反应要比这个人脸识别要快很多,
我发现两个模型的输出有一些不太一样这个应该会对输出有一定影响
,那您给的这个源代码需要更改哪些地方呢仅仅只用更改模型路径和名字吗还是要有其他的修改需要注意的?
rknn 模型如果要进行修改还需要考虑到对模型输出数据进行解析,仅仅修改模型路径是无法顺利运行的。
这个例程使用的模型 retinaface 是比较轻量的模型,在这个例程中仅用于测试 rknn 能否顺利运行。考虑到社区对物体识别模型的需求,我们也尝试加载 yolov5s 模型,但是在测试平台 luckfox-pico plus(主控RV1103)上受内存限制会在各模块的内存分配阶段就会失败,我们会进一步的优化,或者尝试其他更轻量的模型。
目前使用的 rtsp 推流接口基于瑞芯微官方的 rkrtsp.a 静态链接库,包含的软件接口如下 不支持您需要的 rtsp_set_server_address ,如果有更多需求推荐使用其他的 rtspserver 库,瑞芯微官方没有提供相应的 rtsp 源码可以进行二次开发。chenmodegaoyang wrote: ↑2024-02-22 4:13 另外我想实现给服务器进行推流但是运用到了rtsp_set_server_address(g_rtsplive, "IP"); 这个函数时在编译时报错应该是显示没有定义如下函数那如果我想要发送指定服务器还需要引进哪些库呢?Code: Select all
home/alientek/RV1106_ai_demo/luckfox_pico_rtsp_retinaface-master/src/rtsp_opencv.cc: In function 'int main(int, char**)': /home/alientek/RV1106_ai_demo/luckfox_pico_rtsp_retinaface-master/src/rtsp_opencv.cc:221:2: error: 'rtsp_set_server_address' was not declared in this scope rtsp_set_server_address(g_rtsplive, "172.32.0.93"); // set RTSP server IP 172.32.0.93 ^~~~~~~~~~~~~~~~~~~~~~~ /home/alientek/RV1106_ai_demo/luckfox_pico_rtsp_retinaface-master/src/rtsp_opencv.cc:221:2: note: suggested alternative: 'rtsp_sever_tx_video' rtsp_set_server_address(g_rtsplive, "172.32.0.93"); // set RTSP server IP 172.32.0.93 ^~~~~~~~~~~~~~~~~~~~~~~
该例程实现的效果是将 luckfox-pico 作为推流服务器,电脑端使用 vlc 打开网络串流 rtsp://172.32.0.93/live/0 即可观察到拉取的图像,ip 地址参考 https://wiki.luckfox.com/zh/Luckfox-Pico/CSI-Camera 进行配置。
这个是我帖子下工作人员修改给出的基于官方rknpu下的YOLOV5物体识别不断输出打印结果的demoCrocodile wrote: ↑2024-02-22 6:10您好,感谢您对了 luckfox-pico 在 rtsp 推流 rknn 模型推理图像问题的关注,目前我们对 rtsp 推流的例程还处于开发阶段,延迟效果是 rtsp 推流时受编解码,网络延迟等因素导致的,使用其他模型也会存在较为明显的延迟,目前的这个例程使用的 rtsp 配置还待优化,该例程主要为题主的问题提出参考思路。chenmodegaoyang wrote: ↑2024-02-22 4:04 您好您这个demo试了一下,发现这个人脸识别推流的画面矩形框和识别有一点延迟效果可能不太好,想换成另一个rknn中demo里的物体识别的yolov5模型那个我记得在我的帖子上的demo中反应要比这个人脸识别要快很多,
我发现两个模型的输出有一些不太一样这个应该会对输出有一定影响
,那您给的这个源代码需要更改哪些地方呢仅仅只用更改模型路径和名字吗还是要有其他的修改需要注意的?
rknn 模型如果要进行修改还需要考虑到对模型输出数据进行解析,仅仅修改模型路径是无法顺利运行的。
这个例程使用的模型 retinaface 是比较轻量的模型,在这个例程中仅用于测试 rknn 能否顺利运行。考虑到社区对物体识别模型的需求,我们也尝试加载 yolov5s 模型,但是在测试平台 luckfox-pico plus(主控RV1103)上受内存限制会在各模块的内存分配阶段就会失败,我们会进一步的优化,或者尝试其他更轻量的模型。

您好,我试了下直接替换确实不行因为yolov5物体识别有coco数据集的标签无法显示并且输出也不一样,导致矩形框会乱标,那如果想要将您新发布的这个人脸识别的demo中推流部分的代码移植到这个yolov5捕获视频帧的新demo中进行rtsp的物体识别处理后推流可以吗?结合您新发布的这个RTSP推流方法,就是将yolov5处理后的图片利用RK的函数去进行解码发送等操作进行发送到网络串流形成视频流,这种方案可行吗
chenmodegaoyang wrote: ↑2024-02-22 8:04这个是我帖子下工作人员修改给出的基于官方rknpu下的YOLOV5物体识别不断输出打印结果的demoCrocodile wrote: ↑2024-02-22 6:10您好,感谢您对了 luckfox-pico 在 rtsp 推流 rknn 模型推理图像问题的关注,目前我们对 rtsp 推流的例程还处于开发阶段,延迟效果是 rtsp 推流时受编解码,网络延迟等因素导致的,使用其他模型也会存在较为明显的延迟,目前的这个例程使用的 rtsp 配置还待优化,该例程主要为题主的问题提出参考思路。chenmodegaoyang wrote: ↑2024-02-22 4:04 您好您这个demo试了一下,发现这个人脸识别推流的画面矩形框和识别有一点延迟效果可能不太好,想换成另一个rknn中demo里的物体识别的yolov5模型那个我记得在我的帖子上的demo中反应要比这个人脸识别要快很多,
我发现两个模型的输出有一些不太一样这个应该会对输出有一定影响
,那您给的这个源代码需要更改哪些地方呢仅仅只用更改模型路径和名字吗还是要有其他的修改需要注意的?
rknn 模型如果要进行修改还需要考虑到对模型输出数据进行解析,仅仅修改模型路径是无法顺利运行的。
这个例程使用的模型 retinaface 是比较轻量的模型,在这个例程中仅用于测试 rknn 能否顺利运行。考虑到社区对物体识别模型的需求,我们也尝试加载 yolov5s 模型,但是在测试平台 luckfox-pico plus(主控RV1103)上受内存限制会在各模块的内存分配阶段就会失败,我们会进一步的优化,或者尝试其他更轻量的模型。
您好,我试了下直接替换确实不行因为yolov5物体识别有coco数据集的标签无法显示并且输出也不一样,导致矩形框会乱标,那如果想要将您新发布的这个人脸识别的demo中推流部分的代码移植到这个yolov5捕获视频帧的新demo中进行rtsp的物体识别处理后推流可以吗?结合您新发布的这个RTSP推流方法,就是将yolov5处理后的图片利用RK的函数去进行解码发送等操作进行发送到网络串流形成视频流,这种方案可行吗
您好,感谢您对社区的关注,这是一个还处于开发阶段的例程 https://github.com/luckfox-eng29/luckfo ... tsp_yolov5。您可以进行参考学习。
请注意在 viewtopic.php?t=486 中提供的例程仅为题主对 CMake 编译研究的参考,最新的 RKNN 使用请参考 https://github.com/airockchip/rknn_model_zoo 使用,优化了老版本的一些问题。
如何创建一个 VIDEO_FRAME_INFO_S 结构体将 opencv-mobile 获取的图像数据拷贝进去再上传到 venc 编码?我这不行Crocodile wrote: ↑2024-02-22 2:10 您好,这是一个 luckfox-pico 使用 rtsp 推流人脸检测结果图像的例程,您可以参考一下
https://github.com/luckfox-eng29/luckfo ... etinaface/
目前使用的方案是 vi 与 vpss 连接,从 vpss 中获取一帧图像使用 opencv-mobile 处理后使用 RK_MPI_VENC_SendFrame 将帧数据上传到 venc 编码为 H264 再进行 rtsp 推流。
您可以参考这个例程直接创建一个 VIDEO_FRAME_INFO_S 结构体将 opencv-mobile 获取的图像数据拷贝进去再上传到 venc 编码;
本例程使用的 rtsp 推流方案使用的是瑞芯微官方提供的接口,对输入格式有需求也没有开放源码,您也可以采取使用其他 rtspsetver 方案,支持更多格式的输入。
Last edited by W凯先森~ on 2024-02-26 5:22, edited 1 time in total.
您好,首先感谢您的尝试,瑞芯微的官方文档在构建 VIDEO_FRAME_INFO_S 结构体并没有提及太多的细节,经过我们的测试发现要使 VIDEO_FRAME_INFO_S 能够被 VENC 模块成功获取需要确保 内存缓冲块 能够成功申请,您需要执行的步骤如下:W凯先森~ wrote: ↑2024-02-26 4:31如何创建一个 VIDEO_FRAME_INFO_S 结构体将 opencv-mobile 获取的图像数据拷贝进去再上传到 venc 编码?我这不行Crocodile wrote: ↑2024-02-22 2:10 您好,这是一个 luckfox-pico 使用 rtsp 推流人脸检测结果图像的例程,您可以参考一下
https://github.com/luckfox-eng29/luckfo ... etinaface/
目前使用的方案是 vi 与 vpss 连接,从 vpss 中获取一帧图像使用 opencv-mobile 处理后使用 RK_MPI_VENC_SendFrame 将帧数据上传到 venc 编码为 H264 再进行 rtsp 推流。
您可以参考这个例程直接创建一个 VIDEO_FRAME_INFO_S 结构体将 opencv-mobile 获取的图像数据拷贝进去再上传到 venc 编码;
本例程使用的 rtsp 推流方案使用的是瑞芯微官方提供的接口,对输入格式有需求也没有开放源码,您也可以采取使用其他 rtspsetver 方案,支持更多格式的输入。
1.构建一个内存缓冲池
Code: Select all
VIDEO_FRAME_INFO_S h264_frame;
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;
//PoolCfg.bPreAlloc = RK_FALSE;
MB_POOL src_Pool = RK_MPI_MB_CreatePool(&PoolCfg);
printf("Create Pool success !\n");
Code: Select all
MB_BLK src_Blk = RK_MPI_MB_GetMB(src_Pool, width*height*3, RK_TRUE);
Code: Select all
h264_frame.stVFrame.u32Width = 480;
h264_frame.stVFrame.u32Height = 480;
h264_frame.stVFrame.u32VirWidth = 480;
h264_frame.stVFrame.u32VirHeight = 480;
h264_frame.stVFrame.enPixelFormat = RK_FMT_RGB888;
h264_frame.stVFrame.u32TimeRef = H264_TimeRef++; //标识为第几帧
h264_frame.stVFrame.u64PTS = TEST_COMM_GetNowUs(); //获取当前时间戳
h264_frame.stVFrame.u32FrameFlag = 160;
h264_frame.stVFrame.pMbBlk = src_Blk;
unsigned char *data = (unsigned char *)RK_MPI_MB_Handle2VirAddr(src_Blk);
cap >> bgr;
for (int y = 0; y < height; ++y) {
for (int x = 0; x < width; ++x) {
cv::Vec3b pixel = bgr.at<cv::Vec3b>(y, x);
data[(y * width + x) * 3 + 0] = pixel[2]; // Red
data[(y * width + x) * 3 + 1] = pixel[1]; // Green
data[(y * width + x) * 3 + 2] = pixel[0]; // Blue
}
}
Code: Select all
RK_MPI_VENC_SendFrame(0, &h264_frame,-1);