【实战篇】Android安卓本地离线实现视频检测人脸

实战篇Android安卓本地离线实现视频检测人脸

  • 引言
  • 项目概述
  • 核心代码类介绍
  • 人脸检测流程
  • 项目地址
  • 总结

引言

在当今数字化时代,人脸识别技术已经广泛应用于各个领域,如安防监控、门禁系统、移动支付等。本文将以第三视角详细讲解如何基于bifan-wei-Face/Detector:V1.0实现人脸识别。

项目概述

com.github.bifan-wei:FaceDetector:V1.0 是一个人脸识别项目,主要通过 Android 平台的相机采集图像数据,然后利用 FaceDetector 类进行人脸检测,最终将检测结果绘制在界面上。该项目主要包含两个核心文件:FaceDetectTextureView.java 和 IFaceRectView.java。

核心代码类介绍

  • FaceDetectTextureView.java 这个类继承自 TextureView 并实现了 View.OnLayoutChangeListener 接口,主要负责相机的初始化、预览、人脸检测等功能。 关键属性
    mCamera:Camera 对象,用于控制相机的操作,如打开、关闭、预览等。 captureBitmap:Bitmap
    对象,用于存储相机捕获的图像数据。 detectConfig:DetectConfig
    对象,用于存储人脸检测的配置信息,如检测间隔时间、是否开启人脸检测等。 faceRectView:IFaceRectView
    对象,用于绘制人脸检测的边框。 executorService:ExecutorService 对象,用于在后台线程执行人脸检测任务。
    关键方法 initCamera() 和 initCamera(int
    CameraType):用于初始化相机,包括打开相机、设置相机参数、初始化其他相关资源等。
    openCamera():根据配置信息打开指定类型的相机。 detectFace(Bitmap
    captureBitmap):该方法是人脸检测的核心方法,通过 FaceDetector 类检测图像中的人脸。具体步骤如下: 创建
    FaceDetector 对象,指定检测图像的宽度、高度和最大人脸数量。 创建 FaceDetector.Face
    数组,用于存储检测到的人脸信息。 调用 FaceDetector 的 findFaces 方法进行人脸检测,返回检测到的人脸数量。
    如果检测到人脸,更新 DetectConfig 中的 PreFaceTime 为当前时间,并调用 faceRectView 的
    drawFaceBorder 方法绘制人脸边框,最后返回检测到的人脸数组。 如果未检测到人脸,调用 faceRectView 的
    clearBorder 方法清除之前绘制的边框,返回 null。

下面是相关代码

private FaceDetector.Face[] detectFace(Bitmap captureBitmap) {FaceDetector mFaceDetector = new FaceDetector(captureBitmap.getWidth(), captureBitmap.getHeight(), getDetectConfig().DETECT_FACE_NUM);FaceDetector.Face[] mFace = new FaceDetector.Face[getDetectConfig().DETECT_FACE_NUM];int detectedFaceNum = mFaceDetector.findFaces(captureBitmap, mFace);if (detectedFaceNum > 0) {getDetectConfig().PreFaceTime = System.currentTimeMillis();if (faceRectView != null) {faceRectView.drawFaceBorder(mFace, getDetectConfig().Simple);}return mFace;} else {if (faceRectView != null) {faceRectView.clearBorder();}}return null;
}

startCameraPreview() 和 stopCameraPreview():分别用于启动和停止相机预览。
release():释放相机、回收 Bitmap、关闭线程池等资源。

IFaceRectView.java
这是一个接口,定义了两个方法:drawFaceBorder 和 clearBorder,用于绘制人脸检测的边框和清除边框。

public interface IFaceRectView {/*** @param mFace 人脸参数* @param simple 图片压缩率*/void drawFaceBorder(FaceDetector.Face[] mFace, float simple);//清除边框线void clearBorder();
}

人脸检测流程

  • 相机初始化:调用 initCamera() 或 initCamera(int CameraType)
    方法初始化相机,包括打开相机、设置相机参数等。 相机预览:调用 startCameraPreview()
    方法启动相机预览,相机开始采集图像数据。 人脸检测:在 SurfaceTextureListener 的
    onSurfaceTextureUpdated 方法中,根据配置的检测间隔时间,通过 executorService 执行
    FaceCapturedRunnable 任务,在 FaceCapturedRunnable 的 run 方法中调用 detectFace
    方法进行人脸检测。 绘制边框:如果检测到人脸,调用 faceRectView 的 drawFaceBorder
    方法绘制人脸边框;如果未检测到人脸,调用 faceRectView 的 clearBorder 方法清除之前绘制的边框。
    资源释放:在不需要使用相机时,调用 release() 方法释放相机、回收 Bitmap、关闭线程池等资源。

