前言


  各位应用程序开发者有没有在后台收到过家长们的反馈? 希望能够提供一个开关,采取一些措施保护小孩的眼睛,因为现在小孩子的近视率越来越高,和他们长时间近距离盯着屏幕有很大的关系。最近有一个海外的客户通过集成了ML kit 实现了防范小朋友眼睛离屏幕过近,或者玩游戏时间过长的父母类控制类功能。

场景


  父母需要这个功能防止小朋友眼睛距离屏幕过近,或者小朋友看屏幕时间过长。

开发前准备


在项目级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:1.0.4.300'implementation 'com.huawei.hms:ml-computer-vision-face-shape-point-model:1.0.4.300'implementation 'com.huawei.hms:ml-computer-vision-face-emotion-model:1.0.4.300'implementation 'com.huawei.hms:ml-computer-vision-face-feature-model:1.0.4.300'
}

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

<uses-feature android:name="android.hardware.camera" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

动态权限申请

动态权限申请
if (!(ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED)) {requestCameraPermission();
}

代码开发关键步骤


创建人体脸部分析器。

MLFaceAnalyzer analyzer = MLAnalyzerFactory.getInstance().getFaceAnalyzer();

创建LensEngine实例用于视频流的人脸检测,该类由ML Kit SDK提供,用于捕捉相机动态视频流并传入分析器。

LensEngine mLensEngine = new LensEngine.Creator(getApplicationContext(), analyzer).setLensType(LensEngine.BACK_LENS).applyDisplayDimension(640, 480).applyFps(30.0f).enableAutomaticFocus(true).create();

开发者创建识别结果处理类“FaceAnalyzerTransactor”,该类实现MLAnalyzer.Result接口,使用此类中的transactResult方法获取人脸呈现在屏幕上的检测结果,并根据手机屏幕的宽高比例与呈现在屏幕上脸部的宽高比例进行对比,如果呈现在屏幕前的人脸所占比率过大,则锁屏

