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

2023-05-16

穆雄雄

注意:

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

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

先看一下做好的截图,界面没有美化,主要是功能,美化界面的花可以弄个高大上的放上去就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);
              } 

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

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 快速搭建开发环境 - Istio(最新版本)

    快速搭建开发环境 Istio 最新版本 关键词 xff1a istio istio基础 快速搭建istio环境 文章目录 快速搭建开发环境 Istio 最新版本 前言一 Istio 概述二 Istio 优势三 搭建 Istio 环境准备工作
  • 快速搭建开发环境 - ClickHouse(最新版本)

    快速搭建开发环境 ClickHouse 最新版本 关键词 xff1a ClickHouse ClickHouse环境搭建 列式存储数据库 大数据 文章目录 快速搭建开发环境 ClickHouse 最新版本 前言一 ClickHouse 概述
  • 实时数仓神器 - Flink-CDC(最新版本)

    实时数仓神器 Flink CDC 最新版本 关键词 xff1a Flink CDC Flink CDC入门教程 Flink CDC Connectors Flink CDC 2 0 0 文章目录 实时数仓神器 Flink CDC 最新版本
  • SpringBoot 升级至 2.6.3 项目启动报错-documentationPluginsBootstrapper

    SpringBoot 升级至 2 6 3 项目启动报错 documentationPluginsBootstrapper 关键词 xff1a Failed to start bean documentationPluginsBootstra
  • 解决git下载出现:Failed to connect to 127.0.0.1 port 1080: Connection refused拒绝连接错误

    解决git下载出现 xff1a Failed to connect to 127 0 0 1 port 1080 Connection refused拒绝连接错误 文章目录 xff1a 一 git拒绝连接原因分析 二 错误解决方式 1 查看
  • 无人机——开发环境搭建之初步接触

    本系列是基于pixhawk平台的px4固件而进行的 实验准备 1 一台pixhawk2 4 8的无人机 2 一台个人电脑 实验过程 使用QGroundControl给无人机刷固件 一 百度搜索QGC xff0c 下载qgc安装包 xff0c
  • 【Linux】怎么写一个最简单的Dockerfile?

    前提条件 xff1a 1 安装了docker环境 2 可以正常从官方上pull镜像 该容器是基于tomcat建立 xff0c 目的是为了知道一个Dockerfile的各个命令的含义以及运行一个dockerfile的前后都经历了什么 xff1
  • Javascript removeChild()删除节点及删除子节点的方法

    下面给大家介绍Javascript removeChild 删除节点的方法 xff0c 具体详情如下所示 xff1a 在Javascript中 xff0c 只提供了一种删除节点的方法 xff1a removeChild removeChil
  • 粒子群算法PSO 和 遗传算法GA 的相同点和不同点

    文章目录 PSO和GA的相同点PSO和GA不同点 喜欢的话请关注我们的微信公众号 你好世界炼丹师 公众号主要讲统计学 xff0c 数据科学 xff0c 机器学习 xff0c 深度学习 xff0c 以及一些参加Kaggle竞赛的经验 公众号内
  • 一:自己写一个控制台程序

    新建一个空项目 名称 位置 自己定义 添加头文件stdafx h 工程下面 头文件 右键添加 新建项 头文件 名称为 stdafx h 把集成的 stdafx h 里面的内容 xff08 涵盖了大部分所需的头文件 xff09 全部复制到 我
  • 无人机slam定位算法调研

    1 相关博客 xff0c 知乎 xff0c 网页 1 室内无源定位 激光SLAM在无人机上的飞行测试 2 高速飞行的无人机用SLAM怎样导航 3 泡泡图灵智库 面向无人机的高效双目SLAM 2 相关论文 无人机景象匹配视觉导航技术综述 四旋
  • 嵌入式中可能使用的算法

    在嵌入式的测量中可能存在某些无法被直接测量的变量 xff0c 但可能可以通过几个不同的数据指标运算处理得到 xff0c 这里介绍最小而成发 xff0c 最小二乘法适用于描述Y 61 AX 43 B的数据 xff0c 即寻找到最合适的一条通过
  • 项目参与度较低怎么办?

    大家好 xff0c 我是雄雄 xff0c 欢迎关注公众号 雄雄的小课堂 经过这两天做项目的表现 xff0c 可以很明显的看的出来学生与学生之间掌握的还是有差距的 xff0c 组内有的组员是可以为项目贡献代码的 xff0c 但是有的组员可能只
  • 微信小程序中使用画布canvas实现动态心电图绘制

    大家好 我是雄雄 内容先知 前言 效果图 实现代码 前言 近期 接了个项目 三端 小程序 PC 公众号 同步开发 PC端没的问题 以前一直做的就是PC端 但是小程序和公众号之前没有做过 只能通过这个项目 边做边学了 人家都说小程序用原生的特
  • C#中请求HTTP接口api的方法

    大家好 xff0c 我是雄雄 xff0c 欢迎关注微信公众号 xff1a 雄雄的小课堂 前言 现在是 xff1a 2023年2月15日22 14 30 搞代码的陈戌源都知道 xff0c 哦 xff0c 不好意思 xff0c 是程序员 xff
  • 如何usb 触摸设备不识别为usb mouse

    一 获取输入设备name 有一下两种方法 1 使用 cat proc bus input devices 可以查看 输入设备信息 I Bus 61 0018 Vendor 61 0000 Product 61 0000 Version 61
  • java实现采集(爬)网页中的信息

    大家好 xff0c 我是雄雄 xff0c 欢迎关注微信公众号 xff1a 雄雄的小课堂 前言 爬虫 xff0c 大家都听过 xff0c 可能好多人的第一印象 xff0c 就是使用python进行操作 xff0c 但是除了python之外 x
  • springboot中如何解决redis空闲连接时自动休眠的问题

    大家好 xff0c 我是雄雄 xff0c 欢迎关注微信公众号 xff1a 雄雄的小课堂 前言 今天发现了个神奇的问题 xff0c redis在长时间不使用的时候 xff0c 再次使用的时候 xff0c 会报错500 xff0c 看了下日志
  • 计算机各个岗的内容以及职责(简单整理)

    大家好 xff0c 我是雄雄 xff0c 欢迎关注微信公众号 xff1a 雄雄的小课堂 美工UI 主流技术 xff1a 平面设计软件 如Photoshop Illustrator Sketch等 用于界面设计和资源切图矢量图绘制软件 如Il
  • java实现人脸识别源码【含测试效果图】——前期准备工作及访问提示

    注意 xff1a 看完之后如有不懂 xff0c 请看 xff1a 关于人脸和指纹识别共同交流方案 xff0c 也可以关注微信公众号 xff1a 雄雄的小课堂 xff0c 回复 xff1a 人脸识别群获取群号 xff0c 群内有直接可以运行的