项目地址

人脸识别demo加源代码

总结

通过上述步骤,我们可以基于 com.github.bifan-wei:FaceDetector:V1.0 实现一个简单的人脸识别功能。该项目主要利用 Android 平台的相机采集图像数据,通过 FaceDetector 类进行人脸检测,并将检测结果绘制在界面上。在实际应用中,可以根据需求对项目进行扩展和优化,如添加人脸识别算法、提高检测精度等。
希望本文对大家理解人脸识别技术的实现有所帮助,如果你有任何问题或建议,欢迎在评论区留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/894398.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

团体程序设计天梯赛-练习集——L1-025 正整数A+B

一年之际在于春,新年的第一天,大家敲代码了吗?哈哈 前言 这道题分值是15分,值这个分,有一小点运算,难度不大,虽然说做出来了,但是有两个小疑点。 L1-025 正整数AB 题的目标很简单…

Leetcode:598

1,题目 2,思路 脑筋急转弯,看题目一时半会还没搞懂意思。 其实不然就是说ops是个矩阵集合,集合的每个矩阵有俩个元素理解为行列边距 m和n是理解为一个主矩阵,计算ops的每个小矩阵还有这个主矩阵的交集返回面积 3&…

web前端12--表单和表格

1、表格标签 使用<table>标签来定义表格 HTML 中的表格和Excel中的表格是类似的&#xff0c;都包括行、列、单元格、表头等元素。 区别&#xff1a;HTML表格在功能方面远没有Excel表格强大&#xff0c;HTML表格不支持排序、求和、方差等数学计算&#xff0c;主要用于布…

【AI】探索自然语言处理(NLP):从基础到前沿技术及代码实践

Hi &#xff01; 云边有个稻草人-CSDN博客 必须有为成功付出代价的决心&#xff0c;然后想办法付出这个代价。 目录 引言 1. 什么是自然语言处理&#xff08;NLP&#xff09;&#xff1f; 2. NLP的基础技术 2.1 词袋模型&#xff08;Bag-of-Words&#xff0c;BoW&#xff…

第1章 量子暗网中的血色黎明

月球暗面的危机与阴谋 量子隧穿效应催生的幽蓝电弧&#xff0c;于环形山表面肆意跳跃&#xff0c;仿若无数奋力挣扎的机械蠕虫&#xff0c;将月球暗面的死寂打破&#xff0c;徒增几分诡异。艾丽伫立在被遗弃的“广寒宫”量子基站顶端&#xff0c;机械义眼之中&#xff0c;倒映着…

AI-ISP论文Learning to See in the Dark解读

论文地址&#xff1a;Learning to See in the Dark 图1. 利用卷积网络进行极微光成像。黑暗的室内环境。相机处的照度小于0.1勒克斯。索尼α7S II传感器曝光时间为1/30秒。(a) 相机在ISO 8000下拍摄的图像。(b) 相机在ISO 409600下拍摄的图像。该图像存在噪点和色彩偏差。©…

【Git】初识Git Git基本操作详解

文章目录 学习目标Ⅰ. 初始 Git&#x1f4a5;注意事项 Ⅱ. Git 安装Linux-centos安装Git Ⅲ. Git基本操作一、创建git本地仓库 -- git init二、配置 Git -- git config三、认识工作区、暂存区、版本库① 工作区② 暂存区③ 版本库④ 三者的关系 四、添加、提交更改、查看提交日…

使用 Spring JDBC 进行数据库操作:深入解析 JdbcTemplate

目录 1. Spring JDBC 简介 2. JdbcTemplate 介绍 3. 创建数据库和表 4. 配置 Spring JDBC 5. 创建实体类 6. 使用 JdbcTemplate 实现增、删、改、查操作 7. Spring JDBC 优点 8. 小结 1. Spring JDBC 简介 Spring JDBC 是 Spring 框架中的一个模块&#xff0c;旨在简化…

BUUCTF [Black Watch 入群题]PWN1 题解

1.下载文件 exeinfo checksec 32位 IDA32 看到关键函数 read两次 第一次read的变量s在bss段&#xff1b;第二次的buf到ebp距离为 24 但是第二次的read字节只能刚好填满返回地址 传不进去变量 所以想到栈迁移 将栈移动到变量s所在位置上来 同时 这题开了NX 无直接的binsh和s…

Cubemx文件系统挂载多设备

