You need to enable JavaScript to run this app.
导航
Linux
最近更新时间:2025.07.25 11:45:13首次发布时间:2022.02.25 17:16:51
复制全文
我的收藏
有用
有用
无用
无用
桌面端环境

开发环境要求

建议开发运行环境

  1. 界面库:qt5

  2. gcc/g++

  3. Cmake 3.19(建议这个版本,或者更高)

  4. Opencv 运行环境

sudo apt-get install libdc1394-22-dev libtbb2 libavcodec-dev libavformat-dev libswscale-dev liblapacke-dev libatlas-base-dev libhdf5-dev libtesseract-dev libtesseract-dev libomp5
  1. glibc版本:>= 2.29

环境变量配置(460以前需要, 460及之后的可以跳过)

export QT5_PATH=/usr/local/Qt/Qt5.13.2/5.13.2/gcc_64 #qt环境
export EFFECT_SDK=/home/code/sdk/effect-sdk #effect-sdk路径
export HEIDI_SDK=/home/code/sdk/heidi-sdk #heidi-sdk路径
特效模块目录内容如下:

算法模块目录内容如下:

Demo 编译运行

1.安装编译环境

apt-get install build-essential  #安装c++编译器

2.解压demo源码, 进入源码目录
3.编译

sh build.sh Debug

4.编译完成之后,可执行文件生成在./build/Debug/Debug中(release版本在"build/Release/Release")
执行"./EffectDemo"可运行demo
5.可以使用qt creator或者vs code打开CMakeLists.txt进行开发或调试

SDK开发说明

完整的SDK的使用流程在ESSDKProcessor::process()中完成,其中包括了初始化和处理的过程。
注意: Linux默认只提供x86架构的版本,如果有其他架构的需要支持,可以联系我们并提供对应的编译工具链,我们可以基于工具链做适配。

SDK 的使用可以分为三个阶段:

  1. 初始化 SDK

  2. 使用 SDK 进行图像处理

  3. SDK 参数设置,如设置美颜、贴纸、滤镜等

1.初始化

opengl

SDK的使用依赖opengl的环境,使用动态加载angle库的方式
1 . 首先需要在main函数中动态加载angle库,并将函数地址设置到libeffect.so中,代码详见main.cpp:97
2 . demo中的angle库的上下文操作封装在BEF::BEFEffectGLContext中

SDK初始化

SDK的初始化在ESSDKProcessor::process()函数首次进入时执行,这是因为我们SDK的使用需要在同一个线程中进行,可在ESSDKProcessor::initializeProcessor()函数中打断点调试帮助理解

2.使用SDK进行图像处理

处理图像的接口为:

EffectHandle::process(GLint texture, GLint textureSticker, int width, int height, bool imageMode, int timeStamp)

参数说明:

参数名含义
texture待处理的输入纹理
textureSticker输出纹理
width输出纹理宽
height输出纹理高
imageMode是否为图片模式
timeStamp当前时间戳

3.SDK 参数设置,如设置美颜、贴纸、滤镜等

(1)设置美颜、美型、美妆

美颜、美型、美妆的设置使用的是同一个接口,一般来说使一个美颜生效需要两步:
第一步: 设置素材对应的路径
第二步:设置素材中,特效的强度(一般强度默认为 0,所以这一步不执行会没有效果)
设置素材路径的入口函数:

ESVideoFilterRunnable::updateComposerNode(int subId, int updateStatus, float value)

参数说明:

参数名含义
subId需要设置的特效类型,通过该值定位到素材路径,在EffectHandle::registerComposerNode中将类型值和path进行注册
updateStatus0:关闭,1:打开,2:更新强度值
value特效的强度值
(2)设置贴纸

入口函数:

ESVideoFilterRunnable::setSticker(const QString &stickerPath)

参数说明:
stickerPath为贴纸的路径

(3)设置滤镜

入口函数:

ESVideoFilterRunnable::setFilter(const QString &filterPath)

参数说明:
filterPath为滤镜的素材地址

服务端环境

针对服务端或者没有gui需求的场景,我们提供了一个简化版的demo,尽量去掉了其他三方库的依赖,只需要c++环境和opencv的环境即可运行,按照以下的方式去接入

sdk接入

头文件

effect-sdk/include/

动态库

effect-sdk/lib/libeffect.so

glContext 说明:

我们sdk的输入输出都是基于opengl的纹理,所以接口需要在gl的context环境下去执行,如果客户对opengl不是非常了解,我们提供了sample可以使用EGL去进行glcontext的管理,具体使用方法如下

  1. 引入sample中的 BEFEffectGLContext.h和BEFEffectGLContext.cpp到自己的工程中

  2. 初始化BEFEffectGLContext对象

    BEFEffectGLContext m_effectGlContext;
    m_effectGlContext.initGLContext();
    
  3. CurrentContext管理,保证我们的sdk接口,调用在makeCurrentContext和doneCurrentContext之间即可

//切换到当前的glContext
m_effectGlContext.makeCurrentContext();

/*****
sdk api调用
*****/

//恢复
m_effectGlContext.doneCurrentContext()
  1. opengl的创建需要依赖DISPLAY,一般情况下服务端的系统是不支持的,可以使用xvfb创建一个虚拟屏幕到当前的bash,如下
//xvfb安装:sudo apt-get install xvfb
//创建虚拟屏幕
Xvfb -ac :99 -screen 0 720x1280x24 &
export DISPLAY=:99
//运行自己的demo程序
./demo
  1. 注意:每一个glContext都是和线程强绑定的,所以需要保证BEFEffectGLContext对象只作用于同一个线程,不能跨线程调用

Sample

effectDemo.tar.gz
38.42MB

sample依赖
glibc版本:>= 2.29

sudo apt install g++
sudo apt install cmake
sudo apt install make
sudo apt install libopencv-dev