前言

如果大家对 HMS ML Kit 人脸检测功能有所了解,相信已经动手调用我们提供的接口编写自己的 APP 啦。目前就有小伙伴在调用接口的过程中反馈,不太清楚 HMS ML Kit 文档中的 MLMaxSizeFaceTransactor 这个接口的使用方法。为了让大家更加深刻的了解我们的接口,方便在场景中使用,在这篇文章中小编准备抛砖引玉,大家可以打开思路,多多尝试。如果有小伙伴想要深入的了解更加全面具体的功能,请大家移步https://developer.huawei.com/consumer/cn/hms/huawei-mlkit

场景

相信大家都有在五一、十一出去游玩的经历,是不是都是这样的 people mountain people sea.

好不容易找个人少的地方,结果拍出来的照片是这样的

这样的

还有这样的

不看不知道,原来我的面部表情这么丰富。。是不是很心累?每次想要发个出去浪的朋友圈,都要在白天拍的成百上千张类似款的照片里,花上一小时才能找到一张能看的照片。。。

为了解决类似问题,HMS ML Kit 提供了追踪识别画面中最大脸的接口,能够识别图像中的最大脸,方便对跟踪图像中的”重点目标“做相关操作和处理。本文中就简单的调用 MLMaxSizeFaceTransactor 这个接口,实现最大脸微笑抓拍的功能。

开发前准备

android studio 安装

很简单,下载安装即可。具体下载链接:

Android studio 官网下载链接:https://developer.android.com/studio

Android studio安装流程参考链接:https://www.cnblogs.com/xiadewang/p/7820377.html

在项目级 gradle 里添加华为 maven 仓

打开 AndroidStudio 项目级 build.gradle 文件

增量添加如下 maven 地址:

buildscript {
     {        
        maven {url 'http://developer.huawei.com/repo/'}
    }    
}
allprojects {
    repositories {       
        maven { url 'http://developer.huawei.com/repo/'}
    }
}

在应用级的 build.gradle 里面加上 SDK 依赖

dependencies {
    implementation 'com.huawei.hms:ml-computer-vision-face-recognition-model:1.0.3.300'
    implementation 'com.huawei.hms:ml-computer-vision-face:1.0.3.300'
}

在 AndroidManifest.xml 文件里面增量添加模型自动下载

要使应用程序能够在用户从华为应用市场安装您的应用程序后,自动将最新的机器学习模型更新到用户设备,请将以下语句添加到该应用程序的 AndroidManifest.xml 文件中:

<manifest> 
    ...    
    <meta-data                     
        android:name="com.huawei.hms.ml.DEPENDENCY"          
        android:value= " face"/> 
...    
</manifest>

在 AndroidManifest.xml 文件里面申请相机、访问网络和存储权限

<!--相机权限--> 
<uses-feature android:name="android.hardware.camera" />
<uses-permission android:name="android.permission.CAMERA" />
<!--写权限--> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

代码开发关键步骤

动态权限申请

@Override 
public void onCreate(Bundle savedInstanceState) { 
……
    if (!allPermissionsGranted()) {
        getRuntimePermissions();
}
}

创建人脸识别检测器

可以通过人脸识别检测配置器“MLFaceAnalyzerSetting”创建人脸识别检测器。

MLFaceAnalyzerSetting setting =
                new MLFaceAnalyzerSetting.Factory()
                        .setFeatureType(MLFaceAnalyzerSetting.TYPE_FEATURES)
                        .setKeyPointType(MLFaceAnalyzerSetting.TYPE_UNSUPPORT_KEYPOINTS)
                        .setMinFaceProportion(0.1f)
                        .setTracingAllowed(true)
                        .create();

通过 MLMaxSizeFaceTransactor.Creator 创建“MLMaxSizeFaceTransactor”对象用于处理检测到的最大脸,其中 objectCreateCallback() 方法是在检测到对象的时候调用的,objectUpdateCallback() 方法是在对象更新了的时候调用的,在方法里通过 Overlay 在识别到的最大人脸上标记了一个方块,并通过检测结果获取 MLFaceEmotion 来识别微笑表情触发拍照。

