Android | 超简单集成HMS ML Kit实现最大脸微笑抓拍
前言
如果大家对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依赖
在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);
往期链接:快服务常见TOP3审核雷区,再不过审就要崩溃啦!
内容来源:https://developer.huawei.com/consumer/cn/forum/topicview?tid=0201256372685820478&fid=18
原作者:littlewhite
Android | 超简单集成HMS ML Kit实现最大脸微笑抓拍的更多相关文章
- 超简单集成 HMS ML Kit 实现最大脸微笑抓拍
前言 如果大家对 HMS ML Kit 人脸检测功能有所了解,相信已经动手调用我们提供的接口编写自己的 APP 啦.目前就有小伙伴在调用接口的过程中反馈,不太清楚 HMS ML Kit 文档中的 ML ...
- 超简单集成HMS ML Kit文字超分能力,一键提升文本分辨率
前言 大家有没有遇到过这种情况,在浏览微博或者公众号时看到一段有趣的文字,于是截图发到朋友圈想和好友分享.但是在发布图片时,软件会对图片强制进行压缩,导致图片分辨率下降,文字变得模糊难以阅读.那么有没 ...
- 超简单集成HMS Scan Kit扫码SDK,轻松实现扫码购
前言 在前面的文章中,我们向大家介绍了HMS Scan Kit 的快速集成方法以及HMS Scan Kit和其他开源扫码工具的竞争力对比分析,如果没有看到也没关系,文章下方的往期链接中有文章入口. ...
- 超简单集成ML kit 实现听写单词播报
背景 相信我们大家在刚开始学习一门语言的时候都有过听写,现在的小学生学语文的时候一项重要的课后作业就是听写课文中的生词,很多家长们都有这方面的经历.不过一方面这种读单词的动作相对简单,另一方面家长 ...
- 超简单集成华为HMS ML Kit文本识别SDK,一键实现账单号自动录入
前言 在之前的文章<超简单集成华为HMS Core MLKit通用卡证识别SDK,一键实现各种卡绑定>中我们给大家介绍了华为HMS ML Kit通用卡证识别技术是如何通过拍照自动识别卡 ...
- 超简单集成华为 HMS MLKit 机器学习服务:银行卡识别 SDK,一键实现银行卡绑定
前言 小编前面几期文章分别给大家介绍了使用 HMS ML Kit SDK 实现微笑抓拍.证件照 DIY.拍照翻译的功能开发(链接见文章末尾),本次小编给大家带来的是使用 HMS 机器学习服务(ML K ...
- 用华为HMS ML kit人体骨骼识别技术,Android快速实现人体姿势动作抓拍
你有没有过这种体验,拍照时对着镜头,脑子一片空白.表情僵硬.手和脚无处安放,最后拍出来的照片很是奇怪.拍照软件中的固定姿势抓拍功能可以帮助你:选择一个你想要的姿势模板,当你摆出同款姿势时,软件会进 ...
- Android超简单气泡效果
阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680最近有用到水下气泡上升效果,因此在网上查了一下资料,结果还真找到了 ...
- Android 超简单的拖动按钮 悬浮按钮 吸附按钮
第一种 第二种 第一种实现方法 xml布局 <RelativeLayout xmlns:android="http://schemas.android.com/apk/re ...
随机推荐
- POJ 3241Object Clustering曼哈顿距离最小生成树
Object Clustering Description We have N (N ≤ 10000) objects, and wish to classify them into several ...
- 集训模拟赛-1-T2
好了不要在铺垫了直接整吧就 题目拿来!!!!!!! 倒水 (water) (256MB,1s) [问题描述] 你有一个水桶(记为 0),两个杯子(记为 1,2).水桶中的水量无限,容量也无限.1 号杯 ...
- Java——多线程之方法详解
Java多线程系列文章是Java多线程的详解介绍,对多线程还不熟悉的同学可以先去看一下我的这篇博客Java基础系列3:多线程超详细总结,这篇博客从宏观层面介绍了多线程的整体概况,接下来的几篇文章是对多 ...
- springmvc与struts2执行流程比较
之前写过一篇struts2的执行流程的文章了,这里对struts2的流程就不做过多的分析,这篇文章主要分析spring-mvc的执行流程以 及struts2与spring-mvc的差别. 1.stru ...
- Nacos系列(一):Nacos环境安装及Hello World示例
现在微服务架构越来越火,微服务架构中比较重要的一项就是配置中心, Nacos是阿里巴巴的一个开源项目,它的其中一个功能就是可以作为配置中心,实现配置的动态变更.历史版本对比.配置回滚等功能. 更多的描 ...
- C# 集合ArrayList :可以存储任何类型的数组,的基本用法
public void main() { //可以存储任何类型的数组 ArrayList alist = new ArrayList(); AddData(alist); RemoveData(ali ...
- 腾讯面试居然跟我扯了半小时的CountDownLatch
一个长头发.穿着清爽的小姐姐,拿着一个崭新的Mac笔记本向我走来,看着来势汹汹,我心想着肯定是技术大佬吧!但是我也是一个才华横溢的人,稳住我们能赢. 面试官:看你简历上有写熟悉并发编程,CountDo ...
- HDU 2010 (水)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2010 题目大意:给你段连续的数,把满足条件(数字 每一位的3 == 该数字)的数输出,就是水仙花数 解 ...
- 09JAVA基础-常用类
1.Scanner //获取键盘输入 Scanner sc = new Scanner(System.in); int num = sc.nextIn(); String str = sc.nextL ...
- Linux基本命令(文件基操)
1. 查询目录内容:ls [选项] [文件或者目录] -a 显示所有文件,包括隐藏文件 -l 显示详细信息 -d 查看目录属性 -h 人性化显示文件大小 -i 显示节点ID,inode ls -ld ...