欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

kurento-media-server opencv 模块的创建

程序员文章站 2022-07-14 20:33:51
...

上一节基于kurento-media-server的流媒体服务器已经搭建完成,可以实现流媒体数据的转发功能。接下来我们开始探究基于流媒体数据流,集成一些机器视觉的内容,参考教程https://meetrix.io/blog/webrtc/kurento/creating-an-opencv-filter-for-kurento-media-server.htmlhttp://blog.sina.com.cn/s/blog_48c95a190102vy5z.html

首先需要安装插件开发工具,命令如下

sudo apt-get install kurento-media-server-dev

最初使用 sudo apt-get install kurento-media-server-6.0-dev,提示报错

kurento-media-server opencv 模块的创建

 

可能是命令升级了。

接下来创建opencv_filter模块。

kurento-module-scaffold.sh <module_name> <output_directory> opencv_filter

 在当前目录新建helloworld模块kurento-module-scaffold.sh helloworld ./ opencv_filter。

然后创建一个build 文件夹,并开始生成项目文件

mkdir build

cmake ..

如果执行没有错误,结果如下,顺便看一下我们的目录结构

kurento-media-server opencv 模块的创建

我们开发的opencv模块,缺少gstreamer的提示先忽略。

接下来的部分,可以参考http://www.voidcn.com/article/p-totjgbzu-bow.html。上面的连接部分内容掠过了,对于初学者不是很详细。歪果仁的一篇文章,有一个错误。新建build并进入以后,开始构建项目应该是cmake .. 而不是cmake ./。应为当前目录没有整个模块的cmakelist文件。

kurento-media-server opencv 模块的创建

第一次构建后,生成的文件如上。

ModuleNameImpl.cpp             // 模块管理相关
ModuleNameImpl.hpp
ModuleNameOpenCVImpl.cpp       // 
ModuleNameOpenCVImpl.hpp

前两个文件不应该修改。 最后两个文件将包含模块的逻辑。 ModuleNameOpenCVImpl.cpp文件包含处理方法和参数的函数(必须实现逻辑)。 此外,此文件包含一个称为 process 的函数。 此函数将在每个新帧中调用,因此必须在此函数内实现过滤器的逻辑。 

根据歪果仁的思路,往视频内容添加一段文字,方法如下在helloworldOpenCVImpl.cpp 的process中添加

void MeetrixKurentoHelloWorldOpenCVImpl::process (cv::Mat &mat)
  {
    cv::Point textOrg(100, 100);
    putText( mat, "Hello from Meetrix.IO", textOrg, 1, 2, cv::Scalar(0, 0, 0) );
  }

然后开始编译,切换到build目录

cmake .. -DCMAKE_INSTALL_PREFIX=/usr && make && sudo make install

可能会出错,错误提示如下

kurento-media-server opencv 模块的创建

解决办法,修改一下module目录下的CMakelist.txt文件,定位到下面行

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -DHAVE_CONFIG_H -Wall -Werror -std=c++11")

添加参数 -fPIC

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fPIC -DHAVE_CONFIG_H -Wall -Werror -std=c++11")

编译成功,并把module安装到kurento-media-server模块中。

kurento-media-server opencv 模块的创建

 验证一下是否安装成功,可以通过命令行查看

kurento-media-server	-v

 kurento-media-server opencv 模块的创建

证明编译安装成功了,重启服务应该可以看到效果了。

service kurento-media-server restart

以上完成服务端逻辑开发,接下来,需要在客户端中完成调用。kurento提供两种客户端接入,java和js。js 客户端编译。再次切换到build目录,查看一下目录结构

kurento-media-server opencv 模块的创建

运行指令

cmake .. -DGENERATE_JS_CLIENT_PROJECT=TRUE

kurento-media-server opencv 模块的创建 

js 客户端编译成功,运行结果如下

kurento-media-server opencv 模块的创建

 到这里我们就完成了opencv 模块的开发。后续继续探索如何在js端进行调用。