使用uniapp开发微信小程序的人脸采集功能/人脸识别功能

article/2025/3/20 4:20:55

请添加图片描述

✅作者简介:大家好我是瓜子三百克,励志成为全栈工程师的一枚程序猿,也是喜欢在学习和开发中记录笔记的小白博主!
📃个人主页:瓜子三百克的主页
🔥系列专栏:uniapp前端
💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞

请添加图片描述
本篇文章是借助微信小程序平台,添加人脸采集的功能,你看上面的漂亮姐姐有什么理由不去采集一下她的人脸呢。😂😂

开发环境:
开发框架:uniapp
开发平台:微信小程序


标签和样式先上:
标签:

<template><view class="page-content"><view class="containerV"><view class="headerV"><view class="top-tips1"><view>请将正对手机,头部匹配摄像区域</view></view><view class="top-tips2">为了捍卫你的不要脸,请拍摄本人头像</view></view><view class="contentV"><view class="mark"></view><image v-if="tempImg" mode="widthFix" :src="tempImg" /><camera v-if='isAuthCamera' :device-position="devicePosition ?'front': 'back'" class="camera"flash="off" resolution='high' /><view v-show="!tempImg && tipsText" class="tipV">{{ tipsText }}</view></view><view class="footerV"><view style="width: 100%;"><view v-if="!tempImg" style="width: 100%;"><view class="privacyV"><view class="icon"></view><view class="text">照片隐私<text @click="handleJumpSecurityClick">安全保障</text>中…</view></view><view class="bottom-tips-2">该照片作为你不要脸的铁证</view><view class="take-photo-bgV"><!-- 图片上传 --><view v-show="true" class="btn-change-upload" @click="handleChooseImage" /><!--拍照--><view class="btn-take-photo" @click="handleTakePhotoClick" /><!-- 切换镜头 --><view class="btn-change-camera" @click="handleChangeCameraClick" /></view></view><view class="confirmV" v-else><view class="btn-cancel" @click="handleCancelClick">取消</view><view class="btn-ok" @click="handleOkClick">确定</view></view></view></view></view></view>
</template>

样式:

