前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >腾讯云人脸识别云开发微信小程序

腾讯云人脸识别云开发微信小程序

原创
作者头像
张世强
修改于 2020-06-04 05:46:12
修改于 2020-06-04 05:46:12
54.1K00
代码可运行
举报
文章被收录于专栏:zhangzhang
运行总次数:0
代码可运行

一、实现方式

前端调用相机组件实现人脸在线采集,通过采集到的人脸图片的base64字符串调用云开发侧实现的腾讯云人脸识别云函数,然后将识别结果回调到小程序页面中。

二、实现流程

第一步:开通云开发控制台并创建云端项目环境

添加描述

添加描述

添加描述

第二步:在小程序项目根目录下创建本地云函数根目录functions,在项目根目录找到 project.config.json 文件,新增 cloudfunctionRoot 字段,值为刚才创建的本地云函数根目录名称

第三步:创建人脸识别云函数并配置tencentcloud-sdk-nodejs依赖

第四步:安装依赖

在face云函数目录上右键选择在"在终端中打开"

代码语言:shell
AI代码解释
复制
E:\tencentcloudcode\wechat\functions\face>npm install 
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142

> protobufjs@6.8.8 postinstall E:\tencentcloudcode\wechat\functions\face\node_modules\protobufjs
> node scripts/postinstall

npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN face@1.0.0 No description
npm WARN face@1.0.0 No repository field.

added 101 packages from 194 contributors and audited 186 packages in 13.832s
found 0 vulnerabilities

第五步:在人脸识别云函数目录下的入口文件index.js中实现人脸识别-人脸检测与分析的API调用Demo,然后上传Demo至云端

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 云函数入口文件
const cloud = require('wx-server-sdk')  // 引入云开发服务的内核SDK

cloud.init(   //初始化一个'wx-server-sdk' SDK 实例
{
  env: 'ai-test-t7t64'   // 开通云开发服务后创建的云环境的环境ID(默认可以创建两个ID)
}
)

// 云函数入口函数
exports.main = async (event, context) => {
   
const tencentcloud = require("tencentcloud-sdk-nodejs");  //引入腾讯云SDK

// 下面的代码可以通过explorer在线生成(https://console.cloud.tencent.com/api/explorer?Product=iai&Version=2018-03-01&Action=DetectFace&SignVersion=)
const IaiClient = tencentcloud.iai.v20180301.Client;  
const models = tencentcloud.iai.v20180301.Models;

const Credential = tencentcloud.common.Credential;
const ClientProfile = tencentcloud.common.ClientProfile;
const HttpProfile = tencentcloud.common.HttpProfile;

let cred = new Credential("", "");
let httpProfile = new HttpProfile();
httpProfile.endpoint = "iai.tencentcloudapi.com";
let clientProfile = new ClientProfile();
clientProfile.httpProfile = httpProfile;
let client = new IaiClient(cred, "ap-guangzhou", clientProfile);
let req = new models.DetectFaceRequest();
let base64Data=event.x   //接收客户端post的x参数,值类型为base64字符串
var params = {Image: base64Data, NeedFaceAttributes: 1}  // 定义SDK的请求参数字典
params = JSON.stringify(params)   // 转换为json字符串
req.from_json_string(params);
return new Promise((resolve, reject) => {   // 通过Promise容器来接收异步API的回调,然后通过当前脚本返回给客户端
  client.DetectFace(req, function(errMsg, response) {  // 此接口是异步的,那么当前脚本无法对外直接访问接口返回值
    if (errMsg) {
      resolve({ "Result": errMsg })
    }
    // resp = response.to_json_string()
    resolve({ "Result": response})
});
})
}

注:云函数的入口文件index.js中调用的"人脸检测与分析"API方法"DetectFace”是异步的,如果直接拷贝Explorer中生成的Demo,将无法为小程序客户端返回"DetectFace”的回调数据,脚本最终会返回null;所以这里我们需要使用Promise对象来获取"DetectFace"的回调数据,然后返回给小程序客户端

