图片识别,人脸识别,签到小程序,借助百度AI智能识别功能

一,人脸签到效果图

我们做人脸识别签到,其实就是要拿识别的人脸和数据库里的人脸对比,相识度大于一定的值,就可以判定成功。

如果我们识别的结果是98.295%,所以这里就可以认定为签到成功

1-1,效果图

1-1-1,还未签到

1-1-2,签到

1-1-3,签到成功

二,准备工作

2-1,注册百度开发者账号

我们这里使用了百度的图片识别技术,所以在使用之前我们要先注册百度开发者账号,官方地址:https://ai.baidu.com

注册地址:https://login.bce.baidu.com

至于如何注册,这里不需要我再教了吧,大家自行注册就行了。

我们主要用到的是人脸识别技术

2-2,注册完记得要实名下

现在使用百度图片识别,必须要实名认证才行。

根据自己的情况选择认证方式

学习的话,只需要个人认证即可。

2-3,创建人脸识别应用

我们这里主要使用的是百度的人脸对比功能,就是事先把要识别人的照片存到百度数据库,然后打卡时,让对应的人拍好照片,和数据库里存的人脸图片进行对比,相似度达到一定数值,比如90%相似度,就可以认为识别成功,进行签到即可。

估计百度是在为后期收费做准备,但是目前还有免费资源可以领取。既然可以白piao就先领取免费的。即便后期收费了,咱们学习使用估计也用不了太多,几毛钱的估计就够咱们学习用的了。

人脸识别官方文档:https://cloud.baidu.com/product/face

点击免费领取资源

既然免费,那当然全部领取了啊。

领取完,耐心等待生效即可。如果你在学习的时候,不能再免费领取了,那就花几毛钱付费下也行的,基本上几毛钱就够咱们学习使用了。

上面该领的都领完以后,我们就来创建应用吧。

默认人脸识别相关的都已经勾选了

选个人即可。

创建好以后,下面两个东西我们后面会用到,知道在哪里即可。

三,接入人脸识别

3-1,官方文档

我们在自己的小程序里接入人脸识别,就必须去看百度官方的技术文档。

文档地址:https://ai.baidu.com/ai-doc/FACE/Lk37c1tpf

我们这里主要就看这个人脸对比文档。

官方文档里并没有给出小程序里如何调用的代码。

所以接下来的学习要跟紧石头哥的脚步,石头哥手把手地带大家实现小程序端的调用。

3-2,人脸注册

我们要想实现人脸识别,就需要一开始先在百度的可视化人脸库里注册人脸,要调用的接口如下。

在调用这个之前,我们需要先去获取对应的acess_token,所以接下来我们要做的第一步就是获取acess_token

3-2-1,获取acess_token

我们后面做的所有操作,基本上都是要获取这个。

所以我把源码贴出来给到大家,client_id和client_secret记得换成你自己的。

wx.request({

url: 'https://aip.baidubce.com/oauth/2.0/token',

data: {

grant_type: 'client_credentials',

client_id:, //应用的API Key

client_secret: //应用的Secret Key

},

header: {

'Content-Type': 'application/json' // 默认值

},

success: res => {

this.setData({

token: res.data.access_token //获取到token

})

console.log('获取到的token', this.data.token)

}

})

3-2-2,拍人脸照

第二步和第三步要同时进行,所以我把代码放到下面第三步

3-2-3,注册人脸到百度人脸库

我们在拍照以后,获取到图片,并通过 wx.getFileSystemManager().readFile()方法把图片转换为base64,因为百度需要这样格式的数据

对应的代码如下:

var that = this;

//拍照

const ctx = wx.createCameraContext()