<style lang="scss" scoped>.page-content {width: 100%;height: 100%;.containerV {width: 100%;height: 100%;.headerV {.top-tips1 {margin-top: 60rpx;color: #1C1C1C;font-size: 36rpx;text-align: center;}.top-tips2 {margin-top: 20rpx;color: #00AAFF;font-size: 28rpx;text-align: center;}}.contentV {position: relative;display: flex;flex-direction: column;align-items: center;justify-content: center;height: 661rpx;margin-top: 30rpx;.tipV {bottom: 30rpx;position: absolute;line-height: 90rpx;padding-left: 24rpx;padding-right: 24rpx;max-width: calc(100vw - 50rpx * 2);text-align: center;font-size: 30rpx;background: #000000;opacity: 0.75;color: #FFFFFF;border-radius: 16rpx;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;z-index: 5;}.camera {width: 100%;height: 100%;}.mark {position: absolute;left: 0;top: 0;z-index: 2;width: 750rpx;height: 100%;background: url("@/static/face/view_face_background.png") no-repeat center bottom;background-size: 750rpx 661rpx;}image {position: absolute;width: 100%;height: 100%;z-index: 3;}}.footerV {width: 100%;display: flex;flex-direction: row;align-items: center;justify-content: center;.privacyV {padding-top: 30rpx;display: flex;flex-direction: row;align-items: center;justify-content: center;.text {font-size: 30rpx;color: #1C1C1C;text-align: center;line-height: 42rpx;margin-left: 15rpx;text {font-size: 30rpx;color: #00AAFF;text-align: center;line-height: 42rpx;}}.icon {width: 40rpx;height: 47rpx;background: url("@/static/face/icon_face_security.png") no-repeat;background-size: 100% auto;}}.bottom-tips-2 {margin-top: 20rpx;color: #999999;text-align: center;font-size: 26rpx;}.take-photo-bgV {width: 100%;margin-top: 30rpx;display: flex;flex-direction: row;align-items: center;justify-content: center;.btn-take-photo {// 由于左边没有按钮,所以左边要便宜更大,以便是拍照按钮居中margin: 0rpx 80rpx 0rpx 80rpx;width: 196rpx;height: 196rpx;background: url("https://pro-file-qn.ztjy61.com/1003020211103145058685NNR9vlTm.png") no-repeat;background-size: 100% auto;}.btn-change-upload {left: 130rpx;width: 80rpx;height: 80rpx;background: url("@/static/face/icon_face_upload_picture.png") no-repeat;background-size: 100% auto;}.btn-change-camera {right: 130rpx;width: 80rpx;height: 80rpx;background: url("@/static/face/icon_face_switch_cameras.png") no-repeat;background-size: 100% auto;}}.confirmV {margin: 200rpx 100rpx 0rpx 100rpx;display: flex;flex-direction: row;align-items: center;justify-content: space-between;.btn-cancel {font-size: 32rpx;color: #1C1C1C;}.btn-ok {font-size: 32rpx;color: #00AAFF;}}}}}
</style>

js逻辑:
关键点代码中已经注释


<script>export default {name: 'index',components: {},data() {return {tipsText: '', // 错误文案提示tempImg: '', // 本地图片路径cameraEngine: null, // 相机引擎devicePosition: false, // 摄像头朝向isAuthCamera: true, // 是否拥有相机权限}},onLoad(options) {this.initData()},methods: {// 初始化相机引擎initData() {// #ifdef MP-WEIXIN// 1、初始化人脸识别wx.initFaceDetect()// 2、创建 camera 上下文 CameraContext 对象this.cameraEngine = wx.createCameraContext()// 3、获取 Camera 实时帧数据const listener = this.cameraEngine.onCameraFrame((frame) => {if (this.tempImg) {return;}// 4、人脸识别,使用前需要通过 wx.initFaceDetect 进行一次初始化,推荐使用相机接口返回的帧数据wx.faceDetect({frameBuffer: frame.data,width: frame.width,height: frame.height,enablePoint: true,enableConf: true,enableAngle: true,enableMultiFace: true,success: (faceData) => {let face = faceData.faceInfo[0]if (faceData.x == -1 || faceData.y == -1) {this.tipsText = '检测不到人'}if (faceData.faceInfo.length > 1) {this.tipsText = '请保证只有一个人'} else {const {pitch,roll,yaw} = face.angleArray;const standard = 0.5if (Math.abs(pitch) >= standard || Math.abs(roll) >= standard ||Math.abs(yaw) >= standard) {this.tipsText = '请平视摄像头'} else if (face.confArray.global <= 0.8 || face.confArray.leftEye <=0.8 || face.confArray.mouth <= 0.8 || face.confArray.nose <= 0.8 ||face.confArray.rightEye <= 0.8) {this.tipsText = '请勿遮挡五官'} else {this.tipsText = '请拍照'// 这里可以写自己的逻辑了}}},fail: (err) => {if (err.x == -1 || err.y == -1) {this.tipsText = '检测不到人'} else {this.tipsText = err.errMsg || '网络错误,请退出页面重试'}},})})// 5、开始监听帧数据listener.start()// #endif},// 切换设备镜头handleChangeCameraClick() {this.devicePosition = !this.devicePosition;},// 图片上传handleChooseImage() {uni.chooseImage({count: 1,sizeType: ['original', 'compressed'],sourceType: ['album'],success: (res) => {if (res.errMsg === 'chooseImage:ok') {uni.showLoading({title: '照片上传中...'})console.log("===========:", res.tempFilePaths[0])this.handleOkClick()}},fail: (res) => {},});},// 拍照点击handleTakePhotoClick() {if (this.tipsText != "" && this.tipsText != "请拍照") {return;}uni.getSetting({success: (res) => {if (!res.authSetting['scope.camera']) {this.isAuthCamera = falseuni.openSetting({success: (res) => {if (res.authSetting['scope.camera']) {this.isAuthCamera = true;}}})}}})this.cameraEngine.takePhoto({quality: "high",success: ({tempImagePath}) => {this.tempImg = tempImagePathconsole.log("=======tempImg:", this.tempImg)}})},// 点击确定上传handleOkClick() {uni.showLoading({mask: true,title: '校验中...'})// 更新人脸识别图片请求协议:传七牛图片链接				setTimeout(function() {uni.hideLoading()uni.showToast({icon: "none",title: "假装图片上传成功",duration: 2000,})}, 3000);},// 点击 - 取消上传handleCancelClick() {this.tempImg = ''},// 点击 - 人脸安全保障按钮handleJumpSecurityClick() {uni.showToast({icon: "none",title: "假装跳转人脸安全保障",duration: 2000,})},}}
</script>

拓展:
可以将图片上传至服务器,由服务器做人脸识别,这样功能就齐全了。

视频为上:

人脸采集

demo:
1、gitee:https://gitee.com/chenzm_186/face-detect-mini
2、csdn:https://download.csdn.net/download/weixin_38633659/85385944


**🏆结束语🏆 **

最后如果觉得我写的文章对您有帮助的话,欢迎点赞✌,收藏✌,加关注✌哦,谢谢谢谢!!

在这里插入图片描述


http://chatgpt.dhexx.cn/article/xdXaS218.shtml

相关文章

无需证书微信小程序实现人脸识别—E证通

E证通 前言收费标准接入准备小程序1、 添加服务器域名白名单2、添加业务域名白名单3、安装 SDK/小程序包4、SDK 调用步骤即实操代码4.1、初始化 SDK4.2、 调用 SDK 5、拿到回调结果6、使用uni-app开发6.1、小程序运行后&#xff0c;在小程序中丢入sdk包6.2、把sdk包转换成uni-a…

小程序实现人脸识别与小程序发布

文章目录 前言主要实现功能效果演示PC端手机端 调用百度Ai人脸检测接口小程序发布流程项目源码编程之外 前言 人脸识别其实没那么复杂&#xff0c;我国几个大厂都有他们的AI开放平台&#xff0c;调用一下他们的人脸检测接口就行了&#x1f601;&#xff08;虽然接口不是自己写的…

节假日查询接口,加班,补班,日期查询,放假,日历

一、接口介绍 通过本数据&#xff0c;可以查询节假日、加班日期&#xff0c;以及每个日期的对应的国际日和我国传统节日的简介。广泛使用于日程安排、证券投资、日历等功能的应用中展示。 二、使用案例截图 如何查看调用效果&#xff1f; 1、通过链接&#xff0c;点击【在线…

php中阿里云快递物流查询接口使用

php中阿里云快递物流查询接口使用 官方给的php代码如下&#xff1a; $host "https://ali-deliver.showapi.com";$path "/showapi_expInfo";$method "GET";$appcode "你自己的AppCode";$headers array();array_push($headers, &qu…

智能疾病查询接口

疾病类目&#xff0c;疾病症状&#xff0c;智能疾病查询&#xff0c;医疗知识图谱 ​ 一、接口介绍 最全的疾病大全&#xff0c;收集了数万种常见疾病&#xff0c;任何常见疾病都可查询。 二、功能体验 三、演示效果 四、API文档 4.1 查询疾病科目 4.1.1接入点说明 查询…

调用阿里API获取城市天气信息

目录 一&#xff0e;阿里云天气预报API接口介绍2.1阿里云天气预报API介绍2.2 调用API准备工作及认识 二&#xff0e;调用天气预报API三&#xff0e;代码实现四&#xff0e;结果展示五、问题与解决办法 赵继涛&#xff0c;男&#xff0c;西安工程大学电子信息学院&#xff0c;20…

如何调用showapiRequest解决图片验证码识别?

一、思路&#xff08;我埋了一个坑&#xff09; &#xff08;1&#xff09;保存整张登录页面的图片 &#xff08;2&#xff09;剪切验证码区域的图片 &#xff08;3&#xff09;调用showapiRequest识别剪切好的图片 二、保存整张图片 保存当前页面的整张图片括号里面是保存图…

天气预报

到目前为止,我们的公众号已经可以回复用户发出的消息,但是如果仅仅如此,就没必要设为开发模式了。完全不懂编程的人也可以在微信公众平台上设置回复用户的消息。 现在我们来实现我们的公众号查询全国各个城市天气这么一个功能,像公众号输入天气+地名(天气南京)就可以查询…

天气预报查询数据接口、实时天气、未来24小时、7天/15天预报

小编在此向大家介绍拥有105亿调用量的产品&#xff0c;该接口文档清晰&#xff0c;对接方便&#xff0c;服务超好。 一、接口介绍 通过坐标区域、IP、地名、景点名称、电话区号或邮编等有效信息可查询天气情况&#xff08;天气状况、湿度、天气图标、实时温度、风向、风级、紫…

php如何调用天气预报api,PHP调用API接口实现天气查询功能的示例

php 的 PHP调用API接口实现天气查询功能的示例 天气预报查询接口API&#xff0c;在这里我使用的是国家气象局天气预报接口 使用较多的还有&#xff1a;新浪天气预报接口、百度天气预报接口、google天气接口、Yahoo天气接口等等。 1、查询方式 根据地名查询各城市天气情况 2.请求…

微信公众号开发_调用新闻查询接口_回复图文消息

文章目录 一、新闻API接口返回的Json示例实体类测试类测试 二、发送图文消息xml数据格式实体类创建自定义菜单处理点击事件查询新闻工具类 仓库代码地址关注微信公众号 发送效果&#xff1a; 一、新闻API接口 使用的是阿里云市场的服务 全国热门带正文新闻查询API接口 使用方式…

全国(全球)快递查询物流查询API,物流信息追踪接口

一、接口介绍 支持国内外1500快递物流公司的物流跟踪服务&#xff0c;包括顺丰、圆通、申通、中通、韵达等主流快递公司。同时&#xff0c;支持单号识别快递物流公司、按次与按单计费、物流轨迹返回等功能&#xff0c;以满足企业对快递物流查询多维度的需求。 二、使用案例截…

历史上的今天

一、接口介绍 看看历史上的今天&#xff0c;都发生了什么重大事件。查历史上的指定日期发生的事情&#xff0c;包括国家大事、国际大事、政府重要决策部署等图文详情内容&#xff0c;不断增加中。 二、使用示例截图 { "showapi_res_error": "", "sh…

3-性能测试知识面

脚本开发相关 根据不同协议&#xff0c;选择不同工具 协议 httpjdbcsoapwebsocketdubboMQ 工具 Jmeter「线程」loadrunner「进程、线程&#xff08;默认&#xff09;」wrkabngrinder「jpython、groovy」locust「协程」 扩展 Jmeter支持的语言&#xff1a; javapythonjythongroo…

天气预报查询数据接口、实时天气、24小时天气、未来24小时、7天/15天预报

小编在此向大家介绍拥有105亿调用量的产品&#xff0c;该接口文档清晰&#xff0c;对接方便&#xff0c;服务超好。 一、接口介绍 通过坐标区域、IP、地名、景点名称、电话区号或邮编等有效信息可查询天气情况&#xff08;天气状况、湿度、天气图标、实时温度、风向、风级、紫…

百度html的json解析,百度调用API返回json数据解析

在这里支队返回数据解析&#xff0c;不做请求数据​ &#xfeff;第一种格式json解析​ ​String jsonresult ”{"showapi_res_code":0,"showapi_res_error":"","showapi_res_body":{"list":[{"ct":"2016-02…

tp5 对接万维易源ISBN接口

首先购买万维易源的一元套餐 下面都有详细的说明 接口返回的数据格式是 {"showapi_res_error": "","showapi_res_code": 0,"showapi_res_id": "","showapi_res_body": {"datas": [{"series"…

全国天气预报查询接口

小编在此向大家介绍拥有105亿调用量的产品&#xff0c;该接口文档清晰&#xff0c;对接方便&#xff0c;还有服务很好。 一、接口介绍 通过坐标区域、IP、地名、景点名称、电话区号或邮编等有效信息可查询天气情况&#xff08;天气状况、湿度、天气图标、实时温度、风向、风级…

对接阿里云天气,获取天气预报数据

我最近在开发个人网站&#xff0c;为了丰富页面&#xff0c;就新增了一个天气预报的数据展示&#xff0c;写此博客记录一下。 获取天气数据调用的易源数据天气&#xff0c;需要经纬度的参数&#xff0c;因此这里调用了百度地图的api来获取经纬度。具体实现过程如下&#xff1a…

欧美明星,明星照片,韩国明星,街拍照片

一、接口介绍 海量照片&#xff0c;每日更新。根据用户搜索关键词&#xff0c;同时整合几十个网站同一种类照片&#xff0c;返回推送列表。 图片种类包括 性感、车模、男色图片、模特美女、美女魅惑、日韩美女、秀场、中国明星、欧美明星、中国女明星、中国男明星、韩国明星…