public class FaceAnalyzerTransactor implements MLAnalyzer.MLTransactor<MLFace> {@Overridepublic void transactResult(MLAnalyzer.Result<MLFace> results) {SparseArray<MLFace> items = results.getAnalyseList();// 开发者根据需要处理识别结果,需要注意,这里只对检测结果进行处理。// 不可调用ML kit提供的其他检测相关接口。if (items != null) {MLFace features = items.get(0);if (features == null) return;BigDecimal bigPhoneWidth = new BigDecimal(Float.toString(640));BigDecimal bigPhoneHeight = new BigDecimal(Float.toString(480));float phoneRatio = bigPhoneWidth.multiply(bigPhoneHeight).floatValue();BigDecimal bigFaceWidth = new BigDecimal(Float.toString(features.getWidth()));BigDecimal bigFaceHeight = new BigDecimal(Float.toString(features.getHeight()));float faceRatio = bigFaceWidth.multiply(bigFaceHeight).floatValue();BigDecimal bigPhoneRatio = new BigDecimal(Float.toString(phoneRatio));BigDecimal bigFaceRatio = new BigDecimal(Float.toString(faceRatio));final float ratio = bigPhoneRatio.divide(bigFaceRatio, 2, BigDecimal.ROUND_HALF_EVEN).floatValue();BigDecimal bigRatio = new BigDecimal(Float.toString(ratio));BigDecimal schedule = new BigDecimal(Float.toString(10));float scheduleRatio = bigRatio.multiply(schedule).floatValue();final int realRatio = Math.round(scheduleRatio);int distance = Integer.parseInt(mDistance);if (distance <= 6)distance = 6;if (distance >= realRatio) {// 锁屏提示,距离屏幕过近,屏幕锁屏} else {runOnUiThread(new Runnable() {@Overridepublic void run() {// 缓慢靠近时提示,当下距离屏幕前的距离}});}}}@Overridepublic void destroy() {// 检测结束回调方法,用于释放资源等。release();}
}

设置识别结果处理器,实现分析器与结果处理器的绑定

analyzer.setTransactor(new FaceAnalyzerTransactor());

调用run方法,启动相机,读取视频流,进行识别。

SurfaceView mSurfaceView = findViewById(R.id.surface_view);try {lensEngine.run(mSurfaceView.getHolder());
} catch (IOException e) {// 异常处理lensEngine.release();lensEngine = null;
}

检测完成,停止分析器,释放检测资源

if (mLensEngine != null) {mLensEngine.release();
}
if (analyzer != null) {try {analyzer.stop();} catch (IOException e) {// 异常处理}
}maven地址
buildscript {repositories {maven { url 'https://developer.huawei.com/repo/' }}
}
allprojects {repositories {maven { url 'https://developer.huawei.com/repo/' }}
}

Demo



原文链接:https://developer.huawei.com/consumer/cn/forum/topicview?tid=0203325260088000089&fid=18

原作者:旭小夜

超简单集成HMS ML Kit 实现parental control相关推荐

  1. 超简单集成HMS ML Kit二代身份证识别,一键实名认证

    前言 就在近期华为HMS ML Kit 发布了1.0.3.30版本,ML Kit在原有通用OCR功能的基础上,又新增了银行卡识别(BCR)和二代身份证识别(ICR).今天小编就给大家介绍一下其中的IC ...

  2. 【转载】超简单集成HMS ML Kit 人脸检测实现可爱2D贴纸

    文章目录 前言 场景 开发前准备 在项目级gradle里添加华为maven仓 在应用级的build.gradle里面加上SDK依赖 在AndroidManifest.xml文件里面申请相机.访问网络和 ...

  3. android 贴纸 源码,超简单集成HMS ML Kit 人脸检测实现可爱贴纸

    前言 在这个美即真理.全民娱乐的时代,可爱有趣的人脸贴纸在各大美颜软件中得到了广泛的应用,现在已经不仅局限于相机美颜类软件中,在社交.娱乐类的app中对人脸贴纸.AR贴纸的需求也非常广泛.本文详细介绍 ...

  4. android自带抓拍算法,Android | 超简单集成HMS ML Kit实现最大脸微笑抓拍

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

  5. 超简单集成HMS ML套件二代身份证识别,一键实名认证

    前言 就在近期华为HMS ML Kit发布了1.0.3.30版本,ML Kit在原有通用OCR功能的基础上,又添加了银行卡识别(BCR)和二代身份识别(ICR).今天小编就给ML kit除了提供语言相 ...

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

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

  7. 超简单集成HMS Core ML Kit场景识别,构建相册管理新模式

    前言 "给你看下我之前去景区玩拍的照片,风景很好" "嗯嗯,我正好也准备出去玩,快分享下" -- "照片呢,还没找到吗?" "等会 ...

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

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

  9. 美颜神器——快速集成华为HMS ML Kit人脸检测实现大眼瘦脸

    前言 生活中遇到难忘美好的瞬间,小编总是忍不住用拍照的方式来留住它,相信大家也和我一样.但我们大多数人都不是专业的摄影师或者模特,光线没选好.角度不对等等原因,导致对照片的自己不满意,该怎么办呢?这时 ...

最新文章

  1. Android 隐式跳转(Activity的隐式跳转)
  2. 公开课报名 | 详解CNN-pFSMN模型以及在语音识别中的应用
  3. apache tomcat下32还是64_linux平台下Tomcat的安装与优化
  4. linux jenkins远程脚本,在Jenkins中配置执行远程shell命令(转)
  5. libevent中事件的添加与删除
  6. IT员工应该向谁汇报工作,CFO or CEO?
  7. Wireshark抓取RTP包,还原语音
  8. python中for循环的用法_浅谈Python的for循环
  9. 六十三、SpringBoot中的日志框架SLF4j的使用
  10. SSM + AJAX + JSON 动态下拉框
  11. 面试题—Redis篇
  12. touch事件总结,监听屏幕点击事件
  13. c/c++中指针参数如何传递内存!
  14. preprocessing.StandardScaler中fit、fit_transform、transform的区别
  15. 可扩展机器学习——分类——点击率预测(Click-through Rate Prediction)
  16. IT转型之路(一) 迷茫、困惑
  17. 人生感悟:影响人成功和幸福的21点
  18. 常用布局方式与常用css
  19. 原来,“空三加密”竟是加了这些“密”!
  20. Java中统计字符个数

热门文章

  1. [鲁林希] 学习动力篇
  2. HIT-ICS大作业论文
  3. Linux忘记root密码解决方法
  4. MongoDB配置副本集(含Arbiter)
  5. 使用unity的Microphone接口进行录音时遇到的相关问题
  6. 爱心 (css动画)
  7. win10 条件下在anaconda中安装face_recognition(超简单,亲测有效)
  8. python 调用函数实现——斐波纳契数列
  9. iphone投屏老是显示无法连接服务器,iPhone 无法投屏到电视如何解决?
  10. 程序员这个职业已经不香了吗?从业10年程序员告诉你真实情况