ctx.takePhoto({

quality: 'high',

success: (res) => {

that.setData({

src: res.tempImagePath //获取图片

})

//图片base64编码

wx.getFileSystemManager().readFile({

filePath: that.data.src, //选择图片返回的相对路径

encoding: 'base64', //编码格式

success: res => { //成功的回调

that.setData({

base64: res.data

})

//第三步:上传人脸进行注册

wx.request({

url: 'https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/add?access_token=' + that.data.token,

method: 'POST',

data: {

image: that.data.base64,

image_type: 'BASE64',

group_id: 'users', //自己建的用户组id

user_id: app.globalData.userInfo.phone, //学号

user_info: app.globalData.userInfo.name //存储学生姓名

},

header: {

'Content-Type': 'application/json' // 默认值

},

success(res) {

that.setData({

msg: res.data.error_msg

})

console.log("人脸注册返回结果", res)

//做成功判断

if (that.data.msg == 'SUCCESS') { //微信js字符串使用单引号

wx.showToast({

title: '注册成功',

icon: 'success',

duration: 2000

})

// that.registerFace()

}

}

}),

//失败尝试

wx.showToast({

title: '请重试',

icon: 'loading',

duration: 500

})

}

})

} //拍照成功结束

}) //调用相机结束

这几个参数,要记得换成自己的

group_id: 'users', //自己建的用户组id

user_id: app.globalData.userInfo.phone, //学号或者用户电话能唯一标识用户的

user_info: app.globalData.userInfo.name //存储用户姓名

我们注册完以后,可以在百度人脸库里看到这条数据,可以看到我们创建的users表。

3-3,查看人脸库

我们进入百度的控制台,找到如下的类目

然后点开用户123,就可以看到他注册的人脸照片。

四,人脸比对

我们在上面注册好人脸以后,接下来就可以使用人脸打卡功能了。

使用之前还是第一步,获取acess_token

4-1,获取acess_token

// acess_token获取

getTokenInfo() {

var that = this

wx.request({

url: 'https://aip.baidubce.com/oauth/2.0/token',

data: {

grant_type: 'client_credentials',

client_id: app.globalData.client_id, //应用的API Key

client_secret: app.globalData.client_secret //Secret Key

},

header: {

'Content-Type': 'application/json' // 默认值

},

success(res) {

that.setData({

token: res.data.access_token //获取到token

})

console.log(that.data.token)

}

})

},

4-2,人脸比对

核心代码如下:

//拍照并编码

takePhoto() {

let that=this

const ctx = wx.createCameraContext()

ctx.takePhoto({

quality: 'high',

success: (res) => {

//图片base64编码

wx.getFileSystemManager().readFile({

filePath: res.tempImagePath, //选择图片返回的相对路径

encoding: 'base64', //编码格式

success: res => { //成功的回调

that.signInFace(res.data)

}

})

}

})

},

//上传人脸进行 比对

signInFace(base64) {

var that = this

if (base64 != "") {

wx.request({

url: 'https://aip.baidubce.com/rest/2.0/face/v3/search?access_token=' + that.data.token,

method: 'POST',

data: {

image: base64,

image_type: 'BASE64',

group_id_list: 'users' //自己建的用户组id

},

header: {

'Content-Type': 'application/json' // 默认值

},

success(res) {

console.log("人脸对比返回结果", res)

if (res.data.error_msg == "match user is not found") {

wx.showModal({

title: '签到失败',

content: '请先注册人脸才可以人脸使用',

})

}

if (res.data.error_msg == "SUCCESS") {

that.setData({

msg: res.data.result.user_list[0].score,

})

// console.log(res)

if (that.data.msg > 80) { //相似度大于80

console.log('人脸识别成功')

} else {

wx.showToast({

title: '人脸识别失败',

})

}

} else {

wx.showToast({

title: '人脸识别失败',

})

}

}

});

}

if (base64 == "") {

wx.showToast({

title: '请重试',

icon: 'loading',

duration: 500

})

}

},

我们执行代码以后,会返回一个相识度,我这里规定相识度80%以上即为同一个人。

看日志可以知道我们的相识度是98.295%,所以这里就可以认定为签到成功

原文地址:https://www.toutiao.com/article/7088559805996024360/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340