当前位置: 首页 > 后端技术 > Java

如何使用AREngine开发头像表情包?

时间:2023-04-01 20:48:36 Java

如今,人们越来越喜欢在网络上聊天和发帖时使用表情符号。表情符号是社交媒体不可或缺的一部分。再加上近年来元宇宙的兴起,3D虚拟形象被广泛使用。用户可以通过自己的表情来控制头像的表情,并创建一系列专属表情,让头像更加生动。那么,如何让分身拥有和人类一样多变的表情呢?HMSCoreAREngine的面部表情追踪能力,可以帮助实现实时计算每个面部表情对应的参数值。用户可以通过自己的面部动作来控制虚拟人物的表情,最终做出各种生动的虚拟人物表情,以更加有趣的形式传达文字的情感,也大大方便了表情等应用场景虚拟人物的制作。例如,在社交应用中,不想露脸的人可以通过虚拟形象的表情来传达自己的情绪,既增加了乐趣,又保护了隐私。在直播、电商类APP中,为避免同质化,商家可以借助虚拟主播生动的表情,为用户带来更加生动的消费场景和新颖的交互体验,激发年轻人沉浸式虚拟娱乐和数字消费的兴趣。需要。在短视频、相机等App中,用户通过表情来控制头像的表情,进行自我展示和表情,拉近人与人之间的距离;而在教育、文旅等App中,通过抓取人脸图像信息,实时了解成人面部表情的内容,利用虚拟图像进行更形象的讲解和教学,激发用户的学习兴趣。实现方法AREngine提供了“面部表情追踪”能力,可以实时追踪获取人脸图像信息,计算出人脸的姿态,了解人脸表情的内容,并转化为各种表情参数。使用表情参数可以实现面部表情直接控制头像的表情。AREngine目前共提供64种表情,包括眼睛、眉毛、眼球、嘴巴、舌头等主要面部器官的表情。眼睛有21种表情,包括眼球运动、眼睛开合、眼皮微动等;嘴巴有28种表情,包括张嘴、噘嘴、下拉嘴角、噘嘴、舌头运动等;眉毛有5种表情,包括眉毛上扬、单边眉毛向下或向上等,其他具体表情参数请参考FaceAR设计规范。效果展示开发步骤开发环境要求:JDK1.8.211及以上版本。安装AndroidStudio3.0及以上:minSdkVersion26及以上targetSdkVersion29(推荐)compileSdkVersion29(推荐)Gradle6.1.1及以上(推荐)在华为终端设备上的应用商店下载AREngine服务器APK(需要在华为应用商店,搜索“HuaweiAREngine”),在终端设备上安装。测试应用的设备:参考AREngine特性软硬件依赖表。如果同时使用多个HMSCore服务,需要使用每个Kit对应的最大值。开发准备在开发应用之前,您需要在华为开发者联盟网站注册为开发者并完成实名认证。具体请参见账号注册与认证。华为以Maven仓库集成方式提供AREngineSDK包。在开始开发之前,您需要将AREngineSDK集成到您的开发环境中。对于7.0、7.0和7.1及以上版本的Gradle插件,AndroidStudio的代码库配置有所不同。请根据您当前的Gradle插件版本选择相应的配置流程。以7.0为例:打开AndroidStudio项目级“build.gradle”文件,添加Maven代码库。在“buildscript>repositories”配置HMSCoreSDK的Maven仓库地址。buildscript{repositories{google()jcenter()maven{url"https://developer.huawei.com/repo/"}}}打开项目级"settings.gradle"文件,配置HMS的Maven仓库地址CoreSDKdependencyResolutionManagement{repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)repositories{repositories{google()jcenter()maven{url"https://developer.huawei.com/repo/"}}}}添加依赖添加如下编译依赖in"dependencies":dependencies{implementation'com.huawei.hms:arenginesdk:{version}}应用开发运行前验证:检查当前设备是否安装了AREngine。如果已安装,它将正常运行。若未安装,App应以适当的方式提醒用户安装AREngine,如主动跳转到应用市场,要求安装AREngine。具体实现代码如下booleanisInstallArEngineApk=AREnginesApk.isAREngineApkReady(this);if(!isInstallArEngineApk){//ConnectAppMarketActivity.class为跳转到应用市场的activity。startActivity(newIntent(this,com.huawei.arengine.demos.common.ConnectAppMarketActivity.class));isRemindInstall=true;}创建AR场景:AREngine提供5个场景,包括运动追踪(ARWorldTrackingConfig)、人脸追踪(ARFaceTrackingConfig)、手部识别(ARHandTrackingConfig)、身体追踪(ARBodyTrackingConfig)和图像识别(ARImageTrackingConfig)。调用ARFaceTrackingConfig接口创建人脸追踪。//创建ARSession。mArSession=newARSession(this);//根据具体要使用的场景,选择具体的Config初始化ARSession。ARFaceTrackingConfigconfig=newARFaceTrackingConfig(mArSession);创建人脸追踪ARSession后,可以通过config.setXXX方法配置场景参数//设置摄像头的开启方式,外开启或内开启,外开启只能在ARFace中使用,推荐使用打开相机的内部方式。mArConfig.setImageInputMode(ARConfigBase.ImageInputMode.EXTERNAL_INPUT_ALL);配置人脸跟踪AR场景参数,启动人脸跟踪场景:mArSession.configure(mArConfig);mArSession.resume();创建FaceGeometryDisplay类,该类用于获取人脸几何数据,并将数据渲染到屏幕上publicclassFaceGeometryDisplay{//初始化与人脸几何相关的OpenGLES渲染,包括创建shader程序。voidinit(Contextcontext){...}}在FaceGeometryDisplay类中创建,onDrawFrame方法,使用face.getFaceGeometry()方法获取人脸MeshpublicvoidonDrawFrame(ARCameracamera,ARFaceface){ARFaceGeometryfaceGeometry=face.getFaceGeometry();updateFaceGeometryData(faceGeometry);updateModelViewProjectionData(相机,人脸);drawFaceGeometry();updateFaceGeometryData(ARFaceGeometryfaceGeometry){FloatBufferfaceVertices=faceGeometry.getVertices();FloatBuffertextureCoordinates=faceGeometry.getTextureCoordinates();//获取人脸Mesh纹理坐标点数组,渲染时与getVertices()返回的顶点数据一起使用。}创建FaceRenderManager类,管理与人脸数据相关的渲染:publicclassFaceRenderManagerimplementsGLSurfaceView.Renderer{//constructor初始化context和activitymActivity=活动;}//设置ARSession并获取最新数据返回;}mArSession=arSession;}//设置ARConfigBase并获取配置模式。publicvoidsetArConfigBase(ARConfigBasearConfig){if(arConfig==null){LogUtil.error(TAG,"setArFaceTrackingConfig错误,arConfig为空。");返回;}mArConfigBase=arConfig;}//设置外置摄像头的开启方式publicvoidsetOpenCameraOutsideFlag(booleanisOpenCameraOutsideFlag){isOpenCameraOutside=isOpenCameraOutsideFlag;}...@OverridepublicvoidonSurfaceCreated(GL10gl,EGLConfigconfig){mFaceGeometryDisplay.init(mContext);}}最后调用FaceActivity中的方法:通过设置这些方法实现最终的效果publicclassFaceActivityextendsBaseActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){mFaceRenderManager=newFaceRenderManager(this,this);mFaceRenderManager.setDisplayRotationManage(mDisplayRotationManager);mFaceRenderManager.setTextView(mTextView);glSurfaceView.setRenderer(mFaceRenderManager);glSurfaceView。setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);}}具体实现请参考示例代码。更多详情>>访问华为开发者联盟官网获取开发指导文档华为移动服务开源仓库地址:GitHub、Gitee关注我们,第一时间了解HMSCore最新技术资讯~