需要全部代码请点赞关注收藏后评论区留言私信~~~
人脸识别自古有之,每当官府要捉拿某人时,便在城墙贴出通缉告示并附上那人的肖像。只是该办法依赖人们的回忆与主观判断,指认结果多有出入,算不上什么先进。 如今利用监控摄像头结合机器学习算法,大大提高了人脸识别的成功率,使得人脸识别真正应用到了日常生活中。 从住宅小区的刷脸开门,到工作单位的刷脸考勤,到超市里便捷的刷脸支付,到各城市地铁的刷脸乘车,再到张学友演唱会上警方连续抓获逃犯,人脸识别被广泛地应用于门禁、购物、交通、公安等诸多领域。
倘若利用人脸识别技术,寻找失散小孩的操作过程包含下列几个步骤:
(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 implementsAdapterView.OnItemClickListener, AdapterView.OnItemLongClickListener {private final static String TAG = "WisdomEyeActivity";private ListView lv_person; // 声明一个列表视图对象private PersonDao personDao; // 声明一个人员的持久化对象private List mPersonList = new ArrayList<>(); // 人员信息列表@Overrideprotected 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();}@Overrideprotected void onResume() {super.onResume();new Handler(Looper.myLooper()).post(() -> loadPersonList());}// 加载人员列表private void loadPersonList() {mPersonList = personDao.queryAllPerson(); // 加载所有人员信息for (int i=0; i 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);}@Overridepublic 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);}@Overridepublic 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;}
}
创作不易 觉得有帮助请点赞关注收藏~~~