老是被女友吐槽拍照技術不佳?是否是腦海中,已經浮現出手牽手跟女朋友去迪士尼遊玩時,女朋友開心的讓你給他拍照,卻不知不給力的你,拍出的照片不只臉大腿短不對焦,還一米五既視感,瞬間惹惱女朋友。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源碼。若是經過教程的學習,你成功開發出一款「美顏相機」,說不定「最佳程序員男朋友」就是你!
>>訪問華爲開發者聯盟官網,瞭解更多相關內容
>>獲取開發指導文檔
>>華爲移動服務開源倉庫地址:GitHub、Gitee
點擊右上角頭像右方的關注,第一時間瞭解華爲移動服務最新技術~