基于JavaScript的百度AI的人脸识别微信小程序(深度学习+机器视觉)含全部工程源码及视频演示(仅供学习)

news2024/9/27 21:18:49

目录

  • 前言
  • 总体设计
    • 系统整体结构图
    • 系统流程图
  • 运行环境
  • 模块实现
    • 1. Access token 获取
    • 2. 人脸注册
    • 3. 人脸删除
    • 4. 人脸识别
  • 系统测试
  • 工程源代码下载
  • 其它资料下载

在这里插入图片描述

前言

本项目采用了百度AI的训练模型,利用图像识别接口返回结果,旨在实现人脸在库中的判断,以及相关的人脸注册、删除和登录等业务场景。

通过使用百度AI的训练模型,我们可以对输入的图像进行人脸检测和识别。首先,我们调用图像识别接口,将待检测的图像传入,然后获取返回的结果。

在人脸注册场景中,我们可以提供一张照片作为注册样本,将其与已有的人脸库进行比对。通过分析图像中的人脸特征,我们可以判断人脸是否在库中,以及其相似度。如果人脸在库中,我们可以将其关联到相应的身份信息。

在人脸删除场景中,我们可以提供一个人脸的标识或身份信息,然后将其从人脸库中删除。这可以用于管理人脸信息的更新和维护。

在人脸登录场景中,我们可以通过输入一张待验证的人脸图像,与已有的人脸库进行比对。如果相似度达到一定的阈值,我们可以确认用户的身份,从而实现人脸登录的功能。

通过使用百度AI的训练模型和图像识别接口,我们可以快速准确地进行人脸相关的业务处理。这个项目的应用潜力非常广泛,可以用于人脸识别门禁系统、人脸支付认证、人脸考勤等多个领域,提升安全性和便利性。

总体设计

本部分包括系统整体结构图和系统流程图。

系统整体结构图

系统整体结构如图所示。

在这里插入图片描述

系统流程图

系统流程如图所示。

在这里插入图片描述

运行环境

官网地址:https://cloud.baidu.com/,注册百度账号。进入管理控制台->产品服务->人工智能->人脸识别->创建应用->填写必要信息->立即创建,创建人脸识别应用。得到对应的 API KeySecret Key 后,在人脸库中新建一个分组即可。

下载地址:https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html,安装完成扫码登录后即可创建人脸识别项目,单击新建项目,填写好必要信息后,获取APPID

模块实现

本项目包括 4 个模块:Access token 获取、人脸注册、人脸删除和人脸识别,下面分别给出各模块的功能介绍及相关代码。

1. Access token 获取

根据百度云产品文档,百度 AIP 开放平台使用 OAuth2.0 授权调用开放 API,在 URL中带上 access_token 参数。向授权服务地址发送请求(推荐使用 POST),并在 URL 中带上以下参数:

grant_type: 必须参数,固定为client_credentials;
client_id: 必须参数,应用API Key;
client_secret: 必须参数,应用Secret Key。

获取成功后,将返回值access_token保存为token,相关代码如下:

wx.request({
      url: 'https://aip.baidubce.com/oauth/2.0/token',  
            data: {
           grant_type: 'client_credentials',
           client_id: 'Oi3FpajiHUArp7KQrXgEwb7k',// API Key
           client_secret: '********************'// Secret Key
            },
           header: {
              'Content-Type': 'application/json' 
            },
           success(res) {
               that.setData({
                token: res.data.access_token//获取到token
         })
       }
     })

2. 人脸注册

在微信小程序中创建注册人脸的页面,将摄像头截取的图片转为 base64 编码,并转成字符串,使用该字符串代替图像地址,相关代码如下:

wx.getFileSystemManager().readFile({
                  filePath: this.data.src, //选择图片返回的相对路径
                  encoding: 'base64', //编码格式
                  success: res => { //成功回调
                    this.setData({
                    base64: res.data
                  })
                }
              })

