Banuba AR Face Filter
Updated
Enable augmented reality features in video calls such as face filters, face touch up filters and virtual backgrounds.
This guide is provided by Banuba. Agora is planning a documentation upgrade program for all extensions on the marketplace. Please stay tuned.
By integrating Banuba Face AR SDK and Agora.io SDK you can enable augmented reality features in video calls such as face filters, face touch up filters and virtual backgrounds. You can find the integration examples below.
Prerequisites
- The latest Banuba SDK archive
- Banuba Extension files for iOS
- Banuba trial client token.
To receive a trial token or a full commercial licence from Banuba - please fill in our form on form on banuba.com website, or contact us via info@banuba.com.
Integrate Banuba Face AR extension
Get Started
-
Get the following Banuba trial client token. To receive a trial token or a full commercial licence from Banuba - please fill in our form on form on banuba.com website, or contact us via info@banuba.com.
-
Execute
pod installto get the Banuba SDK. -
Open the
BanubaAgoraFilters.xcworkspacefile in Xcode. -
Copy and Paste your Banuba client token into the appropriate section of
/BanubaAgoraFilters/Token.swiftwith " " symbols. For example:let banubaClientToken = "Banuba Token" -
Visit agora.io to sign up and get the token, app and channel ID.
-
Copy and Paste your agora token, app and chanel ID into appropriate section of
/BanubaAgoraFilters/Token.swiftwith " " symbols. For example:internal let agoraAppID = "Agora App ID" internal let agoraClientToken = "Agora Token" internal let agoraChannelId = "Agora Channel ID" -
Donwload the needed effects from here. This guarantees, that you will use the up-to-date version of the effects. The effects must be copied to the
agora-plugin-filters-ios -> BanubaAgoraFilters -> effectsfolder. -
Open the
BanubaAgoraFilters.xcodeprojproject in Xcode and run theBanubaAgoraFilterstarget.
If you have any problems with installing Agora frameworks with Swift Package Manager refer to this page
Connecting Banuba SDK and AgoraRtcKit to your own project
Connecting Banuba SDK to your project is similar to the steps in the Getting Started section. As for AgoraRtcKit, we advise to use Swift Package Manager. You should use the following settings:
URL: https://github.com/AgoraIO/AgoraRtcEngine_iOS.git
Version Rule: Up to next minor
Version: 4.0.0
How to use BanubaFiltersAgoraExtension
To control BanubaFiltersAgoraExtension with Agora libs look available keys listed below:
public struct BanubaPluginKeys {
public static let vendorName = "Banuba"
public static let extensionName = "BanubaFilter"
public static let loadEffect = "load_effect"
public static let unloadEffect = "unload_effect"
public static let setEffectsPath = "set_effects_path"
public static let setToken = "set_token"
}To enable/disable BanubaFiltersAgoraExtension use the following method:
import BanubaFiltersAgoraExtension
agoraKit?.enableExtension(
withVendor: BanubaPluginKeys.vendorName,
extension: BanubaPluginKeys.extensionName,
enabled: true
)Before applying an effect on your video you have to initialize BanubaFiltersAgoraExtension with the path to effects and banuba client token. Look how it can be achieved:
agoraKit?.setExtensionPropertyWithVendor(
BanubaPluginKeys.vendorName,
extension: BanubaPluginKeys.extensionName,
key: BanubaPluginKeys.setEffectsPath,
value: "place_path_to_effects_folder_here"
)
agoraKit?.setExtensionPropertyWithVendor(
BanubaPluginKeys.vendorName,
extension: BanubaPluginKeys.extensionName,
key: BanubaPluginKeys.setToken,
value: "place_your_banuba_token_here".trimmingCharacters(in: .whitespacesAndNewlines)
)After those steps you can tell BanubaFiltersAgoraExtension to enable or disable the mask:
agoraKit?.setExtensionPropertyWithVendor(
BanubaPluginKeys.vendorName,
extension: BanubaPluginKeys.extensionName,
key: BanubaPluginKeys.loadEffect,
value: "put_effect_name_here"
)
agoraKit?.setExtensionPropertyWithVendor(
BanubaPluginKeys.vendorName,
extension: BanubaPluginKeys.extensionName,
key: BanubaPluginKeys.unloadEffect,
value: " "
)If the mask has parameters and you want to change them, you can do it the next way:
agoraKit?.setExtensionPropertyWithVendor(
BanubaPluginKeys.vendorName,
extension: BanubaPluginKeys.extensionName,
key: BanubaPluginKeys.evalJSMethod,
value: string
)string must be a string with method's name and parameters. You can find an example in our documentation.
How to build BanubaFiltersAgoraExtension
To build the BanubaFiltersAgoraExtension manually, please follow the steps bellow:
-
Execute
pod installto get the Banuba SDK. -
Open the
BanubaAgoraFilters.xcworkspacefile in Xcode. -
Choose File->Packages->Reset Package Cashes from Xcode menu.
-
Build the target
BanubaFiltersAgoraExtension. It will be built with your Swift version. After this you should open the section Products in the Project Navigator (the left part of the Xcode screen). Click on theBanubaFiltersAgoraExtensionwith the right click of the mouse and choose Show in Finder. Copy theBanubaFiltersAgoraExtension.frameworkfrom the folder. -
Then put the framework to the
/Frameworksfolder of theBanubaAgoraFilters.xcodeproj(or of your project). Then you can build BanubaAgoraFilters or your project.
The reconnection of the BanubaFiltersAgoraExtension.framework to the example project may be required. To do it, you should remove the BanubaFiltersAgoraExtension.framework from the Project Settings: General-> Frameworks, Libraries and Embedded Content. Then you should drag&drop the BanubaFiltersAgoraExtension.framework to this section. You should choose Embed&Sign for this framework.
Effects managing
To retrieve effects list use the following code:
let effectsPath = BanubaEffectsManager.effectsURL.path
let effectsService = EffectsService(effectsPath: effectsPath)
let effectViewModels =
effectsService
.getEffectNames()
.sorted()
.compactMap { effectName in
guard let effectPreviewImage = effectsService.getEffectPreview(effectName) else {
return nil
}
let effectViewModel = EffectViewModel(image: effectPreviewImage, effectName: effectName)
return effectViewModel
}EffectViewModel has the following properties:
class EffectViewModel {
let image: UIImage
let effectName: String?
var cancelEffectModel: Bool {
return effectName == nil
}
}