cubumx版本&#xff1a;6.13.0 芯片&#xff1a;STM32F407VET6 在上一篇文章中介绍了Cubemx的FATFS和SD卡的配置&#xff0c;由于SD卡使用的是SDIO通讯&#xff0c;因此具体驱动不需要自己实现&#xff0c;Cubemx中就可以直接配置然后生成SDIO的驱动&#xff0c;并将SD卡驱动和…

java练习(2)

回文数&#xff08;题目来自力扣&#xff09; 给你一个整数 x &#xff0c;如果 x 是一个回文整数&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 回文数 是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&#xff09;读都是一样的整…

使用 Tauri 2 + Next.js 开发跨平台桌面应用实践:Singbox GUI 实践

Singbox GUI 实践 最近用 Tauri Next.js 做了个项目 - Singbox GUI&#xff0c;是个给 sing-box 用的图形界面工具。支持 Windows、Linux 和 macOS。作为第一次接触这两个框架的新手&#xff0c;感觉收获还蛮多的&#xff0c;今天来分享下开发过程中的一些经验~ 为啥要做这个…

ComfyUI安装调用DeepSeek——DeepSeek多模态之图形模型安装问题解决(ComfyUI-Janus-Pro)

ComfyUI 的 Janus-Pro 节点&#xff0c;一个统一的多模态理解和生成框架。 试用&#xff1a; https://huggingface.co/spaces/deepseek-ai/Janus-1.3B https://huggingface.co/spaces/deepseek-ai/Janus-Pro-7B https://huggingface.co/spaces/deepseek-ai/JanusFlow-1.3B 安装…

索引的底层数据结构、B+树的结构、为什么InnoDB使用B+树而不是B树呢

索引的底层数据结构 MySQL中常用的是Hash索引和B树索引 Hash索引&#xff1a;基于哈希表实现的&#xff0c;查找速度非常快&#xff0c;但是由于哈希表的特性&#xff0c;不支持范围查找和排序&#xff0c;在MySQL中支持的哈希索引是自适应的&#xff0c;不能手动创建 B树的…

RK3568中使用QT opencv(显示基础图像)

文章目录 一、查看对应的开发环境是否有opencv的库二、QT使用opencv一、查看对应的开发环境是否有opencv的库 在开发板中的/usr/lib目录下查看是否有opencv的库: 这里使用的是正点原子的ubuntu虚拟机,在他的虚拟机里面已经安装好了opencv的库。 二、QT使用opencv 在QT pr…

29.Word:公司本财年的年度报告【13】

目录 NO1.2.3.4 NO5.6.7​ NO8.9.10​ NO1.2.3.4 另存为F12&#xff1a;考生文件夹&#xff1a;Word.docx选中绿色标记的标题文本→样式对话框→单击右键→点击样式对话框→单击右键→修改→所有脚本→颜色/字体/名称→边框&#xff1a;0.5磅、黑色、单线条&#xff1a;点…

省级-新质生产力数据(2010-2022年)-社科数据

省级-新质生产力数据&#xff08;2010-2022年&#xff09;-社科数据https://download.csdn.net/download/paofuluolijiang/90028612 https://download.csdn.net/download/paofuluolijiang/90028612 新质生产力是指在现代科技和经济社会发展的推动下&#xff0c;由新的生产要素…

【PyTorch】7.自动微分模块:开启神经网络 “进化之门” 的魔法钥匙

目录 1. 梯度基本计算 2. 控制梯度计算 3. 梯度计算注意 4. 小节 个人主页&#xff1a;Icomi 专栏地址&#xff1a;PyTorch入门 在深度学习蓬勃发展的当下&#xff0c;PyTorch 是不可或缺的工具。它作为强大的深度学习框架&#xff0c;为构建和训练神经网络提供了高效且灵活…

【数据分析】案例04:豆瓣电影Top250的数据分析与Web网页可视化(numpy+pandas+matplotlib+flask)

豆瓣电影Top250的数据分析与Web网页可视化(numpy+pandas+matplotlib+flask) 豆瓣电影Top250官网:https://movie.douban.com/top250写在前面 实验目的:实现豆瓣电影Top250详情的数据分析与Web网页可视化。电脑系统:Windows使用软件:PyCharm、NavicatPython版本:Python 3.…

Ubuntu20.04 深度学习环境配置(持续完善)

文章目录 常用的一些命令安装 Anaconda创建conda虚拟环境查看虚拟环境大小 安装显卡驱动安装CUDA安装cuDNN官方仓库安装 cuDNN安装 cuDNN 库验证 cuDNN 安装确认 CUDA 和 cuDNN 是否匹配&#xff1a; TensorRT下载 TensorRT安装 TensorRT 本地仓库配置 GPG 签名密钥安装 Tensor…