手机摄像头技术正在不断发展,广角镜头和光学图像稳定等等。因此,视频录制和移动图像编辑应用程序正在相继出现,利用技术来培养更大的创造力。
在这些应用程序中,由于流媒体和观众的数量激增,直播应用程序正在以巨大的势头增长。
直播应用需要的一项功能是人像修饰。虽然手机摄像头参数已经惊人,但摄像头拍摄的人像也可能因各种原因而失真。例如,在昏暗的环境中,主播的肤色可能会显得很暗,而相机镜头的宽度和拍摄角度等因素可能会使它们在视频中看起来很宽。此类问题可能会影响观众对直播视频的感受以及主播对自己的感受,这表明需要人像修饰功能来解决这些问题。
我开发了一个具有此类功能的直播演示应用程序。在开发它之前,我发现了为直播应用程序开发此功能的两个问题。
此功能必须能够实时处理视频图像。图像输入与输出之间的长时间会影响流媒体与其观众之间的交互。 此功能需要高水平的人脸检测精度,以防止处理后的人像变形,或修饰区域出现在意外部位上。
为了解决这些挑战,我测试了几种可用的人像修饰解决方案,并确定了HMS Core视频编辑器套件的美颜功能。让我们看看该功能是如何工作的,以了解它如何设法应对挑战。
该能力采用CPU+NPU+GPU异构并行框架,可以实时处理视频图像。能力算法运行速度更快,但需要的功率更少。
具体来说,美颜功能以设备到设备的方式提供超过 50 fps 的处理频率。对于包含多个人脸的视频,该功能最多可以同时处理两个人脸,其区域在视频中最大。这只需十毫秒即可完成。
该功能使用 855 个密集的面部特征点,以便它可以准确识别人脸,从而能够使其效果适应在直播期间移动过快或角度过大的人脸。
为了确保出色的修饰效果,美容功能采用详细的面部分割和中性灰色来软化皮肤。结果,最终的效果看起来非常真实。
不仅如此,该功能还配备了多个可配置的修饰参数。我认为,这个功能是体贴的,使该功能提供更好的用户体验——考虑到不可能有一个可以满足所有用户的人像修饰灵丹妙药。像我这样的开发者可以直接向用户提供这些参数(包括皮肤软化、肤色调整、面部轮廓调整、眼睛尺寸调整、眼睛亮度调整等参数),而不是自己费力地设计参数。这为微调视频图像中的肖像提供了更多时间。
了解了该功能的这些功能后,我相信它可以帮助我为我的演示应用程序创建肖像修饰功能。那么,让我们继续看看我是如何开发我的应用程序的。
API 密钥:调用方法设置密钥,只需在应用初始化期间执行一次。
HVEAIApplication.getInstance().setApiKey("your ApiKey");
API密钥是从应用市场连接获取的,接口是在平台上注册应用时生成的。
值得注意的是,无需在应用代码中对密钥进行硬编码,也无需将密钥存储在应用的配置文件中。处理此问题的正确方法是将其存储在云中,并在应用程序运行时获取它。
访问令牌:调用方法设置令牌。
此操作在应用初始化期间仅执行一次。
HVEAIApplication.getInstance().setAccessToken("your access token");
访问令牌由应用本身生成。具体来说,调用此 API,然后获取应用级访问令牌。
// Create an HVEAIBeauty instance.
HVEAIBeauty hveaiBeauty = new HVEAIBeauty();
// Initialize the engine of the capability.
hveaiBeauty.initEngine(new HVEAIInitialCallback() {
@Override
public void onProgress(int progress) {
// Callback when the initialization progress is received.
}
@Override
public void onSuccess() {
// Callback when engine initialization is successful.
}
@Override
public void onError(int errorCode, String errorMessage) {
// Callback when engine initialization failed.
}
});
// Initialize the runtime environment of the capability in OpenGL. The method is called in the rendering thread of OpenGL.
hveaiBeauty.prepare();
// Set textureWidth (width) and textureHeight (height) of the texture to which the capability is applied. This method is called in the rendering thread of OpenGL after initialization or texture change.
// resize is a parameter, indicating the width and height. The parameter value must be greater than 0.
hveaiBeauty.resize(textureWidth, textureHeight);
// Configure the parameters for skin softening, skin tone adjustment, face contour adjustment, eye size adjustment, and eye brightness adjustment. The value of each parameter ranges from 0 to 1.
HVEAIBeautyOptions options = new HVEAIBeautyOptions.Builder().setBigEye(1)
.setBlurDegree(1)
.setBrightEye(1)
.setThinFace(1)
.setWhiteDegree(1)
.build();
// Update the parameters, after engine initialization or parameter change.
hveaiBeauty.updateOptions(options);
// Apply the capability, by calling the method in the rendering thread of OpenGL for each frame. inputTextureId: ID of the input texture; outputTextureId: ID of the output texture.
// The ID of the input texture should correspond to a face that faces upward.
int outputTextureId = hveaiBeauty.process(inputTextureId);
// Release the engine.
hveaiBeauty.releaseEngine();
开发过程到此结束,所以,现在,我们可以看看我的演示是如何工作的:
不是吹牛,但我确实认为修饰结果是理想和自然的。添加所有效果后,处理后的肖像不会变形。
我有我想要的解决方案来创建肖像修饰功能。我相信此解决方案也可以在图像编辑应用程序或任何需要纵向修饰的应用程序中发挥重要作用。我很好奇你将如何使用它。现在,我要找到一种解决方案,可以为音乐播放器应用程序“修饰”音乐而不是照片,例如,它可以为歌曲添加更多宽度 - 祝我好运!
直播应用市场正在迅速扩大,受到主播和观众的各种要求。最需要的功能之一是人像修饰,用于解决人像失真和不利的视频观看体验。
与其他类型的应用相比,直播应用对人像修饰功能有两个截然不同的要求,分别是视频图像的实时处理和准确的人脸检测。HMS Core视频编辑器套件的美颜功能通过使用CPU + NPU + GPU异构并行框架和855个密集面部特征点等技术有效地解决了这些问题。该功能还提供了几个可自定义的参数,使不同的用户能够根据需要修饰他们的肖像。最重要的是,该功能可以轻松集成,帮助开发需要人像修饰功能的应用程序。