androidapp实战项目之使用opencv人脸识别实现找人功能(附源码和演示超详细)(代码片段)

showswoller showswoller     2023-04-03     268

关键词:

需要全部代码请点赞关注收藏后评论区留言私信~~~

人脸识别自古有之,每当官府要捉拿某人时,便在城墙贴出通缉告示并附上那人的肖像。只是该办法依赖人们的回忆与主观判断,指认结果多有出入,算不上什么先进。 如今利用监控摄像头结合机器学习算法,大大提高了人脸识别的成功率,使得人脸识别真正应用到了日常生活中。 从住宅小区的刷脸开门,到工作单位的刷脸考勤,到超市里便捷的刷脸支付,到各城市地铁的刷脸乘车,再到张学友演唱会上警方连续抓获逃犯,人脸识别被广泛地应用于门禁、购物、交通、公安等诸多领域。

一、需求描述

倘若利用人脸识别技术,寻找失散小孩的操作过程包含下列几个步骤:

(1)由家属提供小孩照片并上传给智慧天眼系统;

(2)智慧天眼迅速从各个监控摄像头实时匹配人脸;

(3)一旦发现高相似度的人脸,马上通知家属甄别画面确认是否找到;

 

 二、功能分析

功能主要通过摄像头实时识别人脸,用户只需录入待寻找人员信息,剩下就交给App自动匹配了,在准备寻人与寻人过程中,主要集成了以下App技术

(1)图像裁剪:待寻人员的头像要从原始图片中抠出来。

(2)数据库框架Room:待寻人员的信息要保存到数据库,更新人脸识别的结果也要修改数据库记录。

(3)计算机视觉库OpenCV:智慧天眼采用OpenCV实时寻人,同时通过OpenCV判定目标人员的相似程度。

(4)定位服务:找到相似人员后,要获取并保存当前所在位置,以便家属前来相认。

(5)网络通信框架:根据经纬度访问WEB服务查询详细地址。

下面介绍代码模块之间的关系

(1)WisdomEyeActivity.java:这是智慧天眼的寻人列表界面。

(2)PersonEditActivity.java:这是人员信息的添加页面,可在此上传待识别的人员头像。

(3)PersonCutActivity.java:这是人员头像的裁剪界面。

(4)PersonDetailActivity.java:这是待寻找人员的详情页面。

(5)PersonVerifyActivity.java:这是实时寻人的扫描界面。

三、效果展示

开始界面添加待寻找的人员信息

 

 

成功找到后效果如下

 

四、代码 

部分代码如下 需要全部代码请点赞关注收藏后评论区留言~~~

package com.example.face;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;

import com.example.face.adapter.PersonListAdapter;
import com.example.face.dao.PersonDao;
import com.example.face.entity.PersonInfo;
import com.example.face.entity.PersonPortrait;

import java.util.ArrayList;
import java.util.List;

