现如今,人们在网上聊天、发帖时越来越爱用表情包,表情包一方面是一种个性化的表达方法,另一方面更能传达出当下的心理活动,能够说在网络交际中表情包是一个不可或缺的存在。加上近年来元世界的鼓起,3D虚拟形象广泛运用,用户能够经过自己的表情来操控虚拟形象的表情,做一系列专属的表情包,愈加生动形象。
那么,如何让虚拟形象具有人类一样多变的表情呢?HMS Core AR Engine的人脸表情盯梢才能就能帮助完成,实时核算人脸各表情对应的参数值。用户可经过自己的面部动作,操控虚拟人物的表情,最终制作成虚拟人物的各种生动的表情,以更有趣的方法合作传达文字情绪,一起也极大方便了虚拟人物的表情制作等运用场景。
比如在交际App中,不想露脸的人能够把自己的喜怒哀乐经过虚拟形象的表情传达,在保护隐私的一起又增加了趣味性。在直播、电商App里,为了避免同质化,商家运用虚拟主播的表情生动性能够给用户带来更生动的消费场景以及新奇的互动体验,激起年轻人对沉浸式虚拟娱乐和数字消费的需求。在短视频、摄影等App中,用户运用人脸表情操控虚拟形象的表情,进行自我展现与表达,拉近人与人的间隔;而在教育、文旅等App中,捕捉人脸图画信息,实时将其理解成人脸表情内容,用虚拟形象进行解说教学愈加生动,激起用户的学习兴趣。
完成办法
AR Engine供给“人脸表情盯梢”才能,可实时盯梢获取人脸图画信息,核算人脸的位姿,并将其理解成人脸表情内容,并转化成各种表情参数,运用表情参数能够完成人脸表情直接操控虚拟形象的表情。AR Engine目前共供给64种表情,包含眼睛、眉毛、眼球、嘴巴、舌头号首要脸部器官的表情动作。眼部共有21种表情,包含眼球的移动、睁闭眼、眼皮的微动作等;嘴部共有28种表情,包含张嘴噘嘴、嘴角下拉、抿嘴唇、舌头的动作等;眉毛共有5种表情,包含抬眉、单侧眉毛朝下或抬上等。其他详细表情参数可见FaceAR设计规范。
效果展现
开发步骤
开发环境要求:
JDK 1.8.211及以上。 装置Android Studio 3.0及以上: minSdkVersion 26及以上 targetSdkVersion 29(引荐) compileSdkVersion 29(引荐) Gradle 6.1.1及以上(引荐)
在华为终端设备上的运用商场下载AR Engine服务端APK(需在华为运用商场,查找“华为AR Engine”)并装置到终端设备。
测试运用的设备:拜见AREngine特性软硬件依靠表。假如一起运用多个HMS Core的服务,则需求运用各个Kit对应的最大值。
开发预备
-
在开发运用前需求在华为开发者联盟网站上注册成为开发者并完成实名认证,详细办法请拜见帐号注册认证。
-
华为供给了Maven仓集成方法的AR Engine SDK包,在开端开发前,需求将AR Engine SDK集成到您的开发环境中。
-
Android Studio的代码库装备在Gradle插件7.0以下版别、7.0版别和7.1及以上版别有所不同。请依据您当前的Gradle插件版别,选择对应的装备进程。
-
以7.0为例:
翻开Android Studio项目级“build.gradle”文件,增加Maven代码库。
在“buildscript > repositories”中装备HMS Core SDK的Maven仓地址。
buildscript {
repositories {
google()
jcenter()
maven {url "https://developer.huawei.com/repo/" }
}
}
翻开项目级“settings.gradle”文件,装备HMS Core SDK的Maven仓地址
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
repositories {
google()
jcenter()
maven {url "https://developer.huawei.com/repo/" }
}
}
}
- 增加依靠 在“dependencies”中增加如下编译依靠:
dependencies {
implementation 'com.huawei.hms:arenginesdk:{version}
}
运用开发
- 运转前验证:查看当前设备是否装置了AR Engine,若已经装置则正常运转,若没有装置,App应采用适宜的方法提醒用户装置AR Engine,如主动跳转运用商场,请求装置AR Engine。详细完成代码如下
boolean isInstallArEngineApk =AREnginesApk.isAREngineApkReady(this);
if (!isInstallArEngineApk) {
// ConnectAppMarketActivity.class为跳转运用商场的Activity。
startActivity(new Intent(this, com.huawei.arengine.demos.common.ConnectAppMarketActivity.class));
isRemindInstall = true;
}
- 创立AR场景:AR Engine供给5种场景,包含运动盯梢(ARWorldTrackingConfig)、人脸盯梢(ARFaceTrackingConfig)、手部辨认(ARHandTrackingConfig)、人体盯梢(ARBodyTrackingConfig)和图画辨认(ARImageTrackingConfig)。 调用ARFaceTrackingConfig接口,创立人脸盯梢。
// 创立ARSession。
mArSession = new ARSession(this);
// 依据要运用的详细场景,选用详细的Config来初始化ARSession。
ARFaceTrackingConfig config = new ARFaceTrackingConfig(mArSession);
创立人脸盯梢ARSession后,可经过config.setXXX办法装备场景参数
//设置相机的翻开方法,外部翻开或内部翻开,其间外部翻开只能在ARFace中运用,引荐运用内部翻开相机的方法。
mArConfig.setImageInputMode(ARConfigBase.ImageInputMode.EXTERNAL_INPUT_ALL);
- 装备人脸盯梢AR场景参数,发动人脸盯梢场景:
mArSession.configure(mArConfig);
mArSession.resume();
- 创立FaceGeometryDisplay类,此类是获取人脸几许数据,并在屏幕上烘托数据
public class FaceGeometryDisplay {
//初始化与面几许体相关的OpenGL ES烘托,包含创立着色器程序。
void init(Context context) {...
}
}
- 在FaceGeometryDisplay类中创立,onDrawFrame办法,用face.getFaceGeometry()办法来获取人脸Mesh
public void onDrawFrame(ARCamera camera, ARFace face) {
ARFaceGeometry faceGeometry = face.getFaceGeometry();
updateFaceGeometryData(faceGeometry);
updateModelViewProjectionData(camera, face);
drawFaceGeometry();
faceGeometry.release();
}
- 在FaceGeometryDisplay类中创立办法updateFaceGeometryData()传入人脸Mesh数据进行装备 用OpenGl来设置表情参数
private void updateFaceGeometryData(ARFaceGeometry faceGeometry){
FloatBuffer faceVertices = faceGeometry.getVertices();
FloatBuffer textureCoordinates =faceGeometry.getTextureCoordinates();
//获取人脸Mesh纹理坐标点数组,在烘托时,与getVertices()返回的极点数据合作运用。
}
- 创立FaceRenderManager类,此类来办理与人脸数据相关的烘托:
public class FaceRenderManager implements GLSurfaceView.Renderer {
//构造函数初始化上下文和activity
public FaceRenderManager(Context context, Activity activity) {
mContext = context;
mActivity = activity;
}
//设置ARSession,获取最新数据
public void setArSession(ARSession arSession) {
if (arSession == null) {
LogUtil.error(TAG, "Set session error, arSession is null!");
return;
}
mArSession = arSession;
}
//设置ARConfigBase,获取装备形式。
public void setArConfigBase(ARConfigBase arConfig) {
if (arConfig == null) {
LogUtil.error(TAG, "setArFaceTrackingConfig error, arConfig is null.");
return;
}
mArConfigBase = arConfig;
}
//设置外置摄像头翻开方法
public void setOpenCameraOutsideFlag(boolean isOpenCameraOutsideFlag) {
isOpenCameraOutside = isOpenCameraOutsideFlag;
}
...
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
mFaceGeometryDisplay.init(mContext);
}
}
- 最终在FaceActivity中 调用办法:经过设置这些办法来完成最终的效果
public class FaceActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
mFaceRenderManager = new FaceRenderManager(this, this);
mFaceRenderManager.setDisplayRotationManage(mDisplayRotationManager);
mFaceRenderManager.setTextView(mTextView);
glSurfaceView.setRenderer(mFaceRenderManager);
glSurfaceView.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);
}
}
详细完成可参阅示例代码。
了解更多详情>>
拜访华为开发者联盟官网
获取开发指导文档
华为移动服务开源库房地址:GitHub、Gitee
重视咱们,第一时间了解 HMS Core 最新技能资讯~