当前位置: 首页 > 科技观察

轻松构建表情符号制作应用

时间:2023-03-19 14:28:51 科技观察

表情符号是当今在线交流中必不可少的工具,因为它们有助于为基于文本的聊天增添趣味,并让用户能够更好地表达文字背后的情感。由于预设表情符号的数量总是有限的,现在许多应用程序都允许用户创建自己的自定义表情符号,以保持新鲜和令人兴奋。例如,在社交媒体应用中,不想在视频通话中露脸的用户可以使用动画角色来保护自己的隐私,并将面部表情应用于角色;在直播或电子商务应用中,具有逼真的面部表情的虚拟主播更容易吸引观众;在视频或照片拍摄应用程序中,用户可以在自拍时控制动画角色的面部表情,然后通过社交媒体分享自拍;在一款儿童教育应用程序中,带有详细面部表情的可爱动画角色将使在线课程对学生来说更加有趣和吸引人。我正在自己开发这样一个消息传递应用程序。当与朋友聊天并想用文字以外的方式表达自己时,我的应用程序的用户可以拍照来创建自己的表情符号或他们选择的动画角色。然后,该应用程序将识别用户的面部表情并将他们的面部表情应用到表情符号中。通过这种方式,用户可以创建无穷无尽的独特表情符号。在我的APP开发过程中,我利用HMSCoreAREngine提供的能力来跟踪用户的面部表情,并将面部表情转化为参数,大大减少了开发工作量。现在我将向您展示我是如何做到的。实施AREngine为应用程序提供了实时跟踪和识别面部表情的能力,然后可以将其转化为面部表情参数,以精确控制虚拟角色的面部表情。目前,该套件提供了64种面部表情,包括眼皮、眉毛、眼球、嘴巴和舌头的动作。支持眼动、睁眼、闭眼等21种眼动;28个嘴部动作,包括张嘴、皱起、拉或舔嘴唇,以及移动舌头;以及五个眉毛动作,包括抬高或降低眉毛。基于表情的emojiDemo开发环境要求JDK:1.8.211以上AndroidStudio:3.0以上minSdkVersion:26以上targetSdkVersion:29(推荐)compileSdkVersion:29(推荐)Gradle版本:6.1.1以上(推荐))确保您已从AppGallery下载AREngineAPK并将其安装在您的设备上。如果您需要使用多个HMSCore包,请使用这些包所需的最新版本。准备工作1、开始之前,您需要注册成为华为开发者并完成身份验证。2.在开发之前,通过Maven仓库将AREngineSDK集成到您的开发环境中。3.7.0之前的Gradle插件,7.0版本的Gradle插件,7.1及以上版本的Gradle插件,在AndroidStudio中配置Maven仓库地址的步骤是不一样的。需要根据具体的Gradle插件版本进行配置。4、以Gradle插件7.0为例:在你的AndroidStudio项目中打开项目级的build.gradle文件,配置Maven仓库地址。进入buildscript>repositories,配置SDK的Maven仓库地址。buildscript{repositories{google()jcenter()maven{url"https://developer.huawei.com/repo/"}}}打开项目级settings.gradle文件,配置HMSCoreSDK的Maven仓库地址.buildscript{repositories{google()jcenter()maven{url"https://developer.huawei.com/repo/"}}}5.在dependencies块中添加以下构建依赖项。dependencies{implementation'com.huawei.hms:arenginesdk:{version}}应用开发1.检查当前设备是否安装了AREngine。如果是,则您的应用程序运行良好。如果没有,您需要提示用户安装它,例如将用户重定向到AppGallery。示例代码如下:booleanisInstallArEngineApk=AREnginesApk.isAREngineApkReady(this);if(!isInstallArEngineApk){//ConnectAppMarketActivity.class是重定向到AppGallery的activity.startActivity(newIntent(this,com.huawei.arengine.demos.common.ConnectAppMarketActivity.class));isRemindInstall=true;}2.创建一个AR场景。AREngine支持五种场景,包括运动追踪(ARWorldTrackingConfig)、人脸追踪(ARFaceTrackingConfig)、手部识别(ARHandTrackingConfig)、身体追踪(ARBodyTrackingConfig)和图像识别(ARImageTrackingConfig)。下面以调用ARFaceTrackingConfig创建人脸跟踪场景为例。//创建ARSession对象.mArSession=newARSession(this);//根据应用场景选择具体的Config初始化ARSession对象.ARFaceTrackingConfigconfig=newARFaceTrackingConfig(mArSession);使用config.setXXX方法设置场景参数。//设置相机开启方式,可以是外置也可以是内置。外部模式只能在ARFace中使用。因此,建议使用内部模式。mArConfig.setImageInputMode(ARConfigBase.ImageInputMode.EXTERNAL_INPUT_ALL);人脸追踪AR场景参数,启用人脸追踪。mArSession.configure(mArConfig);mArSession.resume();4.初始化FaceGeometryDisplay类,获取人脸几何数据,渲染到屏幕上。publicclassFaceGeometryDisplay{//初始化人脸几何相关的OpenGLES渲染,包括创建shader程序。voidinit(Contextcontext){...}}5.初始化FaceGeometryDisplay类中的onDrawFrame方法,调用face.getFaceGeometry()获取面部网格。publicvoidonDrawFrame(ARCameracamera,ARFaceface){ARFaceGeometryfaceGeometry=face.getFaceGeometry();updateFaceGeometryData(faceGeometry);updateModelViewProjectionData(camera,face);drawFaceGeometry();faceGeometry.release();}6.在FaceGeometryDisplay类中初始化更新面几何数据()。传递面部网格数据以使用OpenGLES配置和设置面部表情参数。privatevoidupdateFaceGeometryData(ARFaceGeometryfaceGeometry){FloatBufferfaceVertices=faceGeometry.getVertices();FloatBuffertextureCoordinates=faceGeometry.getTextureCoordinates();//获取由人脸网格纹理坐标组成的数组,与getVertices返回的顶点数据一起使用()在渲染过程中。}7。初始化FaceRenderManager类来管理人脸数据流染。publicclassFaceRenderManagerimplementsGLSurfaceView.Renderer{publicFaceRenderManager(Contextcontext,Activityactivity){mContext=context;mActivity=activity;}//设置ARSession获取最新数据publicvoidsetArSession(ARSessionarSession){if(arSession==null){LogUtil.error(TAG,"Setsessionerror,arSessionisnull!");return;}mArSession=arSession;}//设置ARConfigBase获取配置模式publicvoidsetArConfigBase(ARConfigBasearConfig){if(arConfig==null){LogUtil.error(TAG,"setArFaceTrackingConfigerror,arConfigisnull.");return;}mArConfigBase=arConfig;}//设置相机开启方式.publicvoidsetOpenCameraOutsideFlag(booleanisOpenCameraOutsideFlag){isOpenCameraOutside=isOpenCameraOutsideFlag;}...@OverridepublicvoidonSurfaceCreated(GL10gl,EGLConfigconfig){mFaceGeometryDisplay.init(mContext);}}8、在FaceActivity中调用FaceRenderManager的setArSession、setArConfigBase等方法实现人脸跟随效果。公共类FaceActivity扩展BaseActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){mFaceRenderManager=newFaceRenderManager(这个,这个);mFaceRenderManager.setDisplayRotationManage(mDisplayRotationManager);mFaceRenderManager.setTextView(mTextView);glSurfaceView.setRenderer(mFaceRenderManager);glSurfaceView.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);}}结论表情符号允许用户以文字无法表达的方式表达他们的情绪和兴奋。您现在可以让用户创建自己的表情符号,让您的应用程序更有趣,而不是向用户提供他们已经使用过一百万次的陈旧乏味的预设表情符号!用户只需面对镜头,选择自己喜欢的动画角色并微笑,即可轻松创建自己的微笑表情符号。有了这种自定义表情符号的能力,用户将能够以更加个性化和有趣的方式表达他们的感受。如果您有兴趣开发这样的应用程序,AREngine是一个潜在的选择。它可以实时识别用户的面部表情,将面部表情转化为参数,再应用到虚拟角色中。集成此功能可以帮助您显着简化应用程序开发过程,让您将更多的时间集中在如何为用户提供更有趣的功能和改善应用程序的用户体验上。