当前位置: 首页 > news >正文

小程序实现人脸识别功能

调用api   wx.startFacialRecognitionVerify

第一步:

// 修改方法expertUpdate() {wx.startFacialRecognitionVerify({name: _this.registerForm.realName, //身份证名称idCardNumber: _this.registerForm.idCard, //身份证号码checkAliveType: 1, //屏幕闪烁(人脸核验的交互方式,默认0,读数字)success(res) {console.log(res)  //认证结果if(res.errCode == 0){//识别成功  这个时候可以调后端的接口 (带着返的res.verifyResult)_this.verifyUser(res.verifyResult)}else{tipInfo("识别失败")}},complete(res) {console.log(res)},fail(e) {console.log("err", err)//失败处理方法wx.showToast('请保持光线充足,面部正对手机,且无遮挡')}})}

第二步:调方法 校验后端的接口

 // 人脸识别  根据上一个方法把verify_result传过来  //后端的校验接口verifyUser(verify_result) {//看后端实际要求 要传身份证号码不let obj = {uuid: this.infoForm.idCard,verify_result: verify_result}//后端接口=>verifyUserverifyUser(obj).then(res => {if (res.code == '0') {this.$refs.uForm.validate().then(res => {let obj = {pkid: uni.getStorageSync('expert_info').pkid,memberId: uni.getStorageSync('expert_info').memberId,avatar: this.fileList1[0].url,realName: this.infoForm.realName,orgName: this.infoForm.orgName,idCard: this.infoForm.idCard,province: this.infoForm.province,city: this.infoForm.city,district: this.infoForm.district,phone: this.infoForm.phone,professorLevel: this.infoForm.professorLevel,adept: this.infoForm.adept,intro: this.infoForm.intro,smsCode: this.infoForm.smsCode,annex: this.fileList2,}//修改方法expertUpdate(obj).then(res => {console.log(res, '修改成功了吗');if (res.code == '0') {uni.$u.toast('修改成功', 5000)uni.navigateBack()//修改成功后 是返回上一步  还是跳转其他页面 根据实际情况} else {uni.$u.toast(res.msg, 5000)}})console.log(res);}).catch(error => {console.log(error);uni.$u.toast('请先按要求填写', 5000)})}})},

注释:完整方法  这个是实现小程序个人信息完善,加了一个判断,如果 输入框没有值则需要走人脸识别验证方法  如果有值 只是修改其他项 就不需要验证  修改完成之后 名字和身份证号码直接禁用

 // 修改方法expertUpdate() {if (this.fileList1.length == 0) {uni.$u.toast('请上传头像')return false}// 判断 realName 是否为空if (!this.infoForm.realName) {uni.$u.toast('请填写姓名');return false;}// 验证 realName 是否为中文const chineseRegex = /^[\u4e00-\u9fa5]+$/;if (!chineseRegex.test(this.infoForm.realName)) {uni.$u.toast('姓名必须为中文');return false;}// 判断 idCard 是否为空if (!this.infoForm.idCard) {uni.$u.toast('请填写身份证号码');return false;}// 验证 idCard 是否符合身份证标准const idCardRegex = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;if (!idCardRegex.test(this.infoForm.idCard)) {uni.$u.toast('身份证号格式不正确');return false;}if (this.fileList2.length == 0) {uni.$u.toast('请上传附件')return false}if (this.infoForm.intro.length > 200) {uni.$u.toast('简介字数不能超过200字!')return false}if (!this.flag) {let _this = thiswx.startFacialRecognitionVerify({name: _this.infoForm.realName,idCardNumber: _this.infoForm.idCard,checkAliveType: 1,success(res) {console.log(res)_this.verifyUser(res.verifyResult)// console.log(res)// uni.navigateBack()},complete(res) {console.log(res)},fail(e) {// console.log(res)// console.log(_this.infoForm.realName)// console.log(_this.infoForm.idCard)console.log(e, 'fail')}})} else {this.$refs.uForm.validate().then(res => {let obj = {pkid: uni.getStorageSync('expert_info').pkid,memberId: uni.getStorageSync('expert_info').memberId,avatar: this.fileList1[0].url,realName: this.infoForm.realName,orgName: this.infoForm.orgName,idCard: this.infoForm.idCard,province: this.infoForm.province,city: this.infoForm.city,district: this.infoForm.district,phone: this.infoForm.phone,professorLevel: this.infoForm.professorLevel,adept: this.infoForm.adept,intro: this.infoForm.intro,smsCode: this.infoForm.smsCode,annex: this.fileList2,}expertUpdate(obj).then(res => {console.log(res, '修改成功了吗');if (res.code == '0') {uni.$u.toast('修改成功', 5000)uni.navigateBack()// this.getExpertInfo()} else {uni.$u.toast(res.msg, 5000)}})console.log(res);}).catch(error => {console.log(error);uni.$u.toast('请先按要求填写', 5000)})}},// 人脸识别verifyUser(verify_result) {let obj = {uuid: this.infoForm.idCard,verify_result: verify_result}verifyUser(obj).then(res => {if (res.code == '0') {this.$refs.uForm.validate().then(res => {let obj = {pkid: uni.getStorageSync('expert_info').pkid,memberId: uni.getStorageSync('expert_info').memberId,avatar: this.fileList1[0].url,realName: this.infoForm.realName,orgName: this.infoForm.orgName,idCard: this.infoForm.idCard,province: this.infoForm.province,city: this.infoForm.city,district: this.infoForm.district,phone: this.infoForm.phone,professorLevel: this.infoForm.professorLevel,adept: this.infoForm.adept,intro: this.infoForm.intro,smsCode: this.infoForm.smsCode,annex: this.fileList2,}expertUpdate(obj).then(res => {console.log(res, '修改成功了吗');if (res.code == '0') {uni.$u.toast('修改成功', 5000)uni.navigateBack()// this.getExpertInfo()} else {uni.$u.toast(res.msg, 5000)}})console.log(res);}).catch(error => {console.log(error);uni.$u.toast('请先按要求填写', 5000)})}})},