public class WisdomEyeActivity extends AppCompatActivity implements
        AdapterView.OnItemClickListener, AdapterView.OnItemLongClickListener 
    private final static String TAG = "WisdomEyeActivity";
    private ListView lv_person; // 声明一个列表视图对象
    private PersonDao personDao; // 声明一个人员的持久化对象
    private List<PersonInfo> mPersonList = new ArrayList<>(); // 人员信息列表

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_wisdom_eye);
        findViewById(R.id.iv_back).setOnClickListener(v -> finish());
        TextView tv_title = findViewById(R.id.tv_title);
        tv_title.setText("智慧天眼");
        lv_person = findViewById(R.id.lv_person);
        findViewById(R.id.btn_add).setOnClickListener(v -> 
            Intent intent = new Intent(this, PersonEditActivity.class);
            startActivity(intent);
        );
        // 从App实例中获取唯一的人员持久化对象
        personDao = MainApplication.getInstance().getPersonDB().personDao();
    

    @Override
    protected void onResume() 
        super.onResume();
        new Handler(Looper.myLooper()).post(() -> loadPersonList());
    

    // 加载人员列表
    private void loadPersonList() 
        mPersonList = personDao.queryAllPerson(); // 加载所有人员信息
        for (int i=0; i<mPersonList.size(); i++) 
            PersonInfo person = mPersonList.get(i);
            // 根据人员名称查询该人员的样本头像列表
            List<PersonPortrait> portraitList = personDao.queryPersonPortrait(person.getName(), 0);
            person.setPortraitList(portraitList);
            mPersonList.set(i, person);
        
        PersonListAdapter adapter = new PersonListAdapter(this, mPersonList);
        lv_person.setAdapter(adapter);
        // 注册列表项的点击监听器,点击时打开人员详情页面
        lv_person.setOnItemClickListener(this);
        // 注册列表项的长按监听器,长按时弹出是否删除对话框
        lv_person.setOnItemLongClickListener(this);
    

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
        PersonInfo person = mPersonList.get(position);
        Intent intent = new Intent(this, PersonDetailActivity.class);
        intent.putExtra("person_name", person.getName());
        startActivity(intent);
    

    @Override
    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) 
        PersonInfo person = mPersonList.get(position);
        AlertDialog.Builder builder = new AlertDialog.Builder(this)
                .setTitle("请确认")
                .setMessage("你是否要删除"+person.getName()+"的寻人记录")
                .setPositiveButton("是", (dialog, which) -> 
                    // 确定删除,则删除人员信息及其头像信息
                    personDao.deletePerson(person);
                    personDao.deletePortraitByName(person.getName(), -1);
                    loadPersonList(); // 加载人员列表
                )
                .setNegativeButton("否", null);
        builder.create().show();
        return true;
    

创作不易 觉得有帮助请点赞关注收藏~~~

opencv实战项目--人脸考勤(代码片段)

人脸任务在计算机视觉领域中十分重要,本项目主要使用了两类技术:人脸检测+人脸识别。代码分为两部分内容:人脸注册和人脸识别人脸注册:将人脸特征存储进数据库,这里用feature.csv代替人脸识别... 查看详情

androidapp人脸识别中opencv根据人脸估算性别和年龄实战(附源码和演示超详细)(代码片段)

需要源码请点赞关注收藏后评论区留言私信~~~人脸蕴含的信息量巨大,不管是青春还是年少,还是老年沧桑,都能体现出来,不过从人脸估算年龄估算年龄全凭经验,毕竟计算机无法根据固定框架判断年龄ÿ... 查看详情

opencv项目实战:07人脸识别和考勤系统(代码片段)

1、效果展示人脸识别:考勤效果: 2、项目介绍接下来,我们将学习如何以高精度执行面部识别,首先简要介绍理论并学习基本实现。然后我们将创建一个考勤项目,该项目将使用网络摄像头检测人脸并在Exce... 查看详情

opencv实战之人脸美颜美型

需求分析        俗说话“一白遮三丑”,这代表一种大众审美的标准,也是众多化妆品的宣传卖点之一;因此美白也成为美颜算法中一项基础且重要的功能。量化分析       ... 查看详情

opencv-python实战(17)——人脸识别详解(代码片段)

OpenCV-Python实战(17)——人脸识别详解0.前言1.人脸识别简介2.使用OpenCV进行人脸识别2.1使用OpenCV进行人脸识别流程示例3.使用dlib进行人脸识别4.使用face_recognition进行人脸识别小结系列链接0.前言人脸处理是人工智能中的一... 查看详情

人脸识别实战:使用opencv+svm实现人脸识别(代码片段)

在本文中,您将学习如何使用OpenCV进行人脸识别。文章分三部分介绍:第一,将首先执行人脸检测,使用深度学习从每个人脸中提取人脸量化为128位的向量。第二,在嵌入基础上使用支持向量机(SVM)... 查看详情

人脸检测实战进阶:使用opencv进行活体检测(代码片段)

使用OpenCV进行活体检测在本篇博文中,您将学习如何使用OpenCV执行活体检测。您将创建一个活体检测器,该检测器能够在人脸识别系统中发现假人脸并执行反人脸欺骗。在教程的第一部分,我们将讨论活体检测,... 查看详情

opencv-python实战(16)——人脸追踪详解(代码片段)

