輕松構建表情符號制作應用程序
?表情符號是當今在線交流中必不可少的工具,因為它們有助于為基于文本的聊天增添色彩,并允許用戶更好地表達文字背后的情感。由于預設表情符號的數(shù)量總是有限的,許多應用程序現(xiàn)在允許用戶創(chuàng)建自己的自定義表情符號,以保持新鮮和令人興奮。

例如,在社交媒體應用中,不想在視頻通話時露臉的用戶可以使用動畫角色來保護自己的隱私,并將面部表情應用于角色;在直播或電子商務應用程序中,具有逼真面部表情的虛擬主播更有可能吸引觀眾;在視頻或照片拍攝應用程序中,用戶可以在自拍時控制動畫角色的面部表情,然后通過社交媒體分享自拍;在兒童教育應用程序中,一個帶有詳細面部表情的可愛動畫角色將使在線課程變得更加有趣和吸引學生。
我自己正在開發(fā)這樣一個消息傳遞應用程序。當與朋友聊天并想以文字以外的方式表達自己時,我的應用程序的用戶可以拍照以創(chuàng)建他們自己或他們選擇的動畫角色的表情符號。然后,該應用程序將識別用戶的面部表情,并將他們的面部表情應用于表情符號。通過這種方式,用戶可以創(chuàng)建無窮無盡的獨特表情符號。在我的APP開發(fā)過程中,我利用HMS Core AR Engine提供的能力來跟蹤用戶的面部表情并將面部表情轉換為參數(shù),大大減少了開發(fā)工作量。現(xiàn)在我將向您展示我是如何做到這一點的。
執(zhí)行
AR Engine 為應用程序提供了實時跟蹤和識別面部表情的能力,然后可以將其轉換為面部表情參數(shù),用于精確控制虛擬角色的面部表情。
目前,該套件提供了 64 種面部表情,包括眼瞼、眉毛、眼球、嘴巴和舌頭的動作。支持眼球運動、開閉眼等21種眼部動作;28 種嘴部動作,包括張開嘴巴、皺起、拉動或舔嘴唇,以及移動舌頭;以及五個眉毛動作,包括抬眉或下眉。
- 演示
 - 基于面部表情的表情符號
 - 開發(fā)流程
 - 對開發(fā)環(huán)境的要求
 - JDK:1.8.211 或更高版本
 - Android Studio:3.0 或更高版本
 - minSdkVersion:26 或更高版本
 - targetSdkVersion:29(推薦)
 - compileSdkVersion:29(推薦)
 - Gradle 版本:6.1.1 或更高版本(推薦)
 
