沪江 CCtalk 前端开发工程师,Taro 框架的 issue 维护志愿者,主要侧重于前端 UI 编写和团队文档建设。本文讲解的是个人快快戴口罩小程序中核心逻辑,如何给人脸戴上口罩,也就是使用腾讯云的人脸识别中的五官分析来实现的。html
基本步骤前端
问题 1:第一个要处理的问题,是从小程序侧直接上传仍是传给我的服务器或云端后再转发呢?小程序侧直接上传node
传给我的服务器或云端后再转发nginx
问题 2:在我的服务器和小程序云开发上,我是如何选择的?最近比较火的概念就是 Serverless,简单来讲就是,不借助运维手段就能够直接调用服务器上的数据库、文件以及其余资源。而我在此次小程序开发中的我的服务器当中作了以下设置git
先说花销上,域名每一年须要几十元、服务器也须要几十元或几百元不等,网站备案也须要各类限制,好比在上海的话就须要户口或居住证,在江苏的话就须要江苏的手机号码。再说运维上,我不只要设置上述的基础功能,还要考虑设置出测试环境、正式环境,还要考虑服务的稳定性。这就是我为什么选择小程序云·开发的缘由了。由于免费、高效、稳定。云开发提供了几大基础能力支持:github
在小程序侧免费开通云开发,配额以下:数据库
对于新手或实验性项目来讲,这个配合足够用。若是想升级,小程序还提供了很是完整的升级方案。具体能够在下面这个连接上进行查看。https://developers.weixin.qq....?那么最为吸引我使用小程序云开发的理由是啥呢?以 nodejs 为载体的云开发环境能够高度自定义。express
wx-server-sdk
来调用小程序开放接口tcb-admin-node
让你能够在服务端(如腾讯云云函数或 CVM 等)使用 Node.js 服务访问 TCB 的的服务。tencentcloud-sdk-nodejs
,调用腾讯云的诸多服务,如人脸识别、五官分析等等tencentcloud-sdk-nodejs
的 npm 版还没有支持,我就下载代码下载,本身改好再用。初版:我的服务器版本,图片大约为 1.2~2M第四版:云开发版本,以云存储 fileID 为载体npm
使用 canvas 的canvasToTempFilePath
进行图片压缩,格式为 jpg,质量为 0.8,在安卓手机上图片会从 1.2-2MB 降为 150KB 如下,该图也是本地显示的原图。使用小程序的compressImage
(质量 0.1)来压缩图片,在 iPhone 上效果良好,在安卓系统上效果不大,但这里咱们也可使用。即便质量很低,足够图片审核、五官分析所用的。使用临时上传图片为载体、以 fileID 为云函数调用的标志时,云函数调用的体积较小,云存储的上传下载都很是稳定。图片安全 和五官分析能够同时请求,但使用 Promise.allSettled()
同时来请求。这里解决了三个问题:json
TC3-HMAC-SHA256
。那么效果如何呢?总使用时间大约为 5 秒,其中请求时间约为 3 秒。
备注:
用时为云开发的本地开发模式测得,云端调用速度更快 总使用时间:从图片压缩开始,通过调用云函数,云函数识别出五官信息,返回后小程序处理五官信息,渲染口罩效果的用时。
请求时间:从小程序调用云函,云函数识别出五官信息、返回到小程序侧的用时。
第四版:云开发版本,以云存储 fileID 为中间载体第五版:云开发版本,以 base64 数据直接请求
不使用云存储做为传递载体,而是使用图片压缩后的不大于 150KB 大小的 base64 数据直接请求,减小了小程序侧图片上传、云开发环境中的图片下载两个异步操做的步骤。小程序侧也有 ArrayBuffer
数据,但在本地开发过程当中发现,只要其大小超过 50KB(猜的),云函数调用就会直接报错。
PS:我这个小程序的图片识别只是暂时的请求数据,并未须要将图片上传到云存储,让用户下次还能看到这个图片。
小程序五个版本的细节
初版:我的服务器版本
第二版,云开发,直接上传 base64
第三版,云开发基础上,改用云存储转发
第四版:大幅度压缩图片,云存储 fileID 为中间载体
第五版本
珍爱生命,从我作起,快点戴上口罩,给你们介绍我开源的 Taro + 腾讯云开发 小程序「快快戴口罩」它能够智能识别人脸,给集体照戴上口罩。(* ̄︶ ̄)
采用 Taro
跨端框架,采用腾讯云开发模式,采用基于腾讯云的五官分析的人脸识别,实现了自动为头像戴上口罩的功能。源码地址:快快戴口罩源码主要功能
扫码预览微信搜一搜:快快戴口罩
小程序截图