OpenCV-Python实战(16)——人脸追踪详解0.前言1.人脸追踪技术简介2.使用基于dlibDCF的跟踪器进行人脸跟踪2.1完整代码3.使用基于dlibDCF的跟踪器进行对象跟踪3.2完整代码小结系列链接0.前言人脸处理是人工智能中的一个热门... 查看详情

人脸检测实战:使用opencv加载深度学习模型实现人脸检测(代码片段)

使用OpenCV和深度学习进行人脸检测今天的博文分为三个部分。在第一部分中,我们将讨论更准确的OpenCV人脸检测器的起源以及它们在OpenCV库中的位置。然后我将演示如何使用OpenCV和深度学习在图像中执行人脸检测。最后我将... 查看详情

opencv-python实战(14)——人脸检测详解(仅需6行代码学会4种人脸检测方法)(代码片段)

OpenCV-Python实战(14)——人脸检测详解(仅需6行代码学会4种人脸检测方法)0.前言1.人脸处理简介2.安装人脸处理相关库2.1安装dlib2.2安装face_recognition2.3安装cvlib3.人脸检测3.1使用OpenCV进行人脸检测3.1.1基于Haar级联... 查看详情

《androidapp开发进阶与项目实战》出版后记

  《AndroidApp开发入门与项目实战》刚写完,我马上着手编写它的姊妹篇《AndroidApp开发进阶与项目实战》,因为开发入门一书比较基础,还需要一本讲解高级开发与新技术的进阶书籍。App开发入门与App开发进阶两本... 查看详情

《androidapp开发进阶与项目实战》出版后记

  《AndroidApp开发入门与项目实战》刚写完,我马上着手编写它的姊妹篇《AndroidApp开发进阶与项目实战》,因为开发入门一书比较基础,还需要一本讲解高级开发与新技术的进阶书籍。App开发入门与App开发进阶两本... 查看详情

androidapp实战项目之仿微信的私信和群聊app(附源码和演示视频超详细必看)(代码片段)

需要全部代码请点赞关注收藏后评论区留言私信~~~手机最开始用于通话,后来增加了短信功能,初步满足了人与人之间的沟通需求。然而短信只能发文字,于是出现了能够发图片的彩信,但不管短信还是彩信,... 查看详情

《androidapp开发进阶与项目实战》资源下载和内容勘误

资源下载下面是《AndroidApp开发进阶与项目实战》一书用到的工具和代码资源:1、本书使用的AndroidStudio版本为4.2,最新的安装包可前往Android官网页面下载。2、本书提供所有示例源码的demo工程下载,源码(适配Andr... 查看详情

人脸检测实战终极:使用opencv和python进行人脸对齐(代码片段)

使用OpenCV和Python进行人脸对齐这篇博文的目的是演示如何使用OpenCV、Python和面部标志对齐人脸。给定一组面部标志(输入坐标),我们的目标是将图像扭曲并转换为输出坐标空间。在这个输出坐标空间中,整个数... 查看详情

人脸识别完整项目实战(14):实时人脸特征点标定程序设计

一、前言本文是《人脸识别完整项目实战》系列博文第14章《实时人脸特征点标定程序设计》,本章内容详细介绍Win10环境下,基于VisualStudio2015+Opencv+Dlib开发环境,如何实现实时视频流人脸特征点标定程序的设计。本文内容已经... 查看详情

opencv⚠️实战⚠️人脸识别☢️建议手收藏☢️(代码片段)

【OpenCV】⚠️实战⚠️人脸识别☢️建议手收藏☢️概述模型获取detectMultiScale图片人脸识别视频人脸识别概述OpenCV是一个跨平台的计算机视觉库,支持多语言,功能强大.今天小白就带大家来实战一下,用OpenCV实现人脸识别.模型获取... 查看详情

opencv⚠️实战⚠️人脸识别☢️建议手收藏☢️(代码片段)

【OpenCV】⚠️实战⚠️人脸识别☢️建议手收藏☢️概述模型获取detectMultiScale图片人脸识别视频人脸识别概述OpenCV是一个跨平台的计算机视觉库,支持多语言,功能强大.今天小白就带大家来实战一下,用OpenCV实现人脸识别.模型获取... 查看详情