確保您已從 AppGallery 下載 AR Engine APK 并將其安裝在設備上。
如果您需要使用多個 HMS Core 套件,請使用這些套件所需的最新版本。
準備工作
1. 開始之前,您需要注冊成為華為開發(fā)者并完成身份驗證。
2. 在開發(fā)之前,通過 Maven 倉庫將 AR Engine SDK 集成到您的開發(fā)環(huán)境中。
3. 7.0之前的Gradle插件、7.0版本的Gradle插件、7.1及以上版本的Gradle插件,在Android Studio中配置Maven倉庫地址的步驟各不相同。需要根據(jù)具體的 Gradle 插件版本進行配置。
4、以Gradle插件7.0為例:
在您的 Android Studio 項目中打開項目級build.gradle文件并配置 Maven 存儲庫地址。
轉到buildscript > repositories并為 SDK 配置 Maven 存儲庫地址。
buildscript {
repositories {
google()
jcenter()
maven {url "https://developer.huawei.com/repo/" }
}
}
打開項目級settings.gradle文件,配置HMS Core SDK的Maven倉庫地址。
buildscript {
repositories {
google()
jcenter()
maven {url "https://developer.huawei.com/repo/" }
}
}
5. 在依賴項塊中添加以下構建依賴項。
dependencies {
implementation 'com.huawei.hms:arenginesdk:{version}
}
應用程序開發(fā)
1. 檢查當前設備是否安裝了AR Engine。如果是,您的應用程序可以正常運行。如果沒有,您需要提示用戶安裝它,例如,通過將用戶重定向到 AppGallery。示例代碼如下:
boolean isInstallArEngineApk =AREnginesApk.isAREngineApkReady(this);
if (!isInstallArEngineApk) {
//ConnectAppMarketActivity.class is the activity for redirecting users to AppGallery.
startActivity(new Intent(this,com.huawei.arengine.demos.common.ConnectAppMarketActivity.class));
isRemindInstall = true;
}
2. 創(chuàng)建一個 AR 場景。AR Engine支持五種場景,包括運動追蹤(ARWorldTrackingConfig)、人臉追蹤(ARFaceTrackingConfig)、手部識別(ARHandTrackingConfig)、人體追蹤(ARBodyTrackingConfig)和圖像識別(ARImageTrackingConfig)。
下面以調用ARFaceTrackingConfig創(chuàng)建人臉跟蹤場景為例。
// Create an ARSession object.
mArSession = new ARSession(this);
// Select a specific Config to initialize the ARSession object based on the application scenario.
ARFaceTrackingConfig config = new ARFaceTrackingConfig(mArSession);
使用config.set XXX方法設置場景參數(shù)。
// Set the camera opening mode, which can be external or internal. The external mode can only be used in ARFace. Therefore, you are advised to use the internal mode.
mArConfig.setImageInputMode(ARConfigBase.ImageInputMode.EXTERNAL_INPUT_ALL);
3.設置人臉跟蹤的AR場景參數(shù),啟動人臉跟蹤。
mArSession.configure(mArConfig);
mArSession.resume();
4、初始化FaceGeometryDisplay類,獲取人臉幾何數(shù)據(jù),并將數(shù)據(jù)渲染到屏幕上。
public class FaceGeometryDisplay {
// Initialize the OpenGL ES rendering related to face geometry, including creating the shader program.
void init(Context context) {
}
}
5、初始化FaceGeometryDisplay類中的onDrawFrame方法,調用face.getFaceGeometry()獲取人臉網格。
public void onDrawFrame(ARCamera camera, ARFace face) {
ARFaceGeometry faceGeometry = face.getFaceGeometry();
updateFaceGeometryData(faceGeometry);
updateModelViewProjectionData(camera, face);
drawFaceGeometry();
faceGeometry.release();
}
6.在FaceGeometryDisplay類中初始化updateFaceGeometryData() 。
傳遞面部網格數(shù)據(jù)以進行配置并使用 OpenGL ES 設置面部表情參數(shù)。
private void updateFaceGeometryData (ARFaceGeometry faceGeometry) {
FloatBuffer faceVertices = faceGeometry.getVertices();
FloatBuffer textureCoordinates =faceGeometry.getTextureCoordinates();
// Obtain an array consisting of face mesh texture coordinates, which is used together with the vertex data returned by getVertices() during rendering.
}
7. 初始化FaceRenderManager類來管理人臉數(shù)據(jù)渲染。
public class FaceRenderManager implements GLSurfaceView.Renderer {
public FaceRenderManager(Context context, Activity activity) {
mContext = context;
mActivity = activity;
}
// Set ARSession to obtain the latest data.
public void setArSession(ARSession arSession) {
if (arSession == null) {
LogUtil.error(TAG, "Set session error, arSession is null!");
return;
}
mArSession = arSession;
}
// Set ARConfigBase to obtain the configuration mode.
public void setArConfigBase(ARConfigBase arConfig) {
if (arConfig == null) {
LogUtil.error(TAG, "setArFaceTrackingConfig error, arConfig is null.");
return;
}
mArConfigBase = arConfig;
}
// Set the camera opening mode.
public void setOpenCameraOutsideFlag(boolean isOpenCameraOutsideFlag) {
isOpenCameraOutside = isOpenCameraOutsideFlag;
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
mFaceGeometryDisplay.init(mContext);
}
}
8、在FaceActivity中調用FaceRenderManager的setArSession、setArConfigBase等方法實現(xiàn)人臉跟蹤效果。
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);
}
}
結論
表情符號允許用戶以文字無法表達的方式表達他們的情緒和興奮。您現(xiàn)在可以通過允許用戶自己創(chuàng)建表情符號來讓您的應用程序變得更有趣,而不是為用戶提供已使用一百萬次的相同舊的無聊預設表情符號!用戶只需面對鏡頭,選擇他們喜歡的動畫角色并微笑,就可以輕松創(chuàng)建帶有自己微笑的表情符號。有了這種自定義表情符號的能力,用戶將能夠以更加個性化和有趣的方式表達自己的感受。
如果您有興趣開發(fā)這樣的應用程序,AR 引擎是一個潛在的選擇。它能夠實時識別用戶的面部表情,將面部表情轉換為參數(shù),然后應用到虛擬角色中。集成該功能可以幫助您顯著簡化應用程序開發(fā)過程,讓您有更多時間專注于如何為用戶提供更有趣的功能并改善應用程序的用戶體驗。?















 
 
 







 
 
 
 