前言
生活中遇到难忘美好的瞬间,小编总是忍不住用拍照的方式来留住它,相信大家也和我一样。但我们大多数人都不是专业的摄影师或者模特,光线没选好、角度不对等等原因,导致对照片的自己不满意,该怎么办呢?这时如果手机里有个图片处理app,轻轻一点就能自动检测到照片中的人脸,然后放大眼睛加瘦脸,轻松帮我们实现美颜的效果,让美美的自己出现在保存美好记忆的照片中,是不是很棒?于是小编上网搜索解决办法,发现华为HMS ML Kit提供了人脸检测服务,集成这个服务后各种安卓机型都可以方便地实现照片美化,还原你的美丽!
应用场景
华为HMS ML Kit人脸检测服务对人脸多达855个关键点进行检测,返回人脸轮廓、眉毛、眼睛、鼻子、嘴巴、耳朵等部位的坐标以及人脸偏转角度等信息。集成人脸检测服务后开发者可以根据这些信息快速构建人脸美化的应用,或者在脸上加一些有趣的元素,增加图片的趣味性。
除了这个强大的功能外,人脸检测服务还可以识别人脸中包括眼睛是否睁开、是否戴眼镜或帽子、性别、年龄、是否有胡子等特征,集成这个功能后,可以实现比如parent control的应用,防止小朋友眼睛距离屏幕过近或看屏幕时间过长。
此外,人脸检测服务可以识别人脸多达七种表情,包括微笑、无表情、愤怒、厌恶、惊恐、悲伤和惊讶,这个功能就可以实现比如微笑抓拍这样有趣的应用。
上面这么多的能力,开发者可以按需集成。并且人脸检测服务支持图像和视频流检测,人脸跨帧跟踪,以及同时检测多张人脸,可以说是把小编能想到的能力全都具备了,真强大!下面就跟着小编一起来看看怎么集成HMS ML Kit人脸检测能力来实现瘦脸大眼吧。
开发实战
1. 开发准备
详细的准备步骤可以参考华为开发者联盟:
https://developer.huawei.com/consumer/cn/doc/development/HMS-Guides/ml-process-4
这里列举关键的开发步骤。
1.1 项目级gradle里配置Maven仓地址
buildscript {
repositories {
...
maven {url 'https://developer.huawei.com/repo/'}
}
}
dependencies {
...
classpath 'com.huawei.agconnect:agcp:1.3.1.300'
}
allprojects {
repositories {
...
maven {url 'https://developer.huawei.com/repo/'}
}
}
1.2 文件头增加配置
集成SDK后,在文件头添加配置
apply plugin: 'com.android.application'
apply plugin: 'com.huawei.agconnect'
1.3 应用级gradle里配置SDK依赖
dependencies{
// 引入基础SDK
implementation 'com.huawei.hms:ml-computer-vision-face:2.0.1.300'
// 引入人脸轮廓+关键点检测模型包
implementation 'com.huawei.hms:ml-computer-vision-face-shape-point-model:2.0.1.300'
// 引入表情检测模型包
implementation 'com.huawei.hms:ml-computer-vision-face-emotion-model:2.0.1.300'
// 引入特征检测模型包
implementation 'com.huawei.hms:ml-computer-vision-face-feature-model:2.0.1.300'
}
}
1.4 将以下语句添加到AndroidManifest.xml文件中,用于自动更新机器学习模型
<manifest
...
<meta-data
android:name="com.huawei.hms.ml.DEPENDENCY"
android:value= "face"/>
...
</manifest>
1.5 申请摄像头权限
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
2. 代码开发
2.1 使用默认参数配置,创建人脸分析器
analyzer = MLAnalyzerFactory.getInstance().getFaceAnalyzer();
2.2 通过android.graphics.Bitmap创建MLFrame对象用于分析器检测图片
MLFrame frame = MLFrame.fromBitmap(bitmap);
2.3 调用“asyncAnalyseFrame”方法进行人脸检测
Task<List<MLFace>> task = analyzer.asyncAnalyseFrame(frame);
task.addOnSuccessListener(new OnSuccessListener<List<MLFace>>() {
@Override
public void onSuccess(List<MLFace> faces) {
// 检测成功,获取脸部关键点信息。
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception e) {
// 检测失败。
}
});
2.4 通过进度条进行不同程度的大眼瘦脸处理。分别调用magnifyEye方法和smallFaceMesh方法实现大眼算法和瘦脸算法
private SeekBar.OnSeekBarChangeListener onSeekBarChangeListener = new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
switch (seekBar.getId()) {
case R.id.seekbareye: // 当大眼进度条变化时,…
case R.id.seekbarface: // 当瘦脸进度条变化时,…
}
}
}
2.5 检测完成,释放分析器
try {
if (analyzer != null) {
analyzer.stop();
}
} catch (IOException e) {
Log.e(TAG, "e=" + e.getMessage());
}
Demo效果
下面这个demo展示了大眼瘦脸的效果,怎么样,是不是很方便?
Github地址
您可以在Github上获取更详细的源码:https://github.com/HMS-Core/h...
更详细的开发指南参考华为开发者联盟官网
https://developer.huawei.com/consumer/cn/hms/huawei-mlkit
原文链接:https://developer.huawei.com/consumer/cn/forum/topicview?tid=0203360642386400907&fid=18
作者:留下落叶
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。