Git Product home page Git Product logo

xiaojigou / xjgarsdkdemoapp-ios Goto Github PK

View Code? Open in Web Editor NEW
29.0 1.0 8.0 98.57 MB

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

Home Page: http://www.xiaojigou.cn

Objective-C 99.98% C++ 0.01% Shell 0.01%

xjgarsdkdemoapp-ios's Introduction

XJGARSDK.zip压缩包内是无camke的工程,直接解压后.xcodeproj文件可以直接运行

#XJGARSDKDemoApp-IOS是cmake工程,配置方法如下:

一、运行工程准备工作

1.安装虚拟机;
2.安装Mac操作系统;
3.安装Xcode;
4.在Mac OSX上安装配置CMake,版本至少是3.7;
image
image

本说明使用的VMWare Station 12,操作系统为macOS High Sierra 版本10.13.3,Xcode版本9.2。如果有MAC电脑可以省去步骤1和2。

二、生成工程文件

1.将名为XJGARSDK-ios-cmake的文件夹导入到虚拟机,放在“桌面”;
2.修改根目录下CMakeList.txt文件:

  • 双击打开CMakeList.txt文件,如下图:
    image
  • 修改该文件中的1-10内容(很重要),如下图:
    image

第4行,修改TEAM_ID为自己的ID号,可在Apple的开发者网站注册,获得TEAM_ID号,在XCode的工具栏里点击perference,在弹出的窗口中,点击左下角+号,将Apple ID加入,在右侧可以看到Team,随后关闭窗口(该步骤获取了Team名,在后面XCode中会用到);
image
image
其余几行的修改,只需要修改为相应的自己的工程中所对应的名字;

  • 修改完毕,点左上角红色圆点关闭。

3.运行脚本

  • 点击Launchpad->其他->终端,打开命令行窗口,如下图:
    image
  • 在命令行中输入 cmake --version,你会发现系统并不认识cmake这个命令。在命令行中输入PATH="/Applications/CMake.app/Contents/bin":"$PATH",如下图所示。此后,再执行跟cmake有关的命令,系统就可以正确识别它了。
    image
  • 指定到CMakeList.txt文件所在的路径下,本例CMakeList.txt在Desktop\XJGARSDK-ios-cmake下,因此在命令行中定位该路径,如下图操作:(根据你自己的文件路径,用cd命令来指定路径)
    image
  • 点击finder->桌面,选中本例文件夹,将该文件夹下generate-project.sh直接拖入左侧的命令行窗口:
    image
  • 按下“Enter”键,等待该脚本文件生成Xcode工程文件,生成成功后,在XJGARSDK-ios-cmake文件夹下会出现一个Xcode文件,双击可以看到一个.xcodeproj文件,这就是Xcode的工程文件。
    image

三、运行工程

1.在XCode中运行上面生成的工程文件,在Targets中选中目标文件,设置General,在下图框中,勾选Automatically manage signing,选中Team,下拉框会自动出现前面操作中注册过的Team名,选中后Status会自动更新;
image
image

如果发现Status多次更新失败,可以打开XCode的Perference查看,是否需要重新登录,因为网络的关系,有时会掉线,等网络稳定,Status会自动更改。
image

2.选择运行设备,如下图,在你需要运行的程序上点击后面的三角,用于选择程序需要在哪种设备上运行,如果在真机上做测试,可以将手机接入电脑,在虚拟机中做相关操作(如何将手机接入虚拟机可以自行百度),将手机接入虚拟机,接入成功后在Device中会显示该手机,选中后,点XCode工具栏的 ,即可在手机上运行程序。
image

  1. Xcode8.0有很多坑,填完一个又来一个,接入手机运行后,点击手机上的两个功能“Render Image Test”和“Render Camera Test”可能会看到“Thread 1: signal SIGABRT”这样的错误,很多原因都会导致这个错误,请注意看错误提示,我们的代码中因为涉及相册和相机,一般会给出如下的错误提示:

This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSCameraUsageDescription key with a string value explaining to the user how the app uses this data.

解决方法:
image
在上图的Get Info string的下拉框里,选中Privacy-Photo Library Usage Description,在后面的string字段里输入NSPhotoLibraryUsageDescription,这个字段需要自己手动输入,表示使用相册;选中Privacy-Camera Usage Description,在后面的string字段里输入NSCameraUsageDescription,同样需要自己手动输入,表示使用相机。

#免费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);

xjgarsdkdemoapp-ios's People

Contributors

xiaojigou avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

xjgarsdkdemoapp-ios's Issues

项目运行问题

不知道是否还有人维护这个库, 我将项目运行起来了,但是安装不上, 用的免费账号.一直报错
A valid provisioning profile for this executable was not found.
换了 bundle id 一样报错.

Enhancement - support for CustomShaders

I like this repo - this demo is a bit unstable - I might have some time to help fix some basic stuff.
With the direction of projection - it seems it's headed towards full open source?
I'd be interested if the underlieing technology could adapt / update to use some of the smarts from snapchat / facebook.

Eg. here's some shaders maybe able to cherry pick this if it's helpful?

https://github.com/DeltaTheWolf/app-update-tracker/tree/cd6f0ed5cafa8cffaa148fe0fc5d16cfdec54a15/Snapchat/assets/looksery/core/scenarium

SDK - needs to cover these face effects.
https://docs.google.com/presentation/d/1nZoVRFs75v4cv6AICxZEiqDXMNGoVLDzWnRcJAcKT_k/edit#slide=id.g5dd68e1a3c_0_177
Screen Shot 2019-10-31 at 1 45 25 pm

The user can create a config file like this -
https://github.com/DeltaTheWolf/app-update-tracker/blob/cd6f0ed5cafa8cffaa148fe0fc5d16cfdec54a15/Snapchat/assets/looksery/lenses/content/pear_face/config.json
which layers the appropriate shaders. eg.
"id": "shaderPath",
"value": "newLiquify.glsl"
},

Maybe this code is relevant
https://github.com/8secz-johndpope/moduar-glsl

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.