You need to enable JavaScript to run this app.
导航

Linux

最近更新时间2022.02.25 17:16:51

首次发布时间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. 系统: Ubuntu 18.04 LTS

环境变量:

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路径

特效模块目录内容如下

image.png

算法模块目录内容如下:

image.png

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()中完成,其中包括了初始化和处理的过程.

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为滤镜的素材地址