第六步:小程序中实现人脸图片在线采集页面

在小程序公共配置文件app.json中,添加页面生成参数

代码语言:json
AI代码解释
复制
"pages/camerac/camerac",

点击"编译"生成页面目录及页面

camerac.wxml

代码语言:html
AI代码解释
复制
<!--pages/camerac/camerac.wxml-->
<camera device-position="front" flash="off" binderror="error" style="width: 100%; height: 300px;"></camera>
<button type="primary" bindtap="takePhoto">拍照</button>
<view wx:if="{{ FaceInfos['0']['FaceAttributesInfo']['Gender'] > 50}}">性别:男</view>
<view wx:if="{{ FaceInfos['0']['FaceAttributesInfo']['Gender'] < 50}}">性别:女</view>
<view>年龄:{{ FaceInfos['0']['FaceAttributesInfo']['Age'] }}</view>
<view wx:if="{{ FaceInfos['0']['FaceAttributesInfo']['Expression'] == 0 }}">表情:正常</view>
<view wx:if="{{ FaceInfos['0']['FaceAttributesInfo']['Expression'] < 50 }}">表情:微笑</view>
<view wx:if="{{ FaceInfos['0']['FaceAttributesInfo']['Expression'] > 50 }}">表情: 大笑</view>
<view wx:if="{{ FaceInfos['0']['FaceAttributesInfo']['Beauty'] == 0 }}">魅力值:一般</view>
<view wx:if="{{ FaceInfos['0']['FaceAttributesInfo']['Beauty'] < 50 }}">魅力值:有点迷人</view>
<view wx:if="{{ FaceInfos['0']['FaceAttributesInfo']['Beauty'] > 50 }}">魅力值:偶像级</view>
<view>请求的图片宽度:{{ ImageWidth }}</view>
<view>请求的图片高度:{{ ImageHeight }}</view>
<view>人脸框左上角横坐标:{{ FaceInfos['0']['X'] }}</view>
<view>人脸框左上角纵坐标:{{ FaceInfos['0']['Y'] }}</view>
<view>人脸框宽度:{{ FaceInfos['0']['Width'] }}</view>
<view>人脸框高度:{{ FaceInfos['0']['Height'] }}</view>
<image mode="widthFix" src="{{src}}"></image>

使用的组件:

camera

button

image

使用的视图容器

view

使用的XML语法:

wx:if条件渲染

双大括号数据绑定

使用的视图层:

bindtap事件绑定

camerac.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// pages/camerac/camerac.js
Page({
  takePhoto() {  // 定义绑定的事件处理函数
    var that=this;  // 指定this到that,避免绑定的对象改变
    const ctx = wx.createCameraContext()    // 创建 camera 上下文 CameraContext 对象                                                                                                                         
    ctx.takePhoto({
      quality: 'high',
      success: (res) => {
        this.setData({
          src: res.tempImagePath
        }) 
        var base64=wx.getFileSystemManager().readFileSync(res.tempImagePath, 'base64')
        wx.cloud.init()
        wx.cloud.callFunction({
      // 云函数名称
      name: 'face',
      // 传给云函数的参数
      data: {
      x:base64  // 传图片的base64字符串
      },
      success: function(res) {
        that.setData({
          ImageWidth: res.result.Result.ImageWidth+"px",
          ImageHeight: res.result.Result.ImageHeight+"px",
          FaceInfos: res.result.Result.FaceInfos,
        })
      },
      fail: console.error
    })
      }
    })
    
  },
  
  error(e) {
    console.log(e.detail)
  }
})

使用到的知识点: Page 构造器

创建 camera 上下文 CameraContext 对象

HTTPS 网络请求

setData

注意:如果自定义函数中嵌套了wx等对象函数,数据传递应该先声明"var that=this",然后再嵌套函数,如wx.request中使用"that.setData"来传递数据

