小言_互联网的博客

不能当摄影师的程序员不是好男票!10分钟get专属她的“美颜相机”

424人阅读  评论(0)

总是被女朋友吐槽拍照技术不佳?是不是脑海中,已经浮现出手牵手跟女友去迪士尼游玩时,女友开心的让你给他拍照,殊不知不给力的你,拍出的照片不仅脸大腿短不对焦,还一米五既视感,瞬间惹恼女友。

这点小场面怎么会难倒我们的程序员?身为一名程序员,产品经理的需求都可以满足,女友的需求还不分分钟搞定?快速打造一款专属她的“美颜相机”,轻松实现瘦脸、大眼等功能,让你的女朋友随心操作,瞬间实现美颜效果。

“美颜相机”到底是如何开发的?原理又是什么?

轻轻一点就能自动检测到照片中的人脸,然后放大眼睛加瘦脸,实现美颜的效果。这到底是如何实现的呢?

原理很简单,利用华为机器学习服务中的人脸检测功能对人脸多达855个关键点进行检测,返回人脸轮廓、眉毛、眼睛、鼻子、嘴巴、耳朵等部位的坐标以及人脸偏转角度等信息,这样我们就可以根据这些信息快速构建一款“美颜相机”,对人脸进行美化,甚至可以在脸上添加一些有趣的元素,比如可爱的贴纸等,增加图片的趣味性。

10分钟get“美颜相机”开发教程!

 1. 开发准备

详细的准备步骤可以参考华为开发者联盟,这里列举关键的开发步骤。

1.1 项目级gradle里配置Maven仓地址


  
  1. buildscript {
  2. repositories {
  3. ...
  4. maven {url 'https://developer.huawei.com/repo/'}
  5. }
  6. }
  7. dependencies {
  8. ...
  9. classpath 'com.huawei.agconnect:agcp:1.3.1.300'
  10. }
  11. allprojects {
  12. repositories {
  13. ...
  14. maven {url 'https://developer.huawei.com/repo/'}
  15. }
  16. }

1.2 文件头增加配置

集成SDK后,在文件头添加配置

 apply plugin: 'com.android.application'	 apply plugin: 'com.android.application'

1.3 应用级gradle里配置SDK依赖


  
  1. dependencies{
  2. // 引入基础SDK
  3. implementation 'com.huawei.hms:ml-computer-vision-face:2.0.1.300'
  4. // 引入人脸轮廓+关键点检测模型包
  5. implementation 'com.huawei.hms:ml-computer-vision-face-shape-point-model:2.0.1.300'
  6. // 引入表情检测模型包
  7. implementation 'com.huawei.hms:ml-computer-vision-face-emotion-model:2.0.1.300'
  8. // 引入特征检测模型包
  9. implementation 'com.huawei.hms:ml-computer-vision-face-feature-model:2.0.1.300'
  10. }

1.4 将以下语句添加到AndroidManifest.xml文件中,用于自动更新机器学习模型


  
  1. <manifest
  2. ...
  3. < meta-data
  4. android:name= "com.huawei.hms.ml.DEPENDENCY"
  5. android:value= "face"/>
  6. ...
  7. </manifest>

 1.5 申请摄像头权限


  
  1. <uses-permission android:name="android.permission.CAMERA" />
  2. <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”方法进行人脸检测


  
  1. Task< List<MLFace>> task = analyzer.asyncAnalyseFrame(frame);
  2. task.addOnSuccessListener( new OnSuccessListener< List<MLFace>>() {
  3. @Override
  4. public void onSuccess( List<MLFace> faces) {
  5. // 检测成功,获取脸部关键点信息。
  6. }
  7. }).addOnFailureListener( new OnFailureListener() {
  8. @Override
  9. public void onFailure( Exception e) {
  10. // 检测失败。
  11. }
  12. });

2.4  通过进度条进行不同程度的大眼瘦脸处理。

分别调用magnifyEye方法和smallFaceMesh方法实现大眼算法和瘦脸算法


  
  1. private SeekBar.OnSeekBarChangeListener onSeekBarChangeListener = new SeekBar.OnSeekBarChangeListener() {
  2. @Override
  3. public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
  4. switch (seekBar.getId()) {
  5. case R.id. seekbareye: // 当大眼进度条变化时,…
  6. case R.id. seekbarface: // 当瘦脸进度条变化时,…
  7. }
  8. }
  9. }

2.5 检测完成,释放分析器


  
  1. try {
  2. if (analyzer != null) {
  3. analyzer .stop();
  4. }
  5. } catch (IOException e) {
  6. Log .e(TAG, "e=" + e.getMessage());
  7. }

先来看看简单款“美颜相机”的Demo吧!

怎么样,你学会了吗?快速搞定一款女朋友限定版“美颜相机”,不仅可以实现大眼瘦脸功能,你也可以添加可爱小贴纸功能,微笑抓拍功能等等, 这些都可以通过接入机器学习服务快速实现!如果你也想在女朋友面前成功秀一把,请下载GitHub源码

>>访问华为开发者联盟官网,了解更多相关内容

>>获取开发指导文档

>>华为移动服务开源仓库地址:GitHubGitee

关注我们,第一时间了解华为移动服务最新技术资讯~

 


转载:https://blog.csdn.net/HUAWEI_HMSCore/article/details/113857313
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场