现在关于人脸识别的SDK其实有很多,诸如face++、百度大脑之类的,他们都能为开发者免费提供人脸识别的接口。阿里也和face++合作,实现了支付宝的刷脸支付。

但是很遗憾,网上关于识别一段视频中的用户行为(诸如摇摇头,眨眨眼,微笑)的资料很少,可能是技术没有公开,所以只能自己去想解决方法了。本人最近在做一个关于微信小程序的毕业设计,所以想到了把这两个技术结合下,这里写篇博客,为大家解解惑吧,纯是自己的一些想法,如果大家有疑惑或者更好的建议,可以发邮件联系我(andyliwr@outlook.com)。


大致的解决方案如下: 

图可能不是很清晰,请看这里

  1. 用户在微信小程序中拍摄一段视频
  2. 将用户拍摄的视频传到七牛云服务器
  3. 借助七牛云服务器的媒体处理api对视频每隔一定时间截图,形成一张张视频切图
  4. 使用百度大脑的人脸识别api分析每张图中用户的行为,最后得出结论

现在开始coding:

A. 先初始化一个微信小程序的项目,然后新建一个video页面,这个页面的js中需要首先引入七牛云上传文件的js—qiniuUpload.js,然后绑定拍摄视频的按钮的事件—chooseVideo,代码大致如下:

