效果图:

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

val file = File(filesDir, "head_tmp.png")

val create = Observable.create { 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(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? = null

val observer = object : Observer {

override fun onNext(t: File) {

disposable?.dispose()

isOne = false

setResult(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].rect

val 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

}

}

}

android 人脸识别边框_Android相机预览,指定区域显示预览框,在区域内出现人脸进行人脸识别,并抓拍人脸照片存在本地...相关推荐

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

    效果图: 第一种是使用camerax进行预览,android camerax预览官方文档,主要通过imageAnalysis,抓帧进行图片处理,然后通过android自带的图片人脸识别FaceDete ...

  2. android 人脸识别边框_android Arcface人脸识别框/人脸抓拍框/人脸追踪框

    为什么要改? 先来看看sdk demo中提供的人脸框样式,这个框看上去并不是非常美观(个人觉得) 再看看下面这个框是不是就要顺眼一点 怎么换? 先来看看原始的画法: @Override public ...

  3. android 人脸识别边框_android自定义Arcface人脸识别框/人脸抓拍框/人脸追踪框

    为什么要改? 先来看看sdk demo中提供的人脸框样式,这个框看上去并不是非常美观(个人觉得) 在这里插入图片描述 再看看下面这个框是不是就要顺眼一点 在这里插入图片描述 怎么换? 先来看看原始的画 ...

  4. android触屏对焦_Android相机开发(五): 触摸对焦,触摸测光,二指手势缩放

    Android Camera Develop: touch to focus, touch to metering, double finger touch to zoom 概述 本篇在(四)的基础上 ...

  5. android 弹窗有边框_Android 多种简单的弹出框样式设置代码

    简介 这是一个基于AlertDialog和Dialog这两个类封装的多种弹出框样式,其中提供各种简单样式的弹出框使用说明.同时也可自定义弹出框. 特性 1.使用链式开发代码简洁明了 2.所有的弹出框样 ...

  6. android 弹窗有边框_android中常用的弹出提示框

    我们在平时做开发的时候,免不了会用到各种各样的对话框,相信有过其他平台开发经验的朋友都会知道,大部分的平台都只提供了几个最简单的实现,如果我们想实现自己特定需求的对话框,大家可能首先会想到,通过继承等 ...

  7. android 键盘遮盖输入框_android弹出输入框,软键盘挡住部分编辑框

    公司要做一款类似微信的即时通讯app 现有如下需求: 当edittext获取到焦点,弹出输入框,并且将listview(recyclerview)顶上去 类似微信QQ的效果,如下图所示 editTex ...

  8. Android监听后台状态,退出即杀死并显示退出提示框

    一.当界面不可见时释放内存 @Overridepublic void onTrimMemory(int level) {super.onTrimMemory(level);switch (level) ...

  9. android 人脸识别边框_【技术分享】虹软人脸识别 - Android Camera实时人脸追踪画框适配...

    在使用虹软人脸识别Android SDK的过程中 ,预览时一般都需要绘制人脸框,但是和PC平台相机应用不同,在Android平台相机进行应用开发还需要考虑前后置相机切换.设备横竖屏切换等情况,因此在人 ...

  10. 虹软人脸识别SDK接入Milvus实现海量人脸快速检索

    虹软人脸识别SDK接入Milvus实现海量人脸快速检索 背景 虹软SDK及Milvus简介 开发环境 虹软人脸识别SDK使用简介 Milvus环境搭建 快速检索实现 人脸识别流程简介 快速检索 虹软S ...

最新文章

  1. LeetCode简单题之独一无二的出现次数
  2. node升级命令_Laravel Mix 4升级说明与“排坑儿”指南
  3. 开发日记-20190511 关键词 onStart()和onResume()存在的原因(猜测篇)
  4. 各种 分页存储过程整理
  5. Debug Tensorflow: Object was never used (type <class ‘tensorflow.python.ops.tensor_array_ops.TensorA
  6. php 浏览器 打印控件,JavaScript_JavaScript 实现打印,打印预览,打印设置,WebBrowser是IE内置的浏览器控件 - phpStudy...
  7. 深度学习auc_机器学习集成学习与模型融合!
  8. 构建高性能分布式搜索引擎(Wcf-基础篇)一
  9. (转)invalidate()和postInvalidate() 的区别及使用
  10. 打印机修复工具_Windows10更新后打印机崩溃?速度安装修复补丁
  11. 链表:链表中倒数第k个结点(2)
  12. 【Unity】Obi插件系列(二)—— Backends、Updaters、Simulation
  13. 【2020省选模拟】题解
  14. markdown排版常用
  15. 如何成为一名架构师,架构师成长之路
  16. 2022-2028年中国金融业OCR识别行业市场调查研究及前瞻分析报告
  17. 达芬奇大王的链表贪吃蛇(java)
  18. JVM类加载过程,JDK和JER区别
  19. Elixir-Tuples
  20. 域名备案注销的简单方法

热门文章

  1. 静态成员对比实例成员(static修饰符解析)
  2. php 往sftp发送文件夹,通过PHP将文件上传到SFTP服务器(phpseclib)
  3. Microsoft SQL Server Protocols
  4. qtableview及自定义model的使用,对比qtablewidget性能及内存优化
  5. js文件之间函数的调用
  6. linux 内核模块 定时器,linux内核定时器__backup_timer_hour_struct_定时器_模块__169IT.COM...
  7. 2021年高考成绩查询海南时间,2021年海南高考后多久出成绩,附海南高考成绩查询时间入口方式...
  8. C++字符串输入输出操作
  9. OpenCasCade开发环境搭建
  10. 全球搜索引擎集合(主要有移动搜索APP的)