E企盈营销工具技术服务商 热线:4006-838-530

基于微信小程序的人脸识别

E企盈直播平台营销卖货系统

现在关于人脸识别的SDK其实有很多,诸如face++、百度大脑之类的,他们都能为开发者免费提供人脸识别的接口。阿里也和face++合作,实现了支付宝的刷脸支付。但是很遗憾,网上关于识别一段视频中的用户行为(诸如摇摇头,眨眨眼,微笑)的资料很少,可能是技术没有公开,所以只能自己去想解决方法了。本人最近在做一个关于微信小程序的毕业设计,所以想到了把这两个技术结合下,这里写篇博客,为大家解解惑吧,纯是自己的一些想法,如果大家有疑惑或者更好的建议,可以发邮件联系我(andyliwr@outlook.com)。大致的解决方案如下: 图可能不是很清晰,请看这里:用户在微信小程序中拍摄一段视频将用户拍摄的视频传到七牛云服务器借助七牛云服务器的媒体处理api对视频每隔一定时间截图,形成一张张视频切图使用百度大脑的人脸识别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)     }   }  1234567891011121314151617181920这样就把用户在拍摄之后的视频信息(时长,高度,宽度,临时存储地址拿到了),接下来就是上传到七牛云服务器了。B. 将视频上传到七牛云服务器 上传文件到七牛过程呢,有一点小复杂,建议大家先去看下七牛的官方技术文档,这里后台我是用的是php,但是实际上七牛的SDK几乎支持所有的主流语言,所以对php不熟悉的同学也不用太担心。 大致的流程就是先搭建一个获取上传token的接口,在上传文件的时候你需要首先请求这个接口,获得的token是作为上传函数的必要参数,这是使用七牛PHP SDK的代码:?php  require ‘../qiniu-sdk/autoload.php’;  use QiniuAuth;  // 用于签名的公钥和私钥  $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);123456789101112131415然后就是在微信小程序中调用七牛的上传api,这里感谢未知名大神的源码贡献,建议好好看看README,里面的qiniuUpload.js已经帮我们封装好了,直接设置定义参数,然后调用initQiniu(),就可以使用qiniuUploader.upload的上传函数,需要设定的参数如下:var options = {    region: ‘SCN’, // 华东区,生产环境应换成自己七牛帐户bucket的区域    uptokenURL: ‘https://xxxxx/uploadImg.php’, // 生产环境该地址应换成自己七牛帐户的token地址,具体配置请见server端    domain: ‘https://xxxxx/’ // 生产环境该地址应换成自己七牛帐户对象存储的域名  };12345大致过程如下 – 从 github 上下载qiniuUploader.js,导入小程序工程。在使用 SDK 之前,您必须先注册一个七牛云帐号,并登录控制台获取一对有效的 AccessKey 和 SecretKey,您可以阅读 如何接入七牛 和 安全机制 以进一步了解如何正确使用和管理密钥 。SDK 依赖服务端颁发 uptoken,可以通过以下二种方式实现:利用七牛服务端 SDK 构建后端服务(建议的方式)利用七牛底层 API 构建服务,详见七牛上传策略和上传凭证您需要了解您的七牛存储空间设置在那个区域,比如华东,华南等,参见区域设置后端服务应提供一个 URL 地址,供小程序请求该地址后获得 uptoken。请求成功后,服务端应返回如下格式的 json(至少包含 uptoken 字段):{    “uptoken”: “0MLvWPnyya1WtPnXFy9KLyGHyFPNdZceomL…”}123根据你创建的七牛存储空间,把对应的 https 上传地址添加到小程序的访问白名单中,方法如下:登录 微信公众平台,前往 设置 – 开发设置,点击 服务器配置 下的「修改」链接。修改 uploadFile 域名(比如华北 https 上传地址为:https://up-z1.qbox.me,地址不清楚请参见https地址附录)如果需要下载文件,则还需要一同设置 downloadFile 域名,为你的 bucket 下载地址保存即可字段名内容request 域名https://yourServce.comuploadFile 域名https://up.qbox.me (根据存储区域填写)downloadFile 域名https://baldkf.bkt.clouddn.com存储区域对应 HTTPS 地址,参考官方文档存储区域区域代码HTTPS 地址华东ECNhttps://up.qbox.me华北NCNhttps://up-z1.qbox.me华南SCNhttps://up-z2.qbox.me北美NAhttps://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; ivedioObject.duration; i++){  allPicture.push(res.imageURL+’?vframe/jpg/offset/’+i+’/w/’+vedioObject.width+’/h/’+vedioObject.height+’/rotate/0′);}1234 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) { ……….1234D: 使用百度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’; }});123456789最后,觉得有啥不懂的,你可以联系我,踩坑是肯定的,做程序员咱们就得有这觉悟,不懂的你可以联系我(andyliwr@outlook.com),也可以关注我的github(https://github.com/Andyliwr).

赞(0) 打赏
未经允许不得转载:E企盈小程序开发-热线:4006-838-530 » 基于微信小程序的人脸识别
分享到: 更多 (0)
E企盈小程序直播营销卖货系统
E企盈直播平台营销卖货系统

评论 抢沙发

E企盈小程序开发

联系我们联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