相关文章:

小程序实现人脸识别功能

调用api wx.startFacialRecognitionVerify 第一步: // 修改方法expertUpdate() {wx.startFacialRecognitionVerify({name: _this.registerForm.realName, //身份证名称idCardNumber: _this.registerForm.idCard, //身份证号码checkAliveType: 1, //屏幕闪烁(人脸核验的交互…...

【】javax.crypto.IllegalBlockSizeException: Input length not multiple of 8 bytes

问题描述 jdk版本:8 用DES进行加解密,其中转换模式为“DES/CBC/NoPadding”,要加密的明文为 “密码学浅析”,执行加密操作,报如下错误 Exception in thread "main" javax.crypto.IllegalBlockSizeExcepti…...

312.戳气球

将戳气球转换到添加气球&#xff0c;记忆搜索slove(i,j)&#xff1a;在开区间(i,j)全部填满气球得到的最多硬币数&#xff0c;两端val[i]、val[j] class Solution { public:vector<vector<int>> ans;vector<int> val;int slove(int left,int right){if(left&…...

get_trade_detail_data函数使用

查阅股票持仓情况 positions get_trade_detail_data(‘8000000213’, ‘stock’, ‘position’) for dt in positions: print(f’股票代码: {dt.m_strInstrumentID}, 市场类型: {dt.m_strExchangeID}, 证券名称: {dt.m_strInstrumentName}, 持仓量: {dt.m_nVolume}, 可用数量:…...

【融合ChatGPT等AI模型】Python-GEE遥感云大数据分析、管理与可视化及多领域案例实践应用

目录 第一章 理论基础 第二章 开发环境搭建 第三章 遥感大数据处理基础与ChatGPT等AI模型交互 第四章 典型案例操作实践 第五章 输入输出及数据资产高效管理 第六章 云端数据论文出版级可视化 更多应用 随着航空、航天、近地空间等多个遥感平台的不断发展&#xff0c;近…...

LeetCode862 和至少为k的最短子数组

题目&#xff1a; 解析&#xff1a; 1、先构造前缀和数组 2、单调队列存放滑动窗口&#xff0c;目的求Sj-Si >k的情况下&#xff0c;窗口最小。 代码&#xff1a; class Solution {public int shortestSubarray(int[] nums, int k) {int n nums.length;long[] sums new …...

网卡bonding模式 - bond模式配置介绍

网卡bonding简介 网卡绑定就是把多张物理网卡通过软件虚拟成一个虚拟的网卡&#xff0c;配置完毕后&#xff0c;所有的物理网卡的ip和mac将会变成相同的。多网卡同时工作可以提高网络速度&#xff0c;还可以实现网卡的负载均衡、冗余。 bonding模式 1 round-robin(mode0) 轮转…...

做了个 chrome 插件实现 B 站视频截图功能,直接从当前视频帧无损复制

起因是看 B 站视频想截个图很麻烦&#xff0c;右下角暂停按钮无法去除&#xff0c;于是写了一行代码把暂停按钮隐藏。 后经提醒&#xff0c;发现可以通过 canvas 获取视频帧来截取图片&#xff0c;于是写了如下代码完美获取视频帧。 var v document.querySelector(".bpx…...

Docker linux 安装

sudo yum update sudo yum clean all sudo yum makecache#安装依赖 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 #添加官方存储库 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo#安装-跳过一些异常依赖…...

windows部署django服务器

windows部署django服务器 1、安装IIS1.1 控制面板-----程序----程序和功能----启用或关闭windows功能1.2安装IIS服务器&#xff0c;完成后&#xff0c;重新进入&#xff0c;把CGI安装进系统 2、安装python与虚拟环境2.1 安装python2.2 安装virtualenv虚拟环境2.3 创建一个虚拟环…...

ChatGPT prompt汇总-个人使用-持续更新....

用途 学术写作更新记录 学术写作 中译英(GPT-4) I am a researcher studying deep learning and now trying to revise my manuscript which will be submitted to the Journal of Nature . I want you to act as a scientific English-Chinese translator, I will provide yo…...

Vue实现简单的接口封装

1. 在src中创建一个api文件夹 2. 按功能、模块等新建对应的js文件 3. 在内部写对应的封装接口&#xff0c;并导出 import axios from "axios";/*** 接口名称&#xff1a;* 接收参数&#xff1a;* 返回参数&#xff1a;* */export const miens ()>{return new P…...

软件测试工具有什么作用?有哪些好用的测试工具推荐?

软件测试工具是现代软件测试中不可或缺的重要组成部分&#xff0c;指的是一系列在软件开发过程中使用的工具&#xff0c;用于帮助测试人员进行测试活动&#xff0c;提高测试效率&#xff0c;减少测试成本。选择并使用合适的软件测试工具&#xff0c;可提高软件质量和效率。 一…...

写爬虫?前端er何必用python

前言 说起网络爬虫,很多人第一时间想到python,但爬虫并非只能用python实现,虽然网上大部分爬虫文章都在说python爬虫,但对于前端程序员来说,我觉得js才是最屌的(对于简单爬取任务来说,复杂的我暂时没碰到~),下面说说我的经验(是的,仅限本人经验),希望能给各位前…...

交通物流模型 | 基于交通图卷积长短时记忆网络的网络级交通流预测

交通物流模型 | 基于交通图卷积长短时记忆网络的网络级交通流预测 由于道路网络时变的交通模式和复杂的空间依赖性,交通流预测是一个具有挑战性的时空预测问题。为了克服该挑战,作者将交通网络看为一张图,并提出一个新的深度学习预测模型,交通图卷积长短时记忆网络(TGC-L…...

web 基础和http 协议

一、域名 域名的概念 IP地址不易记忆&#xff0c;域名方便记住&#xff0c;以便于用户进行搜索访问 早期使用Hosts文件解析域名地址 缺点&#xff1a; ① 主机名称重复 ② 主机维护困难 DNS&#xff08;Domain Name System&#xff09;域名系统 ① 分布式 将一个大的数…...

Java常量与变量

Java常量与变量 在程序执行过程中&#xff0c;其值不能被改变的量称为常量&#xff0c;其值能被改变的量称为变量。 Java关键字 Java关键字 int public (公有的,可跨包) new finally throw (抛出一个异常对象) continuefloatlongshort extends (继承,用于类继承类) returnbrea…...

神经网络中卷积和池化的区别

1、什么叫卷积&#xff1f; 卷积层是用一个固定大小的矩形区去席卷原始数据&#xff0c;将原始数据分成一个个和卷积核大小相同的小块&#xff0c;然后将这些小块和卷积核相乘输出一个卷积值&#xff08;注意这里是一个单独的值&#xff0c;不再是矩阵了&#xff09;。 卷积的…...

RK3568平台开发系列讲解(驱动篇)RK3568 PWM详解

🚀返回专栏总目录 文章目录 一、什么是PWM二、RK3568 PWM2.1、PWM 通道与引脚2.2、PWM 简介2.3、PWM 设备节点沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 PWM 是很常用到功能,我们可以通过 PWM 来控制电机速度,也可以使用 PWM 来控制 LCD 的背光亮度。 一、什…...

禾匠商城系统 企业转账到零钱 修改成 商家转账到零钱

注意php 7以上的json_encode 溢出 修改的路径&#xff1a; vendor/luweiss/wechat/src/Wechat/WechatPay.php <?phpnamespace luweiss\Wechat;class WechatPay extends WechatBase {const SIGN_TYPE_MD5 MD5;const TRADE_TYPE_JSAPI JSAPI;const TRADE_TYPE_NATIVE NA…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...