chooseVideo: function () {initQiniu();var that = this;wx.chooseVideo({sourceType: ['camera', 'album'],camera: 'front',maxDuration: 40,success: function (res) {console.log('拍照之后:');console.log(res);that.setData({src: res.tempFilePath});//七牛上传文件var vedioObject = res;var filePath = res.tempFilePath;},error: function(err){console.log(err)}}  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

这样就把用户在拍摄之后的视频信息(时长,高度,宽度,临时存储地址拿到了),接下来就是上传到七牛云服务器了。

B. 将视频上传到七牛云服务器 
上传文件到七牛过程呢,有一点小复杂,建议大家先去看下七牛的官方技术文档,这里后台我是用的是php,但是实际上七牛的SDK几乎支持所有的主流语言,所以对php不熟悉的同学也不用太担心。 
大致的流程就是先搭建一个获取上传token的接口,在上传文件的时候你需要首先请求这个接口,获得的token是作为上传函数的必要参数,这是使用七牛PHP SDK的代码:

<?phprequire '../qiniu-sdk/autoload.php';use Qiniu\Auth;// 用于签名的公钥和私钥$accessKey = 't5tBss9FrousfymdmFw4ki2fscwZ8qGaIw8SZmX8';$secretKey = 'uASYB6XxzJy9tLWeGsLaNaQyX4bVafIVh6Dpgvxo';// 初始化签权对象$auth = new Auth($accessKey, $secretKey);// 空间名  https://developer.qiniu.io/kodo/manual/concepts$bucket = 'andyliwr-server';// 生成上传Token$upToken = $auth->uploadToken($bucket);$returnData = array('uptoken'=>$upToken);echo json_encode($returnData);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

然后就是在微信小程序中调用七牛的上传api,这里感谢未知名大神的源码贡献,建议好好看看README,里面的qiniuUpload.js已经帮我们封装好了,直接设置定义参数,然后调用initQiniu(),就可以使用qiniuUploader.upload的上传函数,需要设定的参数如下:

var options = {region: 'SCN', // 华东区,生产环境应换成自己七牛帐户bucket的区域uptokenURL: 'https://xxxxx/uploadImg.php', // 生产环境该地址应换成自己七牛帐户的token地址,具体配置请见server端domain: 'https://xxxxx/' // 生产环境该地址应换成自己七牛帐户对象存储的域名};
  • 1
  • 2
  • 3
  • 4
  • 5

大致过程如下 
- 从 github 上下载qiniuUploader.js,导入小程序工程。

  • 在使用 SDK 之前,您必须先注册一个七牛云帐号,并登录控制台获取一对有效的 AccessKey 和 SecretKey,您可以阅读 如何接入七牛 和 安全机制 以进一步了解如何正确使用和管理密钥 。

  • SDK 依赖服务端颁发 uptoken,可以通过以下二种方式实现:

    • 利用七牛服务端 SDK 构建后端服务(建议的方式)
    • 利用七牛底层 API 构建服务,详见七牛上传策略和上传凭证
  • 您需要了解您的七牛存储空间设置在那个区域,比如华东,华南等,参见区域设置

后端服务应提供一个 URL 地址,供小程序请求该地址后获得 uptoken。请求成功后,服务端应返回如下格式的 json(至少包含 uptoken 字段):

{"uptoken": "0MLvWPnyya1WtPnXFy9KLyGHyFPNdZceomL..."
}
  • 1
  • 2
  • 3

根据你创建的七牛存储空间,把对应的 https 上传地址添加到小程序的访问白名单中,方法如下:

  1. 登录 微信公众平台,前往 设置 - 开发设置,点击 服务器配置 下的「修改」链接。
  2. 修改 uploadFile 域名(比如华北 https 上传地址为:https://up-z1.qbox.me,地址不清楚请参见https地址附录)
  3. 如果需要下载文件,则还需要一同设置 downloadFile 域名,为你的 bucket 下载地址
  4. 保存即可
字段名 内容
request 域名 https://yourServce.com
uploadFile 域名 https://up.qbox.me (根据存储区域填写)
downloadFile 域名 https://baldkf.bkt.clouddn.com

存储区域对应 HTTPS 地址,参考官方文档

存储区域 区域代码 HTTPS 地址
华东 ECN https://up.qbox.me
华北 NCN https://up-z1.qbox.me
华南 SCN https://up-z2.qbox.me
北美 NA https://up-na0.qbox.me

配置好参数之后,你就应该可以体验下看看能否成功上传视频了了,ps:我这里讲得比价笼统,不会的直接下再小程序的源码,开始整。

C. 视频上传成功之后,接下就是分解视频了,这里有必要说下七牛云的媒体处理api,就那存在我空间里的一段视频来说,我想拿到它在第一秒时的切图,只需要在视频地址后面带上参数?vframe/jpg/offset/1,比如上述视频的第一秒切图就是https://olpkwt43d.qnssl.com/girl.mp4?vframe/jpg/offset/1,第二秒就是https://olpkwt43d.qnssl.com/girl.mp4?vframe/jpg/offset/2

所以想要获取到所有切图只需要结合视频时长写一个循环就好了,另外两个参数w是视频的宽度,h是视频的高度,这些需要微信小程序发送给后台:

var allPicture = [];
for(var i=0; i<vedioObject.duration; i++){allPicture.push(res.imageURL+'?vframe/jpg/offset/'+i+'/w/'+vedioObject.width+'/h/'+vedioObject.height+'/rotate/0');
}
  • 1
  • 2
  • 3
  • 4
 wx.request({url: https://xxxxx/analysis/request/AipFace.php + '?video_url=' + res.imageURL + '&duration=' + vedioObject.duration + '&width=' + vedioObject.width + '&height=' +vedioObject.height, //仅为示例,并非真实的接口地址header: { 'content-type': 'application/json' },success: function (res) { ..........
  • 1
  • 2
  • 3
  • 4

D: 使用百度API做人脸分析 
同样的百度API虽然对个人用户免费但是需要注册一个appid,这里建议去看下百度的文档,我这里就不多说了,不会的直接下载代码

最后对接后返回的结果做个检测,isSimle为true则表示用户微笑了:

var isSimle = res.data.result.some(function(item){if(item.result instanceof Array){return item.result.some(function(item2){return item2.expression == '1';})}else{return item.result.expression == '1';}
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

最后,觉得有啥不懂的,你可以联系我,踩坑是肯定的,做程序员咱们就得有这觉悟,不懂的你可以联系我(andyliwr@outlook.com),也可以关注我的github(https://github.com/Andyliwr).

基于微信小程序的人脸识别相关推荐

  1. 如何实现基于微信小程序的人脸识别

    现在关于人脸识别的SDK其实有很多,诸如face++.百度大脑之类的,他们都能为开发者免费提供人脸识别的接口.阿里也和face++合作,实现了支付宝的刷脸支付. 但是很遗憾,网上关于识别一段视频中的用 ...

  2. php微信里面换行符,如何在字符串中间加换行符js微信小程序实现人脸识别

    本文为大家分享了微信小程序人脸识别的具体代码,供大家参考,具体内容如下 首先,我们要有开发者工具,今天所说的是后端和前端联合起来实现的. 在PHP的控制器中写一个upload方法,代码如下: publ ...

  3. 微信小程序实现人脸识别注册登录

    前言 这是一篇关于一个原创微信小程序开发过程的原创文章.涉及到的核心技术是微信小程序开发方法和百度云人脸识别接口.小程序的主体是一个用于个人密码存储的密码管理器,在登陆注册阶段,需要调用百度云人脸识别 ...

  4. 微信小程序【人脸识别功能】

    前几天偶然看见一个人脸识别的小程序demo,觉得很有趣下载下来想玩玩,结果只是一个框架而已用不了的,花了点时间完善一下 吐槽一下wx.uploadFile这个接口,真是个大坑,最开始调用时候,我以为它 ...

  5. 微信小程序:人脸识别

    1.什么是人脸识别? 人脸识别可以分为两个方面,一个是人脸验证,另一个是人脸识别. 人脸验证指的是:假设我们有一个人的画像(A),我们需要根据这个画像验证来人是不是A本人. 人脸识别指的是:如果我们有 ...

  6. 毕业设计-基于微信小程序的人脸访客管理系统

    目录 前言 课题背景与简介 实现设计思路 一.人脸访客管理小程序的设计 二.技术设计 三.高可用设计 四.安全性设计 五.易用性设计 人脸访客管理小程序的实现 结语 实现效果样例 更多帮助 前言

  7. 微信小程序之人脸识别(2)

    上一篇博客已经将人脸的照片上传到了人脸库,接下来需要做的就是登录时拍照保存并与人脸库的图片进行对比,当score大于95即识别成功! 下面是wxml代码,主要用的就是camera组件,点击按钮拍照并保 ...

  8. 基于微信小程序的ARPainting项目简述

    两年前的项目了,今天翻出来看一下.主要还是从需求分析和设计实现两大块进行介绍. 文章目录 (一)需求分析 1.项目背景描述 2.需求描述 (二)概要设计 1.项目结构图 2.模块解释 3.系统流程图设 ...

  9. 基于微信小程序的相关管理系统设计与实现开题报告的思路及方法

    今天主要谈一下计算机科学相关专业同学的选题的思路及方法. 毕业设计选题选没选好就像各位走出校园踏进社会的一道坎,跨过这道坎是很关键的,而有些同学却犯了难,把本应该简单的问题复杂化了.为什么这样讲呢?之 ...

  10. 基于微信小程序的智能停车场管理系统的研究与设计

    前言 2017年一组数据显示, 我国停车位缺口率已经达到50%, 停车场的平均空置率也高达51. 3%. 区域拥堵. 乱停车.找车难. 收费难. 停车管理成本搞. 停车场管理效率底下.市政停车规划采集 ...

最新文章

  1. Spring事务专题(三)事务的基本概念,Mysql事务处理原理
  2. 【转】RabbitMQ六种队列模式-1.简单队列模式
  3. 使用Fiddler对iPhone手机进行数据抓包分析
  4. mysql 设置数据库只读_如何设置mysql数据库为只读
  5. Linux基础_Hadoop环境搭建必备
  6. 怎么卡我的世界服务器物品,我的世界手机版卡BUG刷物品方法攻略
  7. 关于PyQt5,在pycharm上的安装步骤及使用技巧
  8. 如何注册申请 Google AdSense
  9. iphone之使用讯飞语音sdk实现语音识别功能
  10. perl软件使用报错总结
  11. 爱快软路由拨号移动网络设置
  12. URLDecoder.decode 过时
  13. Italvibras M3/4-S02振动电机M3/20-S02 3/100-S02 3/200-S02 MVSI 3/300-S02振动电机
  14. 介绍一个牛逼的Github项目
  15. 期末前端web大作业——动漫客栈响应式bootstarp(7页) 排版整洁,内容丰富,主题鲜明
  16. python爬考研_Python爬取考研必备单词
  17. LightGBM整理
  18. 用html做简单课程表
  19. c# 收取邮件 解析_C# 接收邮件
  20. d-link路由器虚拟服务器,两台D-Link路由器之间如何桥接上网

热门文章

  1. 强烈推荐APP破解常用工具集合!
  2. gms认证流程_Android P(9.0)GMS认证新要求
  3. 服务器机房动环监控系统,IDC动环监控系统
  4. 项目十大管理(三)进度管理
  5. 分享几款好用到爆的 Chrome 插件!!你们不用,我寝食难安……
  6. 【超图+CESIUM】【基础API使用示例】47、超图|CESIUM - 平行光源设置
  7. jszip 解压压缩包_一文彻底弄懂jszip中的压缩与解压
  8. Blazor使用PDFObject预览pdf文件
  9. Android 仿美团GridView分页滑动(类似直播礼物列表效果)
  10. c语言司机牌照前两位数一样,c语言