不能當攝影師的程序員不是好男票!10分鐘get專屬她的「美顏相機」!

老是被女友吐槽拍照技術不佳?是否是腦海中,已經浮現出手牽手跟女朋友去迪士尼遊玩時,女朋友開心的讓你給他拍照,卻不知不給力的你,拍出的照片不只臉大腿短不對焦,還一米五既視感,瞬間惹惱女朋友。java

這點小場面怎麼會難倒咱們的程序員?身爲一名程序員,產品經理的需求均可以知足,女朋友的需求還不分分鐘搞定?快速打造一款專屬她的「美顏相機」,輕鬆實現瘦臉、大眼等功能,讓你的女友隨心操做,瞬間實現美顏效果!android

「美顏相機」究竟是如何開發的?原理又是什麼?

輕輕一點就能自動檢測到照片中的人臉,而後放大眼睛加瘦臉,實現美顏的效果。這究竟是如何實現的呢?git

原理很簡單,利用華爲機器學習服務中的人臉檢測功能,對人臉多達855個關鍵點進行檢測,返回人臉輪廓、眉毛、眼睛、鼻子、嘴巴、耳朵等部位的座標以及人臉偏轉角度等信息,這樣咱們就能夠根據這些信息快速構建一款「美顏相機」,對人臉進行美化,甚至能夠在臉上添加一些有趣的元素,好比可愛的貼紙等,增長圖片的趣味性。程序員

10分鐘get「美顏相機」開發教程!

1. 開發準備

詳細的準備步驟能夠參考華爲開發者聯盟,這裏列舉關鍵的開發步驟。
1.1 項目級gradle裏配置Maven倉地址github

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.android.application'

1.3 應用級gradle裏配置SDK依賴json

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文件中,用於自動更新機器學習模型app

<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  使用默認參數配置,建立人臉分析器async

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吧!

怎麼樣,你學會了嗎?快速搞定一款女友限定版「美顏相機」,不只能夠實現大眼瘦臉功能,你也能夠添加可愛小貼紙功能,微笑抓拍功能等等, 這些均可以經過接入機器學習服務快速實現!

若是你也想在女友面前成功秀一把,請下載GitHub源碼。若是經過教程的學習,你成功開發出一款「美顏相機」,說不定「最佳程序員男朋友」就是你!

>>訪問華爲開發者聯盟官網,瞭解更多相關內容
>>獲取開發指導文檔
>>華爲移動服務開源倉庫地址:GitHubGitee

點擊右上角頭像右方的關注,第一時間瞭解華爲移動服務最新技術~

相關文章
相關標籤/搜索