/XJGARSDKDemoApp-Win32

本项目包含免费的XJGARSDK及示例开源代码。XJGARSDK是一个免费的跨平台实时视频处理库,只需学会一套API就可以在MAC、Windows、Linux、IOS、Android等主流操作系统,提供了业界领先的视频磨皮美颜、视频滤镜、人脸实时整形(瘦脸、大眼睛等)、人脸动态贴纸等功能的库。XJGARSDK基于OPENGL开发,glew为2.1, freeglut 为3.0。

Primary LanguageC

#工程配置

一、准备工作

OS: Windows 7及以上版本
Cmake: 3.6以上版本

二、生成工程文件

1.将文件夹XJGARFaceSDKProjectDemo-win32导入到本地,本例中,将文件放在D盘根目录下。
2.打开CMAKE,设定好OpenCV目录等参数,点击Configure进行工程参数配置,然后点击Generate生成解决方案,具体的参数设置下图 所示。
image
3. 利用Visual Studio打开解决方案:libXJGARSDKTest.sln。
image
4.复制OpenCV的dll文件到解决方案目录下,如
image
5.生成解决方案,然后设置项目libXJGARSDKTest为启动项目,点击运行项目即可
image

#免费License申请、贴纸制作工具地址

http://www.xiaojigou.cn 首页-》开发包-》说明文档-》XJGARSDK说明文档

API接口:

注意:SDK中各个函数需要在单一的线程中调用。

  1. 初始化

####初始化方法:
XJGARSDK_API bool XJGARSDKInitialization(const char* licenseText, const char* userName, const char* companyName);

  • 第一个参数为key
  • 第二个参数为 key对应的用户名
  • 第三个参数为 key对应的公司名
    该参数须申请

####销毁方法:
XJGARSDKCleanUP();

  1. 使用人脸整形

####大眼:
XJGARSDK_API bool XJGARSDKSetBigEyeParam(int eyeParam);
eyeParam参数为0-100,数值越大眼睛越大

####瘦脸:
XJGARSDK_API bool XJGARSDKSetThinChinParam(int chinParam);
chinParam参数为0-100,数值越大脸部下吧越瘦

####红润:
XJGARSDK_API bool XJGARSDKSetRedFaceParam(int redFaceParam);
redFaceParam参数为0-100,数值越大脸部皮肤越红润

####美白:
XJGARSDK_API bool XJGARSDKSetWhiteSkinParam(int whiteSkinParam);
whiteSkinParam参数为0-100,数值越大脸部皮肤越白

####磨皮:
XJGARSDK_API bool XJGARSDKSetSkinSmoothParam(int skinSmoothParam);
skinSmoothParam参数为0-100, 数值越大越皮肤越光滑

  1. 使用人脸滤镜
    SDK启动时默认不使用滤镜

####切换滤镜:
XJGARSDK_API bool XJGARSDKChangeFilter(const char* filterTypeName);
filterTypeName参数为滤镜名字,目前可选的滤镜有6种,分别是冰冷,健康,祖母绿,怀旧, 蜡笔, 常青,填入“无”不使用滤镜;
在某些中文输入有问题的状况下可以使用英文参数输入,6种滤镜分别为:"filter_cool",
"filter_Healthy","filter_emerald","filter_nostalgia","filter_crayon", "filter_evergreen"。填入"filter_none",不使用滤镜。

  1. 使用人脸道具

####显示贴纸:
XJGARSDK_API bool XJGARSDKSetShowStickerPapers(bool bShowStickPaper);
bShowStickPaper参数 为true时,显示贴纸

####切换贴纸:
XJGARSDK_API bool XJGARSDKChangeStickpaper(const char* stickPaperName);
stickPaperName参数为贴纸名称,目前可选的贴纸见StickerPapers子文件夹,每个文件夹的名称均是贴纸名称

  1. 图片视频流处理

