Coder Social home page Coder Social logo

faceunlock's Introduction

Open For You

前言

此项目为移动互联网课程项目,旨在打造一款基于人脸识别的智能解锁软件,实现语言是Java,人脸处理使用到了 Face++ 提供的API接口,后期也实现了自己的API接口,详情移步至myAPI分支,运行环境为Android 7.0。

项目概述

由于本身就是一款解锁软件,为避免用户二次解锁,系统本身的锁屏就不该使用,随之而来的就是安全性问题。如何能够在系统运行中将非机主用户拒之门外,是我们着力解决的问题。同时,解锁软件对实时性的要求必须足够高,减少用户人脸验证等待时间,提升用户体验,也是一大难题。

服务组件

项目主体为五大服务组件

主要问题及解决思路

人脸验证

为解决人脸验证的耗时长问题,我们主要采取先解锁,后验证的机制。手机亮屏后,用户可以直接使用,软件不会妨碍用户操作;同时,软件会才后台拍摄人脸照片,传送到服务器和预先采样的人脸集进行比对,如果比对失败,服务将直接调用自己的锁屏功能,用户此时需要自行输入密码,才能继续使用手机。

锁屏实现

由于安卓并没有提供接管系统解锁的API,那我们只能采用曲线救国的策略,将用户限制在自己的Activity内。查看网上的方法,大多数都是基于绑定系统按键,使得手机按键实效的方法。但是为了安全行考虑,Android 7.0 系统弃用了此功能,不再提供绑定Home键的接口。

本次实现中,主要采用了悬浮窗覆盖的方法,如下图所示

用户看到的是解锁界面如左边所示,但实际上屏幕的顶部和底部分别加了两个透明的顶层悬浮窗,这时用户既无法使用下拉栏,也无法按到Home键,只能输入密码解锁手机。同时,为了保证设备的安全,一旦用户输入密码超过三次,系统就会直接锁屏,不再接受输入,用户等第二次打开手机时,将直接跳过人脸验证部分,直接进入解锁界面。

进程保活

为了使服务能持久化运行,将系统服务设为前台服务,缺点就是必须有一个状态栏图标。将 Activity 的 excludeFromRecents 属性设为true,软件退出后不会保存在最近使用的应用列表,防止用户强杀服务。

技术清单

客户端

提供最基本的锁屏UI和数字锁密码验证逻辑,实现时只需复写验证成功获失败的回调函数即可。

一款实现非常简单的Android组件通信库,比原生的广播机制效率更高。

服务端

提供人脸检测、人脸比对、创建人脸集接口,需联网进行调用。

自己实现API接口时使用的人脸检测、识别库。

自己实现API接口时使用的HTTP框架。

传送门

项目代码说明请参考 代码说明.md
项目运行说明请参考 运行说明.md

faceunlock's People

Contributors

hzshang avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

faceunlock's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.