大家好,我是小富~

在我最开始写文章的时候曾经写过一篇文章 基于 Java 实现的人脸识别功能,因为刚开始码字不知道写点什么,就简单弄了个人脸识别的Demo。

但让我没想到的是,在过去的一年里有好多好多粉丝加我好友咨询这个小demo,因为里边有点小bug,导致一些新手朋友不能成功启动。

从此我就开启不厌其烦的解答各种疑问,不过我精力毕竟有限,最后实在回答不过来,干脆弄了个群粉丝互相分享经验。

问题大面积出现的时候我就想过再出一个完整版的demo,可家里工作一大堆事搞得一点精力都没有,一直拖到了现在,正好现在把这个人脸识别登录功能用在了自己的项目上,借此机会分享出来了,这次尽可能不给大家留(埋)bug 哈哈哈

具体操作之前先看下成品的效果,线上预览地址:https://fire100.top,这里大家可以放心,不会收集面部图片,只是提取了面部特征,并没有上传云端。下边我们以冰冰来做个演示看看效果,识别速度和成功率还是不错的。

功能流程

整个功能的逻辑很简单,前端调起摄像头,识别到人脸后拍照上传到后台,后端SDK识别出图片中的人脸特征后,与数据库内的用户人脸特征做比对,比对成功(相似度在0.8~1之间即算同一个人)登录,如识别到人脸但数据库内未比对成功则视为新用户注册。

注意:如果要在线上应用,必须要使用https才能调起摄像头,本地测试没有限制。

申请SDK

启动项目之前先做一点准备工作,因为使用的是三方的人脸识别SDK,所以要先在平台申请一个账号,然后在下载对应版本的SDK。

官网地址: https://ai.arcsoft.com.cn/ucenter/resource/build/index.html#/login

可能会有人抬杠为啥你不自己写个人脸识别,别问,问就是不会!

目前支持LinuxWindowsIOSAndroid版本,每个实名认证的账号可以激活100台设备,换句话说就是同一个账号申请的SDK可以在100个设备上运行,一般情况下够用了。

下载的SDK包目录结构中libs最为重要,samplecode里有示例代码,doc有API文档。我们需要的是libs里边的arcsoft-sdk-face-3.0.0.0.jar、和三个对应平台的引擎文件.dll或者.so后缀的文件。

项目配置

项目本身是springboot + vue 前后端分离的,但为了小伙伴们开箱即用,我把这个功能前后端整合在一起,再用个 jpa做持久化,表也不用自己建了,给大家省点时间。

使用SDK的时候遇到过一点小坑,所以下边说的详细一点

首先在springboot启动类所在项目根目录下创建一个lib目录,将SDK中解压出的arcsoft-sdk-face-3.0.0.0.jar放进去,pom.xml文件中引入这个 Jar

<dependency>
<groupId>com.arcsoft.face</groupId>
<artifactId>arcsoft-sdk-face</artifactId>
<version>3.0.0.0</version>
<scope>system</scope>
<systemPath>${basedir}/lib/arcsoft-sdk-face-3.0.0.0.jar</systemPath>
</dependency>

maven打包配置要特别注意一点,一定要加上includeSystemScope,这样 maven 打包时会将外部引入的jar包(比如在根目录下或resource文件下新加外部jar包)打包到项目jar中,服务器上项目才能运行。

不加此配置,本地可以运行,因为本地可以再lib下找到外部包,但是服务器上jar中是没有的。

<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<includeSystemScope>true</includeSystemScope>
<fork>true</fork>
<mainClass>com.firebook.FireBookApplication</mainClass>
<skip>false</skip>
</configuration>
</plugin>

application.yml 文件的配置更简单,搞个数据库存放人脸特征数据,填写申请SDK时得到的appIdsdkKey,以及 path 为存放引擎文件.dll或者.so后缀的文件路径。

spring:
datasource:
# type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/face?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username: root
password: 123456
# 人脸识别-windows
face:
appId: #*********************
sdkKey: #*********************
path: D://face

配置好这些直接执行FireControllerApplication就可以了,访问:127.0.0.1:8081/login/face

这里源码我就不大段大段往出贴了,感兴趣的小伙伴自行获取链接下载源码玩玩吧。

源码下载

web人脸识别登录的完整源码已经上传到Github了,在公号内,回复【人脸识别】,获取下载地址,如果有问题随时咨询吧。

