FaceUnity
This page explains how to integrate and use the FaceUnity AR Filter extension in your Android or iOS app.
Understand the tech
To quickly integrate FaceUnity's AR filter capabilities, call the Video SDK setExtensionProperty method and pass the corresponding key
and value
.
Taking setExtensionProperty
for example, the key
is named after the FaceUnity API, and the value
wraps certain or all the parameters of that API in JSON. When you call setExtensionProperty
and pass in the pair of key
and value
, it is equivalent to calling the corresponding FaceUnity API. The case is the same for setExtensionPropertyWithVendor
.
Currently, the extension encapsulates part of the APIs of the FaceUnity Nama SDK. For details, see the key overview.
Prerequisites
The development environment requirements are as follows:
- Android Studio 4.1 or later.
- A physical device (not an emulator) running Android 5.0 or later.
- Implemented Get Started with Video Calling.
Activate the extension
You need to activate the extension in Agora Console. Save the certificate file you obtain from activation. The certificate is used in subsequent integration.
Integrate the extension
- In Extensions Marketplace page, download the package of FaceUnity AR Filter.
- Unzip the package, and save all
.aar
files to the/app/libs
path of your project folder. - Save the certificate file
authpack.java
to where the app module is located (For example, the package name in the sample code isio.agora.rte.extension.faceunity.example
, so the certificate file should be saved to/app/src/main/java/io/agora/rte/extension/faceunity/example
). - Contact Agora to get the resource package of the Faceunity extension. Save the model and prop files you need to the
/app/src/main/assets
path of the project folder. For details, see Resource package structure. - In the
app/build.gradle
file, add the following line independencies
: - Import the required classes:
Call sequence
This section describes the call sequence of using the extension. For a detailed parameter description, see the API Reference.
Step 1: Enable the extension
When initializing RtcEngine
, call enableExtension
to enable the extension.
Step 2: Initialize the extension
To initialize the extension, call setExtensionProperty
(Android), and pass in the corresponding keys and values:
- Initialize the extension
Set the key as
fuSetup
, and the value as the pointer to the certificate file. - Load the AI model
Set the key as
fuLoadAIModelFromPackage
, and the value contains the path of the AI capability model fileai_xxx.bundle
and the AI capability type.
For example:
Step 3: Configure beauty effects and body recognition
Call setExtensionProperty
and pass in the corresponding keys and values.
You can implement the following functions:
- Load props and adjust beautification intensity
- Recognize and track human faces, gestures, and bodies
You can call the method as needed. For a full list of keys and values, see the API Reference.
Sample project
The complete sample code and project is provided on GitHub:
Run the project
- Clone the repository:
-
On the Extensions Marketplace Downloads page, download the Android package of FaceUnity AR Filter. Unzip the package, and save all
.aar
files to theFaceUnity/android/app/libs
path. -
Contact Agora to get the certificate file and resource package.
-
Save the certificate file
authpack.java
toFaceUnity/android/app/src/main/java/io/Agora/rte/extension/faceunity/example
. -
Save the required model and prop files from the resource package to
FaceUnity/android/app/src/main/assets/face_unity
under the project folder. -
Open the sample project
FaceUnity/android
in Android Studio. -
Sync the project with Gradle files.
-
Open the
FaceUnity/android/app/src/main/java/io/Agora/rte/extension/FaceUnity/example/Config.java
file, and replace<YOUR_APP_ID>
with your App ID. To get an App ID, see Getting Started with Agora. -
Connect an Android device (not an emulator), and run the project.
Reference
Resource package structure
- For a full description of the Faceunity resource package, refer to:
- Android resource package
- iOS resource package
API reference
Video SDK
This section lists the APIs related to using extensions with the Agora SDK.
- addExtension in the
RtcEngineConfig
class - enableExtension in the
RtcEngineConfig
class - setExtensionProperty in the
RtcEngineConfig
class - onEvent in the
IMediaExtensionObserver
class
FaceUnity key-value overview
The key corresponds to the name of the FaceUnity API, and the value corresponds to the parameters of the FaceUnity API. In this section, if the value is the same as the parameters of the FaceUnity API, the link leads to the FaceUnity documentation. If the value is different from the parameters of the FaceUnity API, the link leads to subsequent sections on this page.
Method keys
Method keys refer to the keys you pass in when calling the setExtensionProperty
/setExtensionPropertyWithVendor
method of the Agora SDK.
Initialization
Method keys | Description |
---|---|
fuSetup | Initialize the extension and authenticate the user. Must be executed before other keys. Otherwise, a crash can happen. |
fuLoadAIModelFromPackage | Preload AI capabilities. |
fuReleaseAIModel | Free up resources occupied by AI capabilities. |
Prop package loading
Method keys | Description |
---|---|
fuCreateItemFromPackage | Loads the prop package. |
fuLoadTongueModel | Loads tongue detection data. |
fuItemSetParam | Modifies or sets the value of a variable in the prop package. |
Destruction
Method keys | Description |
---|---|
fuDestroyItem | Destroys a specified item. |
fuDestroyAllItems | Destroys all loaded items and releases all occupied resources. |
fuOnDeviceLost | Resets the system's GL state. Use this key when the OpenGL context is released/destroyed by external resources. |
fuDestroyLibData | Frees up the memory allocated to the face tracking module after calling fuSetup . |
System functions
Method keys | Description |
---|---|
fuBindItems | Binds resource items to a target item. |
fuUnbindItems | Unbinds the resource items from a target item. |
fuIsTracking | Sets whether to get the number of faces being tracked. |
fuSetMaxFaces | Sets the maximum number of tarcked faces. |
fuSetDefaultRotationMode | Sets the default human face orientation. |
Algorithm functions
Method keys | Description |
---|---|
fuFaceProcessorSetMinFaceRatio | Sets the distance of face detection. |
fuSetTrackFaceAIType | Sets the fuTrackFace algorithm type. |
fuSetFaceProcessorFov | Sets the fov (equivalent to focal length) of the FaceProcessor algorithm module. |
fuHumanProcessorReset | Resets the state of the HumanProcessor algorithm module. |
fuHumanProcessorSetMaxHumans | Sets the number of bodies tracked by the HumanProcessor algorithm module. |
fuHumanProcessorGetNumResults | Sets whether to get the number of bodies tracked by the HumanProcessor algorithm module. |
fuHumanProcessorSetFov | Sets the fov (equivalent to focal length) used by the HumanProcessor algorithm module to track 3D key points on human bodies. |
fuHandDetectorGetResultNumHands | Sets whether to get the number of gestures tracked by the HandGesture algorithm module. Note that ai_gesture.bundle needs to be loaded. |
Callback keys
Callback keys refer to the keys returned in the onEvent
callback of the Agora SDK.
Callback keys | Description |
---|---|
fuIsTracking | Returns the number of faces being tracked. |
fuHumanProcessorGetNumResults | Returns the number of human bodies tracked by the HumanProcessor algorithm module. |
fuHandDetectorGetResultNumHands | Returns the number of gestures tracked by the HandGesture algorithm module. |
Method key description
fuSetup
The value contains the following parameters:
Value parameters | Description |
---|---|
authdata | The path to the certificate file. |
fuLoadAIModelFromPackage
The value contains the following parameters:
Value parameters | Description |
---|---|
data | String. The path of the AI capability model file ai_xxx.bundle . Such model files are located in the assets/AI_Model directory of the resource package. |
type | Int. The AI capability type corresponding to the bundle file. Possible values are listed in enum FUAITYPE. |
fuCreateItemFromPackage
The value contains the following parameters:
Value parameters | Description |
---|---|
data | String. The path to the prop package you want to load. A prop package usually has a suffix *.bundle . |
fuLoadTongueModel
The value contains the following parameters:
Value parameters | Description |
---|---|
data | String. The path of tongue model data tongue.bundle . |
fuItemSetParam
The value contains the following parameters:
Value parameters | Description |
---|---|
obj_handle | String. The path of the prop package passed in when calling fuCreateItemFromPackage. |
name`` | String. The name of the variable to set in the prop package. |
value | Object. The variable value to be set. |
For details on the variable names and values in the prop package, refer to the FaceUnity documentation.
fuDestroyItem
The value contains the following parameters:
Value parameters | Description |
---|---|
item | String. The path of the prop package passed in when calling fuCreateItemFromPackage. |
fuBindItems
The value contains the following parameters:
Value parameters | Description |
---|---|
obj_handle | String. The path of the target item. |
p_items | String Array. The paths to the resource items you want to bind. |
fuUnbindItems
The value contains the following parameters:
Value parameters | Description |
---|---|
obj_handle | String. The path of the target item. |
p_items | String Array, the paths to the resource items you want to unbind. |
fuIsTracking
The value contains the following parameters:
Value parameters | Description |
---|---|
enable | Bool. Whether to get the number of faces being tracked. If set to true , you can receive the fuIsTracking callback. |
fuHumanProcessorGetNumResults
The value contains the following parameters:
Value parameters | Description |
---|---|
enable | Bool. Whether to get the number of human bodies tracked by the HumanProcessor algorithm module. If set to true , you can receive the fuHumanProcessorGetNumResults callback. |
fuHandDetectorGetResultNumHands
The value contains the following parameters:
Value parameters | Description |
---|---|
enable | Bool. Whether to get the number of gestures tracked by the HandGesture algorithm module. If set to true , you can receive the fuHandDetectorGetResultNumHands callback. |
Callback key description
fuIsTracking
The value contains the following parameters:
Value parameters | Description |
---|---|
faces | Int. The number of faces being tracked. |
fuHumanProcessorGetNumResults
The value contains the following parameters:
Value parameters | Description |
---|---|
people | Int. The number of bodies being tracked. |
fuHandDetectorGetResultNumHands
The value contains the following parameters:
Value parameters | Description |
---|---|
hands | Int. The number of gestures being tracked. |