輕松構(gòu)建表情符號(hào)制作應(yīng)用程序
?表情符號(hào)是當(dāng)今在線交流中必不可少的工具,因?yàn)樗鼈冇兄跒榛谖谋镜牧奶煸鎏砩?,并允許用戶更好地表達(dá)文字背后的情感。由于預(yù)設(shè)表情符號(hào)的數(shù)量總是有限的,許多應(yīng)用程序現(xiàn)在允許用戶創(chuàng)建自己的自定義表情符號(hào),以保持新鮮和令人興奮。
例如,在社交媒體應(yīng)用中,不想在視頻通話時(shí)露臉的用戶可以使用動(dòng)畫角色來保護(hù)自己的隱私,并將面部表情應(yīng)用于角色;在直播或電子商務(wù)應(yīng)用程序中,具有逼真面部表情的虛擬主播更有可能吸引觀眾;在視頻或照片拍攝應(yīng)用程序中,用戶可以在自拍時(shí)控制動(dòng)畫角色的面部表情,然后通過社交媒體分享自拍;在兒童教育應(yīng)用程序中,一個(gè)帶有詳細(xì)面部表情的可愛動(dòng)畫角色將使在線課程變得更加有趣和吸引學(xué)生。
我自己正在開發(fā)這樣一個(gè)消息傳遞應(yīng)用程序。當(dāng)與朋友聊天并想以文字以外的方式表達(dá)自己時(shí),我的應(yīng)用程序的用戶可以拍照以創(chuàng)建他們自己或他們選擇的動(dòng)畫角色的表情符號(hào)。然后,該應(yīng)用程序?qū)⒆R(shí)別用戶的面部表情,并將他們的面部表情應(yīng)用于表情符號(hào)。通過這種方式,用戶可以創(chuàng)建無窮無盡的獨(dú)特表情符號(hào)。在我的APP開發(fā)過程中,我利用HMS Core AR Engine提供的能力來跟蹤用戶的面部表情并將面部表情轉(zhuǎn)換為參數(shù),大大減少了開發(fā)工作量。現(xiàn)在我將向您展示我是如何做到這一點(diǎn)的。
執(zhí)行
AR Engine 為應(yīng)用程序提供了實(shí)時(shí)跟蹤和識(shí)別面部表情的能力,然后可以將其轉(zhuǎn)換為面部表情參數(shù),用于精確控制虛擬角色的面部表情。
目前,該套件提供了 64 種面部表情,包括眼瞼、眉毛、眼球、嘴巴和舌頭的動(dòng)作。支持眼球運(yùn)動(dòng)、開閉眼等21種眼部動(dòng)作;28 種嘴部動(dòng)作,包括張開嘴巴、皺起、拉動(dòng)或舔嘴唇,以及移動(dòng)舌頭;以及五個(gè)眉毛動(dòng)作,包括抬眉或下眉。
- 演示
- 基于面部表情的表情符號(hào)
- 開發(fā)流程
- 對(duì)開發(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 并將其安裝在設(shè)備上。
如果您需要使用多個(gè) HMS Core 套件,請(qǐng)使用這些套件所需的最新版本。
準(zhǔn)備工作
1. 開始之前,您需要注冊(cè)成為華為開發(fā)者并完成身份驗(yàn)證。
2. 在開發(fā)之前,通過 Maven 倉庫將 AR Engine SDK 集成到您的開發(fā)環(huán)境中。
3. 7.0之前的Gradle插件、7.0版本的Gradle插件、7.1及以上版本的Gradle插件,在Android Studio中配置Maven倉庫地址的步驟各不相同。需要根據(jù)具體的 Gradle 插件版本進(jìn)行配置。
4、以Gradle插件7.0為例:
在您的 Android Studio 項(xiàng)目中打開項(xiàng)目級(jí)build.gradle文件并配置 Maven 存儲(chǔ)庫地址。
轉(zhuǎn)到buildscript > repositories并為 SDK 配置 Maven 存儲(chǔ)庫地址。
buildscript {
repositories {
google()
jcenter()
maven {url "https://developer.huawei.com/repo/" }
}
}
打開項(xiàng)目級(jí)settings.gradle文件,配置HMS Core SDK的Maven倉庫地址。
buildscript {
repositories {
google()
jcenter()
maven {url "https://developer.huawei.com/repo/" }
}
}
5. 在依賴項(xiàng)塊中添加以下構(gòu)建依賴項(xiàng)。
dependencies {
implementation 'com.huawei.hms:arenginesdk:{version}
}
應(yīng)用程序開發(fā)
1. 檢查當(dāng)前設(shè)備是否安裝了AR Engine。如果是,您的應(yīng)用程序可以正常運(yùn)行。如果沒有,您需要提示用戶安裝它,例如,通過將用戶重定向到 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)建一個(gè) AR 場(chǎng)景。AR Engine支持五種場(chǎng)景,包括運(yùn)動(dòng)追蹤(ARWorldTrackingConfig)、人臉追蹤(ARFaceTrackingConfig)、手部識(shí)別(ARHandTrackingConfig)、人體追蹤(ARBodyTrackingConfig)和圖像識(shí)別(ARImageTrackingConfig)。
下面以調(diào)用ARFaceTrackingConfig創(chuàng)建人臉跟蹤場(chǎ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è)置場(chǎng)景參數(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.設(shè)置人臉跟蹤的AR場(chǎng)景參數(shù),啟動(dòng)人臉跟蹤。
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方法,調(diào)用face.getFaceGeometry()獲取人臉網(wǎng)格。
public void onDrawFrame(ARCamera camera, ARFace face) {
ARFaceGeometry faceGeometry = face.getFaceGeometry();
updateFaceGeometryData(faceGeometry);
updateModelViewProjectionData(camera, face);
drawFaceGeometry();
faceGeometry.release();
}
6.在FaceGeometryDisplay類中初始化updateFaceGeometryData() 。
傳遞面部網(wǎng)格數(shù)據(jù)以進(jìn)行配置并使用 OpenGL ES 設(shè)置面部表情參數(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中調(diào)用FaceRenderManager的setArSession、setArConfigBase等方法實(shí)現(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);
}
}
結(jié)論
表情符號(hào)允許用戶以文字無法表達(dá)的方式表達(dá)他們的情緒和興奮。您現(xiàn)在可以通過允許用戶自己創(chuàng)建表情符號(hào)來讓您的應(yīng)用程序變得更有趣,而不是為用戶提供已使用一百萬次的相同舊的無聊預(yù)設(shè)表情符號(hào)!用戶只需面對(duì)鏡頭,選擇他們喜歡的動(dòng)畫角色并微笑,就可以輕松創(chuàng)建帶有自己微笑的表情符號(hào)。有了這種自定義表情符號(hào)的能力,用戶將能夠以更加個(gè)性化和有趣的方式表達(dá)自己的感受。
如果您有興趣開發(fā)這樣的應(yīng)用程序,AR 引擎是一個(gè)潛在的選擇。它能夠?qū)崟r(shí)識(shí)別用戶的面部表情,將面部表情轉(zhuǎn)換為參數(shù),然后應(yīng)用到虛擬角色中。集成該功能可以幫助您顯著簡(jiǎn)化應(yīng)用程序開發(fā)過程,讓您有更多時(shí)間專注于如何為用戶提供更有趣的功能并改善應(yīng)用程序的用戶體驗(yàn)。?