千呼万唤,web人脸识别登录完整版来了,这样式我爱了的更多相关文章

  1. 基于Opencv快速实现人脸识别(完整版)

    无耻收藏网页链接: 基于OpenCV快速实现人脸识别:https://blog.csdn.net/beyond9305/article/details/92844258 基于Opencv快速实现人脸识 ...

  2. WEB学习路线2019完整版(附视频教程+网盘下载地址)

    WEB学习路线2019完整版(附视频教程+网盘下载地址).适合初学者的最新WEB前端学习路线汇总! 在当下来说web前端开发工程师可谓是高福利.高薪水的职业了.所以现在学习web前端开发的技术人员也是 ...

  3. 安排上了!PC人脸识别登录,出乎意料的简单

    本文收录在个人博客:www.chengxy-nds.top,技术资源共享. 之前不是做了个开源项目嘛,在做完GitHub登录后,想着再显得有逼格一点,说要再加个人脸识别登录,就我这佛系的开发进度,过了 ...

  4. PyQt5+Caffe+Opencv搭建人脸识别登录界面

    PyQt5+Caffe+Opencv搭建人脸识别登录界面(转载) 最近开始学习Qt,结合之前学习过的caffe一起搭建了一个人脸识别登录系统的程序,新手可能有理解不到位的情况,还请大家多多指教. 我的 ...

  5. apicloud地图、即时通讯、人脸识别登录、以及平时踩过得坑

    apicloud技术浅谈 导语 apicloud 的学习也有一段时间了,这是我个人的一些经验,和踩过的坑,希望对大家能有一些帮助. apicloud的知识准备 apicloud 是一个用原生的思想搭建 ...

  6. iOS 使用百度的人脸识别登录验证,解决认证失败不跳转界面连续认证,认证相似度对比

    在使用百度人脸识别出现的问题:小米6调用摄像机是黑白的一个情况,iOS上会出现识别准确性上的问题(多次代开认证,会通过) 人脸识别(活体验证): 1.芝麻认证 : 0.4元/次,需要企业企业认证.不能 ...

  7. SpringBoot2.0 使用AOP统一处理Web请求日志(完整版)

    一,加入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...

  8. 在Ubuntu上实现人脸识别登录

    安装Howdy: howdy项目地址 sudo add-apt-repository ppa:boltgolt/howdy sudo apt update sudo apt install howdy ...

  9. 吴裕雄--天生自然python学习笔记:python 用 Open CV通过人脸识别进行登录

    人脸识别登录功能的基本原理是通过对比两张图片的差异度来判断两张图片是 否是同 一人的面部 . 对比图片 差异度 的算法有很多种,本例中使用“颜色直方图” 算法来实现对人脸图像的识别. 下面为比较 im ...

随机推荐

  1. java设计模式_单例模式

    懒汉式 非线程安全 特点:Lazy 初始化.非多线程安全.易实现 描述:这种方式是最基本的实现方式,这种实现最大的问题就是不支持多线程.因为没有加锁 synchronized,所以严格意义上它并不算单 ...

  2. MyBatis 中两表关联查询MYSQL (14)

    MyBatis 中两表关联查询MYSQL 1.创建数据库表语句 2.插入测试数据 3.pom文件内容 <?xml version="1.0" encoding="U ...

  3. 按键检测GPIO输入

    1. 项目 通过按键控制开关LED灯,按下按键灯亮,再按一下灯灭. 2. 代码 mian.c #include "stm32f10x.h" //相当于51单片机中的 #includ ...

  4. 有了 HTTP 协议,为什么还需要 Websocket?

    WebSocket 是一种基于 TCP 连接上进行全双工通信的协议,相对于 HTTP 这种非持久的协议来说,WebSocket 是一个持久化网络通信的协议. 它不仅可以实现客户端请求服务器,同时可以允 ...

  5. STL模板

    目录 栈stack 队列queue 列表List 集合set 映射map 多重映射multimap 对pair 元组tuple 容器containers 算法algorithms 仿函数/函数对象fu ...

  6. 把二叉树打印成多行 牛客网 剑指Offer

    把二叉树打印成多行 牛客网 剑指Offer 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行 # class TreeNode: # def __init__(self, x) ...

  7. 第10课 OpenGL 3D世界

    加载3D世界,并在其中漫游: 在这一课中,你将学会如何加载3D世界,并在3D世界中漫游.这一课使用第一课的代码,当然在课程说明中我只介绍改变了代码. 这一课是由Lionel Brits (βtelge ...

  8. linux 内核源代码情景分析——i386 的页式内存管理机制

    可以看出,在页面目录中共有210 = 1024个目录项,每个目录项指向一个页面表,而在每个页面表中又共有1024个页面描述项. 由图看出来,从线性地址到物理地址的映射过程为: 1)从CR3取得页面目录 ...

  9. 从0到1搭建自己的组件(vue-code-view)库(上)

    0x00 前言 本文将从结构.功能等方面讲解下项目 vue-code-view 的搭建过程,您可以了解以下内容: 使用 vue cli 4从0搭建一个组件库及细致配置信息. 项目的多环境构建配置. 项 ...

  10. 开发笔记-----Ajax 基础使用

    一.GET 方式的用法: 1 <!--html --> 2 <div class="layui-form"> 3 <div class="l ...