TengineGst is a streaming media analytics framework, based on GStreamer multimedia framework, for creating varied complex media analytics pipelines. It ensures pipeline interoperability and provides optimized media, and inference operations using Tengine Toolkit Inference Engine backend, across varied architecture - CPU, iGPU and VPU.
TengineGst 是 OPEN AI LAB 基于 GStreamer 多媒体框架的分析推理框架,用于创建各类多媒体处理管道,可以方便的利用各种成熟的插件快速搭建起稳定的应用,并使用 Tengine 优化推理操作,更快更优更专注的开发核心 AI 业务。 完整的解决方案利用了:
TengineGst 中深度学习推理的插件:
数据流
inferservice:调用Tengine 推理框架,加载模型,推理结果,并把结果输出到分析插件按照类 inferservice 库的框架编译的库,也可以作为 videoanalysis 插件的业务库传入,修改 businessdll 属性为业务库地址,即可以支持不同算法业务。
sudo apt update
sudo apt install pkg-config
sudo apt install pkgconf
sudo apt install -y build-essential cmake
sudo apt install gstreamer1.0-tools libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-libav gstreamer1.0-plugins-bad gstreamer1.0-plugins-good
apt install libssl-dev
目前在x86/khadas 环境编译,其他设备只需替换不同 Tengine 推理库即可。
//参考:https://github.com/OAID/Tengine/tree/tengine-lite/doc/docs_zh/source_compile,编译不同 npu 版本,下面例子编译x86
cd Tengine
mkdir build
cd build
cmake ..
make
make install
cp -r install/include/ /usr/local/
cp install/lib/* /usr/local/lib/
wget https://github.com/HardySimpson/zlog/archive/refs/tags/1.2.15.tar.gz
tar zxvf 1.2.15.tar.gz
cd zlog-1.2.15
make PREFIX=/usr/local
sudo make PREFIX
=/usr/local install
git clone https://github.com/eclipse/mosquitto.git
cd mosquitto && cd lib
make && make install
git clone https://github.com/libjpeg-turbo/libjpeg-turbo.git
cd libjpeg-turbo
mkdir build
cmake ..
make && make install
wget https://github.com/opencv/opencv/archive/3.4.16.zip
unzip 3.4.16.zip
cd opencv-3.4.16
mkdir build
cd build
cmake ..
make && make install
cmake 目录下 cross.cmake 文件有交叉编译开关。交叉编译环境需调整交叉编译路径。对应的 khadas 支持库已经提供,打开开关即可。
具体编译方法:
mkdir build
cd build
cmake ..
make
khadas 交叉编译,需要 env-run.tar.gz 解压出来,可以减少编译步骤,这时需要把子目录 run 里面的库拷贝到设备里面,模型文件参看源码里面指定的路径,拷贝到相应的目录。
tar zxvf env-run.tar.gz
编译完成,build 目录会产生 aarc64/Release/lib 目录,里面即是所有的插件。把里面的插件库拷贝到GStreamer 目录下。类似命令:
// khadas
cp aarch64/Release/lib/libgst* /usr/lib/aarch64-linux-gnu/gstreamer-1.0/
// x86
cp aarch64/Release/lib/libgst* /usr/lib/x86_64-linux-gnu/gstreamer-1.0/
执行类似命令检查插件 gst-inspect-1.0 mqtt
。因为示例插件,需要把子目录 run
里面的库拷贝到设备的 /usr/lib/aarch64-linux-gnu/
目录下
模型文件拷贝到:/home/khadas/
(见插件 inferservice) 即可,这个发布的时候,可以随意指定路径。
gst-launch-1.0 rtspsrc location="rtsp://**" ! rtph264depay ! capsfilter caps="video/x-h264" ! h264parse ! avdec_h264 ! videoanalysis businessdll=/dir/libinferservice.so ! postprocess ! mqtt username=** userpwd=** servip=** servport=1883 ! fakevideosink
当推理得到结果,就会把结果通过 mqtt
插件发送到 mqtt broker
。 mqtt
测试工具可以用 MQTTBox
,订阅主题 detect_result
可以查看推理结果。