//初始化OpenGL 环境
XJGARSDK_API bool XJGARSDKInitOpenglEnvironment(int width, int height);
///if user dont't have opengl environment, call this to set up a virtual opengl environment
///@width: width of input image
///@height: height of input image
///@return true: success, false: fail

///销毁OpenGL环境
XJGARSDK_API bool XJGARSDKDestroyOpenglEnvironment();
///释放OpenGL资源
XJGARSDK_API bool XJGARSDKReleaseAllOpenglResources();

//设置SDK工作模式,0为视频,1为图片
XJGARSDK_API bool XJGARSDKSetOptimizationMode(int mode);
///set different optimization mode for video or image
///@mode: optimization mode, 0: video, 1: image

XJGARSDK_API int XJGARSDKRenderImage(const unsigned char* image, int width,
int height, unsigned char* imageBufOut);
前三个是入参,其中image参数是图像RGB数据,width 图像宽带,heifht图像高度
imageBufOut为出参,即经过美颜,滤镜,道具处理后的图像,可用OpenCV的imshow函数直接播放。或者也可以采用doublebuffer方案自行写播放函数

XJGARSDK_API int XJGARSDKRenderImage(const unsigned char* image, int width,
int height);
其中image参数是图像RGB数据,width 图像宽带,heifht图像高度
调用该函数后,将在Opengl屏幕缓存中存储最后渲染的结果。

XJGARSDK_API int XJGARSDKRenderImage(const unsigned char* image, int width,
int height, int* pOutputTexId);
///input 3 channels RGB image, render to get result opengl texture name
///@width: width of input image
///@height: height of input image
///@outputTexId: result opengl texture name

XJGARSDK_API int XJGARSDKRenderGLTexture(int inputTexId, int width,
int height, int* pOutputTexId);
///input opengl texture , render to get result opengl texture
///@inputTexId:input opengl texture
///@width: width of input texture
///@height: height of input texture
///@outputTexId: result opengl texture name

XJGARSDK_API int XJGARSDKRenderGLTexture(int inputTexId, int width, int height);
///input opengl texture , render to opengl back buffer
///@inputTexId:input opengl texture
///@width: width of input texture
///@height: height of input texture

XJGARSDK_API void XJGARSDKDrawAFullViewTexture(int inputTexId, int startX, int startY, int viewportWidth, int viewportHeight);
///Given a inputeTexId, draw to target opengl viewport
///@inputTexId: the inpute text id
///@startx: start x coordinates of view
///@startY: start y coordinates of view
///@viewportWidth: width of view
///@viewportWidth: height of view

XJGARSDK_API int XJGARSDKGetTargetResultImgAndLandMarks(unsigned char* imageBufOut, int* pOutputTexId, float* faceLandmarks, int >targetWidth, int targetHeight, int iImgCropMode, float pXscale = 0, float * pYScale = 0);
//在每一帧渲染结束后,可以使用该函数获取结果图像及脸部特征点,
imageBufOut为结果图像存储的RGB缓存,如果为空,则不输出rgb图像。
pOutputTexId为结果图像存储的纹理Id,如果为空,则不输出纹理对象。
以上两个参数至少有一个不能为空。
faceLandmarks为结果脸部特征点缓存的数组缓存。格式为:第一个人的脸部特征点列表,第二个人脸部特征点列表…
targetWidth:指定输出rgb图像,或纹理的宽度
targetHeight:指定输出rgb图像,或纹理的高度
iImgCropMode:目标图像与相机输入的目标图像尺寸不一致时,指定输入目标图像的裁剪方式,0:拉伸到目标位置,1:中心点对齐并裁剪边界(不缩放),2:居中对齐并缩放以尽可能匹配目标,然后裁剪
///@pXscale, 捕获的结果图像坐标与原始图像坐标的缩放参数
///@pYScale, 捕获的结果图像坐标与原始图像坐标的缩放参数
返回值:检测到的人脸个数
image
//在每一帧渲染结束后,可以使用该函数获取原始图像及脸部特征点,
XJGARSDK_API int XJGARSDKGetFaceLandmarks(float
faceLandmarks);