使用请求url:https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/add,上传图片。参数为imageimage_typegroup_iduser_id,其中group_id为之前新建的人脸库分组,user_id通过输入获得。注册成功后跳转回user页面,展示人脸库中的用户名,相关代码如下:

    wx.uploadFile({
          url: 'https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/add?access_token=' + "***********",
            filePath: that.data.src,
            name: 'file',
            formData: {
              'image': this.data.base64,
              'image_type': 'BASE64',
              'group_id': 'test',
              'user_id': this.data.username //输入的名字
            },
header: {
            'Content-Type': 'application/json' 
            },
            success: function (res) {
                wx.hideLoading();
                console.log(res);
                var data = JSON.parse(res.data);
                if (res.statusCode ==200) {
                    wx.switchTab({
                        url: '/pages/user/user'
                    })
                } 

获得百度云请求人脸注册的返回值如图所示。

在这里插入图片描述

3. 人脸删除

删除之前,加入展示人脸的界面,根据请求 url :https://aip.baidubce.com/rest/2.0/face/v3/faceset/group/getusers,上传 group_id 即可,其返回值为列表形式,将其保存,相关代码如下:

getList() {
        let that = this;
        wx.request({
          url: 'https://aip.baidubce.com/rest/2.0/face/v3/faceset/group/getusers?access_token=' + "24.a9cbfb843b4f4ec029924cccd300eb25.2592000.1588666636.282335-19228982",
          data: {
            group_id:'test'
          },
          header: {
            'Content-Type': 'application/json' 
          },
            success: function (res) {
                console.log(res);
                if (res.statusCode != 200) {
                    wx.showToast({
                        title: res.data,
                        icon: 'none',
                        duration: 2000
                    });
                } else {
                    that.setData({
                      list: res.data.result.user_id_list
                    });
                }
            },
            fail: function (res) {
                wx.showToast({
                    title: '请求用户列表错误',
                    icon: 'none',
                    duration: 2000
                });
            }
        })
    },

在wxml文件中,使用wx.for将保存在list中的每个元素创建一个cell并输出,同时为每个元素新建一个按钮。使按钮与元素一一对应,每个按钮可赋值data-id参数为对应元素的数据,以便在js文件中获取元素的face_token,相关代码如下:

<view class="weui-cell" wx:for="{{list}}" wx:for-item="item">
                <view class="weui_cell__bd">{{item}}</view>
                <view class="weui-cell__ft">
                    <button class="weui-btn" type="warn" size="mini" data-id="{{item}}" bindtap="delUser">删除</button>
                </view>
            </view>

在百度云人脸识别中,想删除人脸,必须上传face_token参数,因此,使用获取用户列表API接口:https://aip.baidubce.com/rest/2.0/face/v3/faceset/group/getusers,根据用户名user_id和分组名group_id获取face_token;上传user_idgroup_idface_token三个参数实现人脸删除,成功后调用getlist函数实现人脸列表更新。其中user_id根据赋值的按钮通过e.currentTarget.dataset.id获取,相关代码如下:

   //获取face_token
   wx.request({
                      url: 'https://aip.baidubce.com/rest/2.0/face/v3/faceset/face/getlist?access_token=' + "24.a9cbfb843b4f4ec029924cccd300eb25.2592000.1588666636.282335-19228982",
                      header: {
                        'Content-Type': 'application/json' // 默认值
                      },
                      data: {
                        group_id: 'test',
                        user_id: e.currentTarget.dataset.id,//从按钮中获取
                      },
                        success: function (res) {
                       //console.log(res)
                          var temp = res.data.result
                          var face = temp.face_list[0].face_token
                          wx.request({
                            url: 'https://aip.baidubce.com/rest/2.0/face/v3/faceset/face/delete?access_token=' + "24.a9cbfb843b4f4ec029924cccd300eb25.2592000.1588666636.282335-19228982",
                            method: 'POST',
                            data: {
                              group_id: 'test',
                              user_id: e.currentTarget.dataset.id,
                              face_token:face //要删除的人脸facetoken
                            },
                            header: {
                              'Content-Type': 'application/json' 
                            },
                             success(res) {
                              var errorcode = res.data.error_code
                              if (errorcode == 0) //访问成功
                              {
                                wx.showToast({
                                  title: '删除成功',
                                  icon: 'success',
                                  duration: 2000
                                })
                                that.getList();
                                }
                             }
                            })
                        },

4. 人脸识别

该部分使用百度云人脸搜索 API 接口,调用 1:N 识别,在人脸库集合中,找到最相似的人脸。在 home 页面调用摄像头并保持常亮,和注册人脸的要求一样进行拍照并将其转换为base64 格式,图片的 base64 编码将图片数据编码成字符串,使用该字符串代替图像地址。

通过百度云人脸识别接口 https://aip.baidubce.com/rest/2.0/face/v3/search,上传 imageimage_typegroup_id_list 三个数据,其中 image 参数为摄像头拍摄图片的 base64 格式。获得返回值,根据 score 为用户的匹配得分,判断人脸是否在人脸库中,如图所示。

在这里插入图片描述

相关代码如下:

       wx.request({
          url: 'https://aip.baidubce.com/rest/2.0/face/v3/search?access_token=' + "24.a9cbfb843b4f4ec029924cccd300eb25.2592000.1588666636.282335-19228982",
          method: 'POST',
          data: {
            image: that.data.base64,
            image_type: 'BASE64',
            group_id_list: 'test' //自己的用户组ID
          },
          header: {
            'Content-Type': 'application/json' // 默认值
          },
          success(res) {
            wx.hideLoading();
            var errorcode = res.data.error_code
            if (errorcode == 0) //访问成功
            {
              var ulist = res.data.result
              if (ulist.user_list != null) {
                var result = ulist.user_list[0].score
                 if (result > 80) {
                  wx.showToast({
                    title: '验证通过',
                    icon: 'success',
                    duration: 2000
                  })

系统测试

人脸注册效果如图 1 所示,添加了新用户 syy;删除用户 test,实现效果如图 2 所示;在登录界面单击识别,实现拍照识别功能,效果如图 3 所示;识别成功率如图 4所示。

在这里插入图片描述

图1 人脸注册图

在这里插入图片描述

图2 人脸删除

在这里插入图片描述

图3 识别成功效果

在这里插入图片描述

图4 识别成功率

在微信开发者工具中调试完毕,选择真机调试,形成二维码,手机打开微信,扫描二维码后进入应用,真机调试中数据截图如图所示,真机调试 Status 参数为 200 表示调用成功。

在这里插入图片描述

图5 真机调试及数据图

工程源代码下载

详见本人博客资源下载页

其它资料下载

如果大家想继续了解人工智能相关学习路线和知识体系,欢迎大家翻阅我的另外一篇博客《重磅 | 完备的人工智能AI 学习——基础知识学习路线,所有资料免关注免套路直接网盘下载》
这篇博客参考了Github知名开源平台,AI技术平台以及相关领域专家:Datawhale,ApacheCN,AI有道和黄海广博士等约有近100G相关资料,希望能帮助到所有小伙伴们。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/688469.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

制造业质量管理如何实现数字化转型?这份指南讲透了

一、什么是制造业质量管理 制造业质量管理是现代制造业非常重要的一个方面。它包括了一系列的活动和方法&#xff0c;以确保制造产品或提供服务的过程中&#xff0c;实现高质量标准的目标。 制造业质量管理包括质量规划、控制和改进等各种方法和工具&#xff0c;以确保产品或…

4.25 IO多路复用简介 4.26select API介绍 4.27 select代码编写

4.25 IO多路复用简介 IO多路复用使得程序能同时监听多个文件描述符&#xff0c;能够提高程序的性能&#xff0c;Linux下实现IO多路复用的系统调用主要有select、poll和epoll。 4.26select API介绍 主旨思想&#xff1a; 1、首先构造一个关于文件描述符的列表&#xff…

【高危】Openfire权限绕过漏洞(POC公开)

漏洞描述 Openfire是Java开发且基于XMPP&#xff08;前称Jabber&#xff0c;即时通讯协议&#xff09;的开源实时协作&#xff08;RTC&#xff09;服务器。 在受影响版本中&#xff0c;由于路径验证机制存在缺陷&#xff0c;攻击者可以通过/setup/setup-s/%u002e%u002e/%u002e…

基于Python所写的学生管理系统

点击下方链接获取源码资源&#xff1a; https://download.csdn.net/download/qq_64505944/87950397?spm1001.2014.3001.5503 《学生信息管理系统》程序使用说明 在IDLE中运行《学生信息管理系统》即可进入如图1所示的系统主界面。在该界面中可以选择要使用功能对应的菜单进行…

【编译、链接、装载十四】堆与内存管理

【编译、链接、装载十四】堆与内存管理 一、堆与内存管理1、什么是堆 二、Linux进程堆管理三、Windows进程堆管理Q&A 一、堆与内存管理 相对于栈而言&#xff0c; 堆这片内存面临一个稍微复杂的行为模式&#xff1a; 在任意时刻&#xff0c; 程序可能发出请求&#xff0c;…

请求响应相关知识点

这里写目录标题 请求响应概述 请求postman各种参数的封装以及接收简单参数原始方式springboot方式映射解决参数不匹配小结 实体参数简单的实体参数复杂的实体参数注意点 数组集合参数数组集合总结 日期参数json参数模拟发送注意点服务端注意点 路径参数各个参数总结 响应注解统…

66、基于51单片机超声波测距LCD1602显示报警系统设计(程序+原理图+PCB源文件+Proteus仿真+参考论文+开题报告+任务书+元器件清单等)

前 言 超声波具有指向性强&#xff0c;能量消耗缓慢&#xff0c;在介质中传播的距离较远&#xff0c;因而超声波经常用于距离的测量&#xff0c;如测距仪和物位测量仪等都可以通过超声波来实现。利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制&#xff0c;并且…

JDK8新特性-中部

文章目录 一、方法引用1.1 为什么要有方法引用?1.1.1 Lambda表达式冗余1.1.2 解决方案 1.2 方法引用的格式1.2 .1 对象::方法名1.2.2 类名::静态方法名1.2.3 类名::引用实例方法1.2.4 类名::构造器1.2.5 数组::构造器 二、Stream API2.1 集合处理的弊端2.2 Steam流式思想概述2…

HttpRunner抓包工具之HttpRunner介绍

HttpRunner简介&#xff1a; HttpRunner 是一款面向HTTP(S) 协议的通用测试框架&#xff0c;只需编写维护一份YAML/JSON 脚本&#xff0c;即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求。 作者李隆之前是大疆的测试开发工程师&#xff0c;项目起源于大疆内部…

关于数据分析中NumPy,Pandas,看完这一篇基本够了

前言 数据分析是Python的重要应用领域之一&#xff1a;Python在数据分析领域有着广泛的应用&#xff0c;许多数据科学家和分析师使用Python作为主要的数据分析工具。学好数据分析可以让你更好地应用Python来解决实际问题&#xff0c;并提升在数据分析领域的竞争力。 在当今信…

04 todoList案例

React全家桶 一、案例- TODO List 综合案例 功能描述 动态显示初始列表添加一个 todo删除一个 todo反选一个 todotodo 的全部数量和完成数量全选/全不选 todo删除完成的 todo 1.1 静态组件构建 将资料包中的todos_page/index.html中核心代码添加到Todo.jsx文件中&#xff0c;…

高速电路设计系列分享-ADC电源的设计

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 提示&#xff1a;这里可以添加技术概要 如今&#xff0c;在设计人员面临众多电源选择的情况下&#xff0c;为高速ADC设计清洁电源时可能会面临巨大挑战。在利用高效开关电源而非传统LDO的场合&#xff0c;这尤其重要。…

liunx服务器使用selenium

文章目录 前言一、服务器下载google-chrome、chromedriver1、下载chrome2、下载chromedriver 二、安装Xvfb和python库pyvirtualdisplay、selenium1、安装Xvfb2、安装python库pyvirtualdisplay 三、配置好后测试总结 前言 最近在本地windows系统&#xff08;下面简称本地&#…

在线搭建K8S,kubernetes集群v1.23.9,docker支持的最后一个版本

1. 部署环境主机&#xff08;条件说明&#xff09; master 192.168.186.128 CentOS Linux release 7.9.2009 (Core) node1 192.168.186.129 CentOS Linux release 7.9.2009 (Core) node2 192.168.186.130 CentOS Linux release 7.9.2009 (Core)2. 系统初始化-所有节点&am…

探索MediaPipe的人像分割

MediaPipe是Google开源的计算机视觉处理框架&#xff0c;基于TensorFlow来训练模型。图像分割模块提供人像分割、头发分割、多类分割。本文主要探索如何实现人像分割&#xff0c;当然在人像分割基础上&#xff0c;我们可以做背景替换、背景模糊。 目录 一、配置参数与模型 1…

负载均衡 Load Balancing

负载均衡 Load Balancing 数据链路层负载均衡网络层负载均衡应用层负载均衡均衡策略与实现轮询与随机随机权重与加权轮询一致性 hash最少活跃数&#xff08;最少连接数&#xff09; 对于电商平台而言&#xff0c;随着业务的不断发展壮大&#xff0c;网站访问量和数据量也随之急…

什么是堆栈?c语言实现栈上的pop和push操作

什么是堆栈&#xff1f;c语言实现栈上pop和push操作的算法 堆栈&#xff08;stack&#xff09;实现栈上pop和push操作解释 堆栈&#xff08;stack&#xff09; 堆栈&#xff08;stack&#xff09;是一种数据结构&#xff0c;它具有后进先出&#xff08;Last-In-First-Out&…

抖音seo矩阵系统源码开发部署思路

抖音SEO矩阵系统源码开发和部署是一项复杂而又关键的任务。在开发阶段&#xff0c;我们需要根据抖音的搜索规则和算法&#xff0c;结合用户搜索意图和关键词&#xff0c;进行深入的研究和分析&#xff0c;以建立一个优秀的SEO矩阵系统。 在部署方面&#xff0c;我们需要遵循以…

完全零基础,如何学习渗透?

网络渗透这一行&#xff0c;做个脚本小子&#xff0c;使使工具啥的&#xff0c;个把月就学会了&#xff0c;这不难。 很多人把网络渗透简单的理解成就是搞网站&#xff0c;这是大错特错的&#xff01; 不过这也难怪&#xff0c;Web安全那三招两式&#xff0c;最好教也最好学&…

还在找wma格式怎么转换mp3?

在一个遥远的国度里&#xff0c;有一位名叫小芳的歌手&#xff0c;她声音甜美动人&#xff0c;深受人们的喜爱。然而&#xff0c;她的音乐制作团队告诉她&#xff0c;她的歌曲只能以wma格式发布。但是&#xff0c;她的粉丝们大多数使用的是mp3格式的音乐播放器&#xff0c;这让…