Android相机预览,指定区域显示预览框,在区域内出现人脸进行人脸识别,并抓拍人脸照片存在本地,CameraX,虹软人脸识别

本文主要是介绍Android相机预览,指定区域显示预览框,在区域内出现人脸进行人脸识别,并抓拍人脸照片存在本地,CameraX,虹软人脸识别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

效果图:

第一种是使用camerax进行预览,android camerax预览官方文档,主要通过imageAnalysis,抓帧进行图片处理,然后通过android自带的图片人脸识别FaceDetector判断是否有人脸,有人脸保存当前抓拍的照片:

val file = File(filesDir, "head_tmp.png")val create = Observable.create<File> { emitter ->val intArray = IntArray(2)iv_scan.getLocationInWindow(intArray)val createBitmap = Bitmap.createBitmap(bitmap, intArray[0], intArray[1], iv_scan.width, iv_scan.height)//必须是565才能识别val bitmap1: Bitmap = createBitmap.copy(Bitmap.Config.RGB_565, true)val faceDetector = FaceDetector(bitmap1.width, bitmap1.height, 1)val array = arrayOfNulls<FaceDetector.Face>(1)val faces = faceDetector.findFaces(bitmap1, array)if (faces > 0) {Log.e(TAG, "检测到脸")val fos = FileOutputStream(file.path)createBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos)fos.flush()fos.close()emitter.onNext(file)} else {Log.e(TAG, "未检测到脸")emitter.onError(Throwable("未检测到脸"))}}var disposable: Disposable? = nullval observer = object : Observer<File> {override fun onNext(t: File) {disposable?.dispose()isOne = falsesetResult(Activity.RESULT_OK)finish()}override fun onError(e: Throwable) {isOne = true}override fun onComplete() {}override fun onSubscribe(d: Disposable) {disposable = d}}create.subscribeOn(Schedulers.computation())//指定被观察者线程.observeOn(AndroidSchedulers.mainThread())//指定观察者线程.subscribe(observer)

第二种使用了免费的虹软识别人脸识别,主要判断指定识别框的rect和虹软人脸识别框的rect,比较两个rect,是否在它的范围内,如果在抓拍人脸:

if (drawInfoList.size > 0) {for (i in drawInfoList.indices) {val rect: Rect = drawInfoList[i].rectval rect1 = Rect()iv_scan.getGlobalVisibleRect(rect1)if (rect1.contains(rect)) {//为了美观,扩大rect截取注册图val cropRect: Rect =CommUtils.getBestRect(previewSize!!.width, previewSize!!.height, faceInfoList[i].rect)cropRect.left = cropRect.left and 3.inv()cropRect.top = cropRect.top and 3.inv()cropRect.right = cropRect.right and 3.inv()cropRect.bottom = cropRect.bottom and 3.inv()headBmp = CommUtils.getHeadImage(nv21,previewSize!!.width,previewSize!!.height,faceInfoList[i].orient,cropRect,ArcSoftImageFormat.NV21)headBmp?.apply {cropBitmap(this)}break}}}

demo:https://github.com/withyi9223/facesb

这篇关于Android相机预览,指定区域显示预览框,在区域内出现人脸进行人脸识别,并抓拍人脸照片存在本地,CameraX,虹软人脸识别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/983445

相关文章

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

java中判断json key是否存在的几种方法

《java中判断jsonkey是否存在的几种方法》在使用Java处理JSON数据时,如何判断某一个key是否存在?本文就来介绍三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目http://www.chinasem.cn录第一种方法是使用 jsONObject 的 has 方法

C#实现SHP文件读取与地图显示的完整教程

《C#实现SHP文件读取与地图显示的完整教程》在地理信息系统(GIS)开发中,SHP文件是一种常见的矢量数据格式,本文将详细介绍如何使用C#读取SHP文件并实现地图显示功能,包括坐标转换、图形渲染、平... 目录概述功能特点核心代码解析1. 文件读取与初始化2. 坐标转换3. 图形绘制4. 地图交互功能缩放

Python进行word模板内容替换的实现示例

《Python进行word模板内容替换的实现示例》本文介绍了使用Python自动化处理Word模板文档的常用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录技术背景与需求场景核心工具库介绍1.获取你的word模板内容2.正常文本内容的替换3.表格内容的

Git进行版本控制的实战指南

《Git进行版本控制的实战指南》Git是一种分布式版本控制系统,广泛应用于软件开发中,它可以记录和管理项目的历史修改,并支持多人协作开发,通过Git,开发者可以轻松地跟踪代码变更、合并分支、回退版本等... 目录一、Git核心概念解析二、环境搭建与配置1. 安装Git(Windows示例)2. 基础配置(必

MySQL使用EXISTS检查记录是否存在的详细过程

《MySQL使用EXISTS检查记录是否存在的详细过程》EXISTS是SQL中用于检查子查询是否返回至少一条记录的运算符,它通常用于测试是否存在满足特定条件的记录,从而在主查询中进行相应操作,本文给大... 目录基本语法示例数据库和表结构1. 使用 EXISTS 在 SELECT 语句中2. 使用 EXIS

Git打标签从本地创建到远端推送的详细流程

《Git打标签从本地创建到远端推送的详细流程》在软件开发中,Git标签(Tag)是为发布版本、标记里程碑量身定制的“快照锚点”,它能永久记录项目历史中的关键节点,然而,仅创建本地标签往往不够,如何将其... 目录一、标签的两种“形态”二、本地创建与查看1. 打附注标http://www.chinasem.cn

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

在Android中使用WebView在线查看PDF文件的方法示例

《在Android中使用WebView在线查看PDF文件的方法示例》在Android应用开发中,有时我们需要在客户端展示PDF文件,以便用户可以阅读或交互,:本文主要介绍在Android中使用We... 目录简介:1. WebView组件介绍2. 在androidManifest.XML中添加Interne

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4