写点什么

Android--- 教你如何用三十分钟在安卓上开发一个微笑抓拍神器

用户头像
Android架构
关注
发布于: 2021 年 11 月 05 日

2、代码开发

2.1 创建人脸分析器,检测到微笑后进行拍照

检测后拍照:


  1. 进行分析器参数配置

  2. 把分析器参数配置传给分析器

  3. 在 analyzer.setTransacto 内通过重写 transactResult 处理人脸识别后的内容,人脸识别后会返回一个微笑的置信度(简单可以理解为是微笑的概率),只要设置大于一定置信度进行拍照就可以了。


private MLFaceAnalyzer analyzer;private void createFaceAnalyzer() {MLFaceAnalyzerSetting setting =new MLFaceAnalyzerSetting.Factory().setFeatureType(MLFaceAnalyzerSetting.TYPE_FEATURES).setKeyPointType(MLFaceAnalyzerSetting.TYPE_UNSUPPORT_KEYPOINTS).setMinFaceProportion(0.1f).setTracingAllowed(true).create();


this.analyzer = MLAnalyzerFactory.getInstance().getFaceAnalyzer(setting);this.analyzer.setTransactor(new MLAnalyzer.MLTransactor<MLFace>() {@Override public void destroy() {}


@Override public void transactResult(MLAnalyzer.Result<MLFace> result) {SparseArray<MLFace> faceSparseArray = result.getAnalyseList();int flag = 0;for (int i = 0; i < faceSparseArray.size(); i++) {MLFaceEmotion emotion = faceSparseArray.valueAt(i).getEmotions();if (emotion.getSmilingProbability() > smilingPossibility) {flag++;}}if (flag > faceSparseArray.size() * smilingRate && safeToTakePicture) {safeToTakePicture = false;mHandler.sendEmptyMessage(TAKE_PHOTO);}}});}


拍照存储部分:


private void takePhoto() {this.mLensEngine.photograph(null,new LensEngine.PhotographListener() {@Override public void takenPhotograph(byte[] bytes) {mHandler.sendEmptyMessage(STOP_PREVIEW);Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);saveBitmapToDisk(bitmap);}});}

2.2 创建视觉引擎,捕捉相机动态视频流后传给分析器

private


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


void createLensEngine() {Context context = this.getApplicationContext();// Create LensEnginethis.mLensEngine = new LensEngine.Creator(context, this.analyzer).setLensType(this.lensType).applyDisplayDimension(640, 480).applyFps(25.0f).enableAutomaticFocus(true).create();}

2.3 动态权限申请,挂接分析器和视觉引擎创建代码

@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.setContentView(R.layout.activity_live_face_analyse);if (savedInstanceState != null) {this.lensType = savedInstanceState.getInt("lensType");}this.mPreview = this.findViewById(R.id.preview);this.createFaceAnalyzer();this.findViewById(R.id.facingSwitch).setOnClickListener(this);// Checking Camera Permissionsif (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {this.createLensEngine();} else {this.requestCameraPermission();}}private void requestCameraPermission() {final String[] permissions = new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE};


if (!ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {ActivityCompat.requestPermissions(this, permissions, LiveFaceAnalyseActivity.CAMERA_PERMISSION_CODE);return;}}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,@NonNull int[] grantResults) {if (requestCode != LiveFaceAnalyseActivity.CAMERA_PERMISSION_CODE) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);return;}if (grantResults.length != 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {this.createLensEngine();return;}}



结束语

怎么样,开发过程是不是特别简单,30 分钟就可以开发一个新特性出来!让我们一起体验下这个多人脸微笑抓包的效果。


单人笑脸抓拍:



多人笑脸抓拍:



基于人脸检测能力,还可以做哪些功能出来,请开放你的脑洞!这里不妨再给一些提示,比如:


  1. 通过识别耳朵、眼睛、鼻子、嘴巴、眉毛等脸部特征的位置,添加一些有趣的装饰特效。

  2. 通过识别面部的轮廓,做一些夸张的变形、拉伸,生成一些有趣好玩的人像图片,或者针对轮廓区域开发美颜功能。

  3. 通过年龄识别,对儿童沉迷于电子类产品的痛点,开发一些家长管控类功能。

  4. 通过检测眼睛盯着屏幕的时长,开发护眼提示的特性。

  5. 通过随机指令(摇头、眨眼、张嘴等)实现用户动作配合式活体检测功能。

  6. 通过综合运用用户的年龄、性别等的检测结果,给用户做相关商品推荐;

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
Android---教你如何用三十分钟在安卓上开发一个微笑抓拍神器