MLMaxSizeFaceTransactor transactor = new MLMaxSizeFaceTransactor.Creator(analyzer, new MLResultTrailer<MLFace>() {
@Override
    public void objectCreateCallback(int itemId, MLFace obj) {
     LiveFaceAnalyseActivity.this.overlay.clear();
        if (obj == null) {
         return;
        }
        LocalFaceGraphic faceGraphic =
         new LocalFaceGraphic(LiveFaceAnalyseActivity.this.overlay, obj, LiveFaceAnalyseActivity.this);
        LiveFaceAnalyseActivity.this.overlay.addGraphic(faceGraphic);
        MLFaceEmotion emotion = obj.getEmotions();
        if (emotion.getSmilingProbability() > smilingPossibility) {
         safeToTakePicture = false;
            mHandler.sendEmptyMessage(TAKE_PHOTO);
        }
    }     @Override
    public void objectUpdateCallback(MLAnalyzer.Result<MLFace> var1, MLFace obj) {
     LiveFaceAnalyseActivity.this.overlay.clear();
        if (obj == null) {
         return;
         }
         LocalFaceGraphic faceGraphic =
          new LocalFaceGraphic(LiveFaceAnalyseActivity.this.overlay, obj, LiveFaceAnalyseActivity.this);
         LiveFaceAnalyseActivity.this.overlay.addGraphic(faceGraphic);
         MLFaceEmotion emotion = obj.getEmotions();
         if (emotion.getSmilingProbability() > smilingPossibility && safeToTakePicture) {
          safeToTakePicture = false;
             mHandler.sendEmptyMessage(TAKE_PHOTO);
         }
    }     @Override
    public void lostCallback(MLAnalyzer.Result<MLFace> result) {
     LiveFaceAnalyseActivity.this.overlay.clear();
    }     @Override
    public void completeCallback() {
     LiveFaceAnalyseActivity.this.overlay.clear(); }
}).create();
this.analyzer.setTransactor(transactor);

通过 LensEngine.Creator 创建 LensEngine 实例进行视频流的人脸检测检测

this.mLensEngine = new LensEngine.Creator(context, this.analyzer).setLensType(this.lensType)
                .applyDisplayDimension(640, 480)
                .applyFps(25.0f)
                .enableAutomaticFocus(true)
                .create();

启动相机预览进行人脸检测

this.mPreview.start(this.mLensEngine, this.overlay);

Demo 效果

demo 中显示当检测到画面中最大脸微笑时,即启动自动抓拍。

往期链接:

第一期:用华为 HMS MLKit SDK 三十分钟在安卓上开发一个微笑抓拍神器

https://developer.huawei.com/consumer/cn/forum/topicview?tid=0201198419687680377&fid=18

第二期:安卓开发实战,用华为 HMS MLKit 图像分割 SDK 开发一个证件照 DIY 小程序

https://developer.huawei.com/consumer/cn/forum/topicview?tid=0201203408959360433&fid=18

第三期:安卓开发实战,用 HMS MLKit 华为机器学习服务开发一个拍照翻译小程序

https://developer.huawei.com/consumer/cn/forum/topicview?tid=0201209905778120045&fid=18

第四期:超简单集成华为 HMS MLKit 机器学习服务 银行卡识别 SDK,一键实现银行卡绑定

https://developer.huawei.com/consumer/cn/forum/topicview?tid=0201217390745110144&fid=18

第五期:超简单集成华为 HMS Core MLKit 通用卡证识别SDK,一键实现各种卡绑定

https://developer.huawei.com/consumer/cn/forum/topicview?tid=0201226181206630022&fid=18

第六期:超简单集成 HMS ML Kit 二代身份证识别,一键实名认证

https://developer.huawei.com/consumer/cn/forum/topicview?tid=0201226149614940020&fid=18

第七期:一文搞懂华为 HMS ML Kit 文本识别、银行卡识别、通用卡证识别、身份证识别

https://developer.huawei.com/consumer/cn/forum/topicview?tid=0201242744680220246&fid=18

第八期:Zxing 与华为 HMS Scan Kit 对比分析

https://developer.huawei.com/consumer/cn/forum/topicview?tid=0201246151427920285&fid=18

下期预告:

基于华为机器学习服务,后面还会有一系列的实战经验分享,大家可以持续关注~

