java实现人脸识别源码【含测试效果图】——前期准备工作及访问提示

简介: java实现人脸识别源码【含测试效果图】——前期准备工作及访问提示

注意:

看完之后如有不懂,请看:关于人脸和指纹识别共同交流方案,也可以关注微信公众号:雄雄的小课堂,回复:人脸识别群获取群号,群内有直接可以运行的源码可供下载,人脸识别所需的软件群内也有!!!

人脸识别,顾名思义就是刷脸登陆,用户输入用户名,用脸来代替密码进行登陆,就算你是相似度很高的双胞胎也可以正确识别。废话我也不多说了,准备工作大家请往下看:

先看一下做好的截图,界面没有美化,主要是功能,美化界面的花可以弄个高大上的放上去就OK了:

如图:

————————————————————————————————————————————————

——————————————————————————————————————————

登陆的截图:

————————————————————————————————————————————

——————————————————————————————————————————

OK  接下来我们继续往下看:

 

 

 

首先我们创建个数据库:我使用的是sql server,数据库脚本如下:

 

USE [master]
GO
/****** Object:  Database [faceDB]    Script Date: 2017-09-26 11:18:39 ******/
CREATE DATABASE [faceDB]
 CONTAINMENT = NONE
 ON  PRIMARY 
( NAME = N'faceDB', FILENAME = N'E:\DB\faceDB.mdf' , SIZE = 5120KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
 LOG ON 
( NAME = N'faceDB_log', FILENAME = N'E:\DB\faceDB_log.ldf' , SIZE = 2048KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO
ALTER DATABASE [faceDB] SET COMPATIBILITY_LEVEL = 110
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [faceDB].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO
ALTER DATABASE [faceDB] SET ANSI_NULL_DEFAULT OFF 
GO
ALTER DATABASE [faceDB] SET ANSI_NULLS OFF 
GO
ALTER DATABASE [faceDB] SET ANSI_PADDING OFF 
GO
ALTER DATABASE [faceDB] SET ANSI_WARNINGS OFF 
GO
ALTER DATABASE [faceDB] SET ARITHABORT OFF 
GO
ALTER DATABASE [faceDB] SET AUTO_CLOSE OFF 
GO
ALTER DATABASE [faceDB] SET AUTO_CREATE_STATISTICS ON 
GO
ALTER DATABASE [faceDB] SET AUTO_SHRINK OFF 
GO
ALTER DATABASE [faceDB] SET AUTO_UPDATE_STATISTICS ON 
GO
ALTER DATABASE [faceDB] SET CURSOR_CLOSE_ON_COMMIT OFF 
GO
ALTER DATABASE [faceDB] SET CURSOR_DEFAULT  GLOBAL 
GO
ALTER DATABASE [faceDB] SET CONCAT_NULL_YIELDS_NULL OFF 
GO
ALTER DATABASE [faceDB] SET NUMERIC_ROUNDABORT OFF 
GO
ALTER DATABASE [faceDB] SET QUOTED_IDENTIFIER OFF 
GO
ALTER DATABASE [faceDB] SET RECURSIVE_TRIGGERS OFF 
GO
ALTER DATABASE [faceDB] SET  DISABLE_BROKER 
GO
ALTER DATABASE [faceDB] SET AUTO_UPDATE_STATISTICS_ASYNC OFF 
GO
ALTER DATABASE [faceDB] SET DATE_CORRELATION_OPTIMIZATION OFF 
GO
ALTER DATABASE [faceDB] SET TRUSTWORTHY OFF 
GO
ALTER DATABASE [faceDB] SET ALLOW_SNAPSHOT_ISOLATION OFF 
GO
ALTER DATABASE [faceDB] SET PARAMETERIZATION SIMPLE 
GO
ALTER DATABASE [faceDB] SET READ_COMMITTED_SNAPSHOT OFF 
GO
ALTER DATABASE [faceDB] SET HONOR_BROKER_PRIORITY OFF 
GO
ALTER DATABASE [faceDB] SET RECOVERY FULL 
GO
ALTER DATABASE [faceDB] SET  MULTI_USER 
GO
ALTER DATABASE [faceDB] SET PAGE_VERIFY CHECKSUM  
GO
ALTER DATABASE [faceDB] SET DB_CHAINING OFF 
GO
ALTER DATABASE [faceDB] SET FILESTREAM( NON_TRANSACTED_ACCESS = OFF ) 
GO
ALTER DATABASE [faceDB] SET TARGET_RECOVERY_TIME = 0 SECONDS 
GO
EXEC sys.sp_db_vardecimal_storage_format N'faceDB', N'ON'
GO
USE [faceDB]
GO
/****** Object:  Table [dbo].[users]    Script Date: 2017-09-26 11:18:39 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[users](
  [id] [int] NOT NULL,
  [username] [varchar](50) NOT NULL,
  [password] [varchar](50) NULL,
  [headphoto] [varchar](50) NULL,
 CONSTRAINT [PK_users] PRIMARY KEY CLUSTERED 
(
  [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
INSERT [dbo].[users] ([id], [username], [password], [headphoto]) VALUES (-1445236349, N'muxng', NULL, N'/picture/1506088284547.png')
INSERT [dbo].[users] ([id], [username], [password], [headphoto]) VALUES (-1444803643, N'admin', NULL, N'/picture/1506088717253.png')
INSERT [dbo].[users] ([id], [username], [password], [headphoto]) VALUES (-1444707110, N'adm1', NULL, N'/picture/1506088813786.png')
INSERT [dbo].[users] ([id], [username], [password], [headphoto]) VALUES (-1444274083, N'24519om', NULL, N'/picture/1506089246813.png')
INSERT [dbo].[users] ([id], [username], [password], [headphoto]) VALUES (-1444264936, N'2450om', NULL, N'/picture/1506089255960.png')
INSERT [dbo].[users] ([id], [username], [password], [headphoto]) VALUES (-1444243590, N'123456', NULL, N'/picture/1506089277306.png')
INSERT [dbo].[users] ([id], [username], [password], [headphoto]) VALUES (-1444184827, N'1234567', NULL, N'/picture/1506089336069.png')
INSERT [dbo].[users] ([id], [username], [password], [headphoto]) VALUES (1, N'雄', N'123456', N'image')
USE [master]
GO
ALTER DATABASE [faceDB] SET  READ_WRITE 
GO

下面附带一张表的结构图,有的人可能不是用的sqlserver,用其他数据库的童鞋们只需按照这个格式就可以了!

数据库建好之后我们导入下所用到的jar包,jar包下载地址:点击这里

项目中所用到的js文件下载:点击这里

 

  我们先看看设计思路:

实现思路:

1.前台通过扫描人脸进行注册,注册必填字段:username,password,id,headphoto

2.登陆,分为两种,一种为密码登陆,另一种为人脸登陆



技术分析:

注册:

1.当用户注册时,通过打开本地摄像头提取人的脸部。

2.获取到人脸之后在通过ajax进行提交到Servlet

3.在Servlet里面进行处理(添加到人脸库中),并且将前台ajax传过来的base64图像进行转换成图片,然后上传到服务器中。

4.提交到人脸库的同时,设置编号为注册用户的id

5.注册用户成功。

登陆:

1.用户需要输入登陆的用户名(username)

2.通过本地打开摄像头进行获取人脸的base64图像信息

3.将base64图像信息转换成图片之后在进行与服务器中的人脸进行比对

4.比对成功

以上就是设计思路。由于本案例使用的是纯jdbc+Servlet,所以我们有必要先把web.xml拿出来亮亮相,以下就是:

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
  xmlns="http://java.sun.com/xml/ns/javaee" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
  http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <display-name></display-name>
  <servlet>
    <servlet-name>FaceServlet</servlet-name>
    <servlet-class>org.web.FaceServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>FaceServlet</servlet-name>
    <url-pattern>/FaceServlet</url-pattern>
  </servlet-mapping>  
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

最后,我们的脸的图片是放在服务器中的,所以我们先在webroot下面创建一个文件夹picture,所有的人脸图片均放在这里面,如图:

 

 

jdk尽量使用1.7的,lib1和lib里面都是jar包,大家可以直接创建一个lib就可以了。

------------------------------------------------------------2017.11.06更新-------------------------------------------------------------------

博文发出之后好多人问我要源码,那我就把源码贴上吧!

 

java实现人脸识别源码【含测试效果图】——前台页面层(login.jsp)

java实现人脸识别源码【含测试效果图】——前台显示层(index.jsp)

java实现人脸识别源码【含测试效果图】——Servlet层(FaceServlet

java实现人脸识别源码【含测试效果图】——ServiceImpl层(UserServiceImpl)

java实现人脸识别源码【含测试效果图】——Service层(IUserService)

java实现人脸识别源码【含测试效果图】——DaoImpl层(UserDaoImpl)

java实现人脸识别源码【含测试效果图】——DaoImpl层(BaseDaoUtilImpl)

java实现人脸识别源码【含测试效果图】——Dao层(IUserDao)

java实现人脸识别源码【含测试效果图】——Dao层(IBaseDaoUtil)

java实现人脸识别源码【含测试效果图】——Dao层(BaseDao)

java实现人脸识别源码【含测试效果图】——实体类(Users)

——————————————————2018.05.13更新———————————————————————

本次更新内容:打开摄像头在原有的火狐基础上新加360浏览器个谷歌浏览器,IE暂且不支持

在index.js中,将这段代码:

//  支持浏览器  谷歌,火狐,360,欧朋
          //navigator.getUserMedia这个写法在Opera中好像是navigator.getUserMedianow
          if (navigator.getUserMedia) {
              navigator.getUserMedia(videoObj, function (stream) {
                  video.src = stream;
                  video.play();
              }, errBack);
          } else if (navigator.webkitGetUserMedia) {
              navigator.webkitGetUserMedia(videoObj, function (stream) {
                  video.src = window.URL.createObjectURL(stream);
                  video.play();
              }, errBack);
          } else if (navigator.mozGetUserMedia){
              navigator.mozGetUserMedia(videoObj, function (stream) {
                      video.src = window.URL.createObjectURL(stream);
                      video.play();
              }, errBack);
          }

替换成:

//  支持浏览器  谷歌,火狐,360,欧朋
          //navigator.getUserMedia这个写法在Opera中好像是navigator.getUserMedianow
          if (navigator.getUserMedia) {
              navigator.getUserMedia(videoObj, function (stream) {
                //谷歌
                   MediaStreamTrack=typeof stream.stop==='function'?stream:stream.getTracks()[1];
                       video.src=(window.URL).createObjectURL(stream);
                  video.play();
              }, errBack);
          } else if (navigator.webkitGetUserMedia) {
            //360
              navigator.webkitGetUserMedia(videoObj, function (stream) {
                  MediaStreamTrack=stream.getTracks()[1];
                  video.src=(window.webkitURL).createObjectURL(stream);
                  video.play();
              }, errBack);
          } else if (navigator.mozGetUserMedia){
            //火狐
              navigator.mozGetUserMedia(videoObj, function (stream) {
                      video.src = window.URL.createObjectURL(stream);15715377670
                      video.play();
              }, errBack);
          }

替换完成即可,其他的不要乱动,可能360和谷歌浏览器默认是禁用摄像头的,先看360浏览器的,点击一下上面的这个标志:

然后:

一定要选第一个,我当时默认的是选择的第二个,捣鼓了很久很久。

谷歌浏览器中:

 

然后设置成第一个:

 

注意:360,谷歌或者火狐。在调用摄像头的时候不要同时调用,否则会失效的!!!

——————————————————2018.05.27更新———————————————————————

更新内容:新增活体检测识别,详细请前往: 人脸识别活体检测测试案例

——————————————————2018.06.23更新———————————————————————

更新内容:活体检测之张张嘴和眨眨眼源码:人脸识别活体检测之眨眨眼和张张嘴

——————————————————2018.11.18更新———————————————————————

更新内容:关于人脸和指纹识别共同交流方案

——————————————————2019.07.19更新———————————————————————

更新内容:如果打不开摄像头,并且报错:

Failed to execute 'createObjectURL' on 'URL': No function was found that matched the signature provided.

只需要将此处的代码:

if (navigator.getUserMedia) {
                  navigator.getUserMedia(videoObj, function (stream) {
                    //谷歌
                    MediaStreamTrack=typeof stream.stop==='function'?stream:stream.getTracks()[1];
                      video.src=window.URL.createObjectURL(stream);
                      video.play();
                  }, errBack);
              }

替换成:

if (navigator.getUserMedia) {
                  navigator.getUserMedia(videoObj, function (stream) {
                    //谷歌
                    MediaStreamTrack=typeof stream.stop==='function'?stream:stream.getTracks()[1];
                       try{
                         video.src=window.URL.createObjectURL(stream);
                       }catch(e){
                         console.log(e);
                         video.srcObject = stream;
                       }
                      video.play();
                  }, errBack);
              }

成功运行,摄像头打开,正常使用!

 

 

 


相关文章
|
8天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
28 2
|
1天前
|
数据采集 人工智能 Java
Java产科专科电子病历系统源码
产科专科电子病历系统,全结构化设计,实现产科专科电子病历与院内HIS、LIS、PACS信息系统、区域妇幼信息平台的三级互联互通,系统由门诊系统、住院系统、数据统计模块三部分组成,它管理了孕妇从怀孕开始到生产结束42天一系列医院保健服务信息。
11 4
|
12天前
|
人工智能 监控 数据可视化
Java智慧工地信息管理平台源码 智慧工地信息化解决方案SaaS源码 支持二次开发
智慧工地系统是依托物联网、互联网、AI、可视化建立的大数据管理平台,是一种全新的管理模式,能够实现劳务管理、安全施工、绿色施工的智能化和互联网化。围绕施工现场管理的人、机、料、法、环五大维度,以及施工过程管理的进度、质量、安全三大体系为基础应用,实现全面高效的工程管理需求,满足工地多角色、多视角的有效监管,实现工程建设管理的降本增效,为监管平台提供数据支撑。
30 3
|
17天前
|
运维 自然语言处理 供应链
Java云HIS医院管理系统源码 病案管理、医保业务、门诊、住院、电子病历编辑器
通过门诊的申请,或者直接住院登记,通过”护士工作站“分配患者,完成后,进入医生患者列表,医生对应开具”长期医嘱“和”临时医嘱“,并在电子病历中,记录病情。病人出院时,停止长期医嘱,开具出院医嘱。进入出院审核,审核医嘱与住院通过后,病人结清缴费,完成出院。
53 3
|
21天前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
35 3
|
23天前
|
SQL Java 数据库连接
打破瓶颈:利用Java连接池技术提升数据库访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,避免了频繁的连接建立和断开,显著提升了数据库访问效率。常见的连接池库包括HikariCP、C3P0和DBCP,它们提供了丰富的配置选项和强大的功能,帮助优化应用性能。
44 2
|
23天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
26天前
|
移动开发 前端开发 JavaScript
java家政系统成品源码的关键特点和技术应用
家政系统成品源码是已开发完成的家政服务管理软件,支持用户注册、登录、管理个人资料,家政人员信息管理,服务项目分类,订单与预约管理,支付集成,评价与反馈,地图定位等功能。适用于各种规模的家政服务公司,采用uniapp、SpringBoot、MySQL等技术栈,确保高效管理和优质用户体验。
|
11天前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
43 3
|
1月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
64 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
下一篇
无影云桌面