前言
生活中遇到難忘美好的瞬間,小編總是忍不住用拍照的方式來留住它,相信大家也和我一樣。但我們大多數人都不是專業的攝影師或者模特,光線沒選好、角度不對等等原因,導緻對照片的自己不滿意,該怎麼辦呢?這時如果手機裡有個圖檔處理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 使用預設參數配置,建立人臉分析器
2.2 通過android.graphics.Bitmap建立MLFrame對象用于分析器檢測圖檔
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/hms-ml-demo/tree/master/BeautyCamera
更詳細的開發指南參考華為開發者聯盟官網
https://developer.huawei.com/consumer/cn/hms/huawei-mlkit