超简单集成 HMS ML Kit 实现最大脸微笑抓拍的更多相关文章

  1. Android | 超简单集成HMS ML Kit实现最大脸微笑抓拍

    前言   如果大家对HMS ML Kit 人脸检测功能有所了解,相信已经动手调用我们提供的接口编写自己的APP啦.目前就有小伙伴在调用接口的过程中反馈,不太清楚HMS ML Kit 文档中的MLMax ...

  2. 超简单集成HMS ML Kit文字超分能力,一键提升文本分辨率

    前言 大家有没有遇到过这种情况,在浏览微博或者公众号时看到一段有趣的文字,于是截图发到朋友圈想和好友分享.但是在发布图片时,软件会对图片强制进行压缩,导致图片分辨率下降,文字变得模糊难以阅读.那么有没 ...

  3. 超简单集成HMS Scan Kit扫码SDK,轻松实现扫码购

    前言   在前面的文章中,我们向大家介绍了HMS Scan Kit 的快速集成方法以及HMS Scan Kit和其他开源扫码工具的竞争力对比分析,如果没有看到也没关系,文章下方的往期链接中有文章入口. ...

  4. 超简单集成ML kit 实现听写单词播报

    背景   相信我们大家在刚开始学习一门语言的时候都有过听写,现在的小学生学语文的时候一项重要的课后作业就是听写课文中的生词,很多家长们都有这方面的经历.不过一方面这种读单词的动作相对简单,另一方面家长 ...

  5. 超简单集成华为HMS ML Kit文本识别SDK,一键实现账单号自动录入

    前言   在之前的文章<超简单集成华为HMS Core MLKit通用卡证识别SDK,一键实现各种卡绑定>中我们给大家介绍了华为HMS ML Kit通用卡证识别技术是如何通过拍照自动识别卡 ...

  6. 超简单集成华为 HMS MLKit 机器学习服务:银行卡识别 SDK,一键实现银行卡绑定

    前言 小编前面几期文章分别给大家介绍了使用 HMS ML Kit SDK 实现微笑抓拍.证件照 DIY.拍照翻译的功能开发(链接见文章末尾),本次小编给大家带来的是使用 HMS 机器学习服务(ML K ...

  7. 用华为HMS ML kit人体骨骼识别技术,Android快速实现人体姿势动作抓拍&nbsp;

      你有没有过这种体验,拍照时对着镜头,脑子一片空白.表情僵硬.手和脚无处安放,最后拍出来的照片很是奇怪.拍照软件中的固定姿势抓拍功能可以帮助你:选择一个你想要的姿势模板,当你摆出同款姿势时,软件会进 ...

  8. 手把手教你集成华为机器学习服务(ML Kit)人脸检测功能

    当给自己拍一张美美的自拍照时,却发现照片中自己的脸不够瘦.眼睛不够大.表情不够丰富可爱-如果此时能够一键美颜瘦脸并且添加可爱的贴纸的话,是不是很棒? 当家里的小孩观看iPad屏幕时间过长或者眼睛离屏幕 ...

  9. 超简单!asp.net core前后端分离项目使用gitlab-ci持续集成到IIS

    现在好多使用gitlab-ci的持续集成的教程,大部分都是发布到linux系统上的,但是目前还是有很大一部分企业使用的都是windows系统使用IIS在部署.NET应用程序.这里写一下如何使用gitl ...

随机推荐

  1. ArcGIS把导入的shp按渔网区块分割成更小的文件

    前言 前端地图的开发需要导入城市的3D建筑白模,如果直接导入整个城市的json,文件大小高达76M,浏览器会直接崩溃,所以需要用ArcGIS分割成更小的文件后再给前端导入展示. ArcGIS版本:10 ...

  2. 龙芯 3A4000 安装 Debian10 (via debootstrap)

    由于一些原因,Debian 的内核不能直接在龙芯的 cpu 上使用.据悉 Linux 5.7 kernel 改进了对龙芯的支持,不久的将来我们应该就能更愉快地在龙芯上运行 Debian 了. 感谢龙芯 ...

  3. 【reverse】逆向2 寄存器与内存

    [reverse]逆向2 寄存器与内存 1.通用寄存器 主要用途其实没必要记下来,因为只是CPU建议你这么做. 寄存器需要按照顺序被下来 32位就是可以存32个0或1 所以存储范围就是0-0xFFFF ...

  4. csapp lab2 拆炸弹

    1. 实验内容 包含一个二进制应用bomb,需要根据该应用猜测程序的运行过程.程序主体包含了六个函数phase_1到phase_6,每个函数会根据用户的输入做出反应,当输入符合要求时,会炸弹拆解成功, ...

  5. java匿名内部类概述

    1 package face_09; 2 /* 3 * 匿名内部类.就是内部类的简写格式. 4 * 必须有前提: 5 * 内部类必须继承或者实现一个外部类或者接口. 6 * 匿名内部类:其实就是一个匿 ...

  6. Excel与MySQL数据库的导入与导出

    应用场景 在许多时候,我们希望数据能够很好地在各个系统之间转移,同时便于非专业人员阅读,如果程序员一点点打字导出的话,不知道要打到什么时候,于是我们便采用日常工作中常用的Excel表格来作为媒介,将数 ...

  7. 服务器+nextcloud搭建自己的私有云盘

    简介 Nextcloud是一款开源免费的私有云存储网盘项目,可以让你快速便捷地搭建一套属于自己或团队的云同步网盘,从而实现跨平台跨设备文件同步.共享.版本控制.团队协作等功能.它的客户端覆盖了Wind ...

  8. 在 Dapr 中使用 Cron 绑定的计划任务

    我昨天写了一篇关于在微服务应用程序中采用Dapr的好处的文章<从服务之间的调用来看 我们为什么需要Dapr>[1], 在那篇文章中,我们专注于"服务调用"构建块 [2] ...

  9. ApacheCN NodeJS 译文集 20211204 更新

    Node API 开发入门指南 零.前言 一.Node.js 简介 二.构建 API--第 1 部分 三.构建 API--第 2 部分 React TypeScript Node 全栈开发 零.序言 ...

  10. 2020-9-29 T3

    题意:给定一颗大小为 \(n(n \le 5 \times 10 ^ 4)\) 的树,保证树的生成方式随机,你需要选定两个点 \(x, y\),最小化: \[\sum\limits_{i = 1} ^ ...