前言
生存中遇到难忘美妙的霎时,小编总是忍不住用拍照的形式来留住它,置信大家也和我一样。但咱们大多数人都不是业余的摄影师或者模特,光线没选好、角度不对等等起因,导致对照片的本人不称心,该怎么办呢?这时如果手机里有个图片解决 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
作者:留下落叶