camerac.json

代码语言:json
AI代码解释
复制
{
  "navigationBarTitleText": "云开发人脸识别在线测试",
  "backgroundColor": "#eeeeee"
}

全局配置

camerac.wxss

代码语言:css
AI代码解释
复制
/* pages/camerac/camerac.wxss */
.photo {
  display: flex;
 margin-top: 10px;
 height: 100px;
}

.ph {
  border: 1px    dashed #909090;
  margin-right: 30px;
  width: 80px;
  height: 60px;
}
.phzz {
  border: 1px    dashed #909090;
  margin-right: 70px;
  margin-left: 70px;
  width: 100px;
  height: 60px;
}
.phright{

  border: 1px dashed #909090;
  margin-left: 20px;
   width: 80px;
  height: 60px;
}
.textp{
  margin-left: 70px;
  font-size: 14px;
}
.text{
   margin-left: 25px;
  font-size: 14px;
}
.text2{
   margin-left: 80px;
  font-size: 14px;
}
.text3{
   margin-left: 98px;
  font-size: 14px;
}

WXSS样式学习

测试效果

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
NestJS对接微信公众号(一)配置服务器验证
文章地址:https://cloud.tencent.com/developer/article/2468891
一起重学前端
2024/11/24
2810
微信公众号开发(一)服务器及接口的配置
关于微信公众号中的订阅号和服务的区别这里不多加讨论,网上有很多资源可以搜到,这里直接进入正题,如果是个人开发者,这里建议使用测试号进行开发学习,测试号的权限要比个人订阅号要多的多,而本篇博客也是基于测试号进行开发的。
全栈程序员站长
2022/09/06
8.9K1
微信公众号开发(一)服务器及接口的配置
Spring Boot微信公众号服务器配置案例
进行微信公众号开发,进行服务器配置是必不可少的,通过配置,公众号粉丝与公众号交互的消息将发送至开发者服务器,开发者对消息进行处理,例如:配置后,用户关注公众号或取关时,消息将发送至开发者配置的URL上,开发者即可根据事件类型进行处理,并且,开发者可获取用户openid、unionid,给粉丝发送模板消息等。
小诸葛
2020/04/14
2.5K0
Spring Boot微信公众号服务器配置案例
微信公众号服务器接口验证示例
今天用营业执照重新申请了一个微信公众号,然后在配置服务器的时候犯了难,因为打算使用EasyWeChat来开发,所以说得先配置服务器,这就让我犯了难,最后结合开发文档之后才研究出来了验证的套路,希望对你们有帮助。
用砖头敲代码
2022/08/30
2.3K0
微信公众号服务器验证Token的完整步骤
url填写:http://外网IP:端口号/wx 。外网IP请到腾讯云购买成功处查询, http的端口号固定使用80,不可填写其他。
PHP开发工程师
2021/04/21
9.9K0
微信公众号服务器验证Token的完整步骤
java版微信公众号开发(二):配置token
设置AppId以及APPSecret,并填写IP白名单(在线ip查询:http://www.ip138.com/)。
全栈程序员站长
2022/06/29
1K0
java版微信公众号开发(二):配置token
使用nodejs进行微信公众号网页开发(一)验证服务器「建议收藏」
微信公众号网页开发第一步是验证服务器这一步是必不可少的。我是用的是liunx系统搭配宝塔面板,基于node.js+nginx进行开发的。
全栈程序员站长
2022/09/07
1.3K0
使用nodejs进行微信公众号网页开发(一)验证服务器「建议收藏」
python 微信公众号开发[1] 后台服务器端配置与公众号开发配置
微信公众号开发的硬件必备条件:(1)申请一个公众号 (2)有公网ip的服务器(最好是阿里云,腾讯云等的云服务器)(3)解析到(2)中服务器地址的域名(阿里云,腾讯云购买即可)。
锦小年
2020/03/18
5.2K2
【微信公众号开发】使用内网穿透工具为本地服务器生成公网域名响应token验证
在微信公众号开发中,微信要求开发者需要拥有自己的服务器资源来响应微信发送的token验证,这个服务器只能通过域名访问,不能使用ip地址来进行访问,如果购买服务器,再购买域名,将是一笔比较大的开销,如果能将本地服务暴露出去,再使用域名去访问,不仅能简化配置,还能减少开销,达到快速开发的效果。
大海里的番茄
2024/05/15
3150
【微信公众号开发】使用内网穿透工具为本地服务器生成公网域名响应token验证
【黄啊码】php结合微信公众号实现裂变海报(基本技术点)
微信公众号裂变式营销代码实现,先讲下基础原理,先生成带有用户参数的二维码,然后用php自带的gd库处理,生成带有用户头像,昵称,参数二维码,营销信息的自定义图片,再将图片传入微信公众号临时素材,当其他用户扫描这个专属推荐码的时候,获取用户的昵称返回给推荐者,并存入数据库,以记录当前有多少人扫描了二维码。
黄啊码
2022/06/15
9680
[Go]GO语言实战-小程序或公众号接口gin框架验证微信服务器消息签名-开源WEB客服
在开发GO小程序或者公众号接口的时候,需要对接微信消息的token签名验证 , 这时候需要开发者验证来自微信 , 并返回指定的字符串
唯一Chat
2020/09/16
1.6K0
微信公众号对接ChatGPT程序
这是一个基于 Next.js 开发的微信公众号对接 ChatGPT 程序,可以通过微信公众号直接向 ChatGPT 提问并获取答案
西里国际站
2023/05/21
2.1K0
微信公众号对接ChatGPT程序
(已解决)SpringBoot微信公众号服务器配置时验证通过却提示配置失败
配置时提示配置失败,已经进入代码并且验证通过,也按照文档将返回值返回(以下是我通过测试号演示)
sgr997
2022/11/10
1.9K0
(已解决)SpringBoot微信公众号服务器配置时验证通过却提示配置失败
Java微信公众平台开发_02_启用服务器配置
                     见:【  Java微信公众平台开发_01_本地服务器映射外网  】
shirayner
2018/08/10
8.5K0
Java微信公众平台开发_02_启用服务器配置
巧用 Serverless,轻松搭建微信公众号的智能后台服务
一般来说,想给微信公众号增加更多的功能,需要有一台服务器,来进行公众号后台服务的搭建。那么在 Serverless 架构下,是否有更简便的方法来实现这么一个公众号后台呢?我们试试? 初步搭建 一、Serverless 原生开发 首先要有一个微信公众号! 接下来,我们要为我们的函数计算服务申请固定 IP: 点击白名单之后,我们可以填写表单,完成固定公网出口 IP 的申请。 接下来进行代码开发。 将函数绑定到公众号后台,并按照文档在函数中完成一个基本的鉴定功能: def checkSignature(
腾讯云serverless团队
2020/05/22
3.7K0
40张步骤截图教你用腾讯云服务器配置LNMP环境并安装wordpress
作者:liuxinig 来源: http://www.cnblogs.com/liuxinig/p/5928361.html 本文有点长,原因是每一步都有截图占的篇幅较长,其实并不麻烦,并不复杂。所有
小小科
2018/05/02
4.5K4
40张步骤截图教你用腾讯云服务器配置LNMP环境并安装wordpress
什么?你还没有自己的ChatGPT?搭建ChatGPT使用DDD领域思想对接公众号交互
《什么?你还没有自己的ChatGPT?》就在昨天 ChatGPT 爆出严重 BUG team 模式可以无限邀请 3.5 的用户来玩 4.0 的功能那么我也是第一时间上车啦,然后我发在了我的开源群里面并且喊一群大佬白嫖,结果他们说你的这个 ChatGPT 咋搭建的喊我发布一篇教程文章那么它来了!!!
杨不易呀
2024/01/19
1.4K20
什么?你还没有自己的ChatGPT?搭建ChatGPT使用DDD领域思想对接公众号交互
微信公众号开发系统入门教程(公众号注册、开发环境搭建、access_token管理、Demo实现、natapp外网穿透)
微信公众号分为服务号、订阅号、企业号,订阅号可以个人申请,服务号和企业号要有企业资质才可以。
全栈程序员站长
2022/09/06
3K0
微信公众号开发系统入门教程(公众号注册、开发环境搭建、access_token管理、Demo实现、natapp外网穿透)
面部表情还是面目表情(怎样调整面部表情)
5.dropout(0.5*0.5*0.5)+BN(without biases):
全栈程序员站长
2022/07/28
1.8K0
面部表情还是面目表情(怎样调整面部表情)
[日常] 面试知识点总结(持续更新)
数据结构和算法: 物理结构和逻辑结构 1.逻辑结构(集合结构,线性结构,树形结构,图形结构) 2.物理结构一般是讲内存,顺序存储结构,链式存储结构 浅谈算法中,高斯算法从1加到100,循环的话是100次,高斯的方法只需要一次 1.推导大O阶:O(1) O(n) O(n^2) O(logn) 1.常数1取代时间所有加法常数 2.只保留最高项 3.去除项相乘的常数,去掉系数
唯一Chat
2019/09/10
5K0
推荐阅读
NestJS对接微信公众号(一)配置服务器验证
2810
微信公众号开发(一)服务器及接口的配置
8.9K1
Spring Boot微信公众号服务器配置案例
2.5K0
微信公众号服务器接口验证示例
2.3K0
微信公众号服务器验证Token的完整步骤
9.9K0
java版微信公众号开发(二):配置token
1K0
使用nodejs进行微信公众号网页开发(一)验证服务器「建议收藏」
1.3K0
python 微信公众号开发[1] 后台服务器端配置与公众号开发配置
5.2K2
【微信公众号开发】使用内网穿透工具为本地服务器生成公网域名响应token验证
3150
【黄啊码】php结合微信公众号实现裂变海报(基本技术点)
9680
[Go]GO语言实战-小程序或公众号接口gin框架验证微信服务器消息签名-开源WEB客服
1.6K0
微信公众号对接ChatGPT程序
2.1K0
(已解决)SpringBoot微信公众号服务器配置时验证通过却提示配置失败
1.9K0
Java微信公众平台开发_02_启用服务器配置
8.5K0
巧用 Serverless,轻松搭建微信公众号的智能后台服务
3.7K0
40张步骤截图教你用腾讯云服务器配置LNMP环境并安装wordpress
4.5K4
什么?你还没有自己的ChatGPT?搭建ChatGPT使用DDD领域思想对接公众号交互
1.4K20
微信公众号开发系统入门教程(公众号注册、开发环境搭建、access_token管理、Demo实现、natapp外网穿透)
3K0
面部表情还是面目表情(怎样调整面部表情)
1.8K0
[日常] 面试知识点总结(持续更新)
5K0
相关推荐
NestJS对接微信公众号(一)配置服务器验证
更多 >
LV.4
三四五科技有限公司产品总监
目录
  • 一、实现方式
  • 二、实现流程
    • 第一步:开通云开发控制台并创建云端项目环境
    • 第二步:在小程序项目根目录下创建本地云函数根目录functions,在项目根目录找到 project.config.json 文件,新增 cloudfunctionRoot 字段,值为刚才创建的本地云函数根目录名称
    • 第三步:创建人脸识别云函数并配置tencentcloud-sdk-nodejs依赖
    • 第四步:安装依赖
    • 第五步:在人脸识别云函数目录下的入口文件index.js中实现人脸识别-人脸检测与分析的API调用Demo,然后上传Demo至云端
    • 第六步:小程序中实现人脸图片在线采集页面
      • camerac.wxml
      • camerac.js
      • camerac.json
      • camerac.wxss
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档