滬江 CCtalk 前端開發(fā)工程師,Taro 框架的 issue 維護(hù)志愿者,主要側(cè)重于前端 UI 編寫和團(tuán)隊(duì)文檔建設(shè)。本文講解的是我的快快戴口罩小程序中核心邏輯,如何給人臉戴上口罩,也就是使用騰訊云的人臉識(shí)別中的五官分析來實(shí)現(xiàn)的。
基本步驟
**問題 1:第一個(gè)要處理的問題,是從小程序側(cè)直接上傳還是傳給個(gè)人服務(wù)器或云端后再轉(zhuǎn)發(fā)呢?**小程序側(cè)直接上傳
傳給個(gè)人服務(wù)器或云端后再轉(zhuǎn)發(fā)
**問題 2:在個(gè)人服務(wù)器和小程序云開發(fā)上,我是如何選擇的?**最近比較火的概念就是 Serverless,簡單來說就是,不借助運(yùn)維手段就可以直接調(diào)用服務(wù)器上的數(shù)據(jù)庫、文件以及其他資源。而我在這次小程序開發(fā)中的個(gè)人服務(wù)器當(dāng)中做了如下設(shè)置
先說花銷上,域名每年需要幾十元、服務(wù)器也需要幾十元或幾百元不等,網(wǎng)站備案也需要各種限制,比如在上海的話就需要戶口或居住證,在江蘇的話就需要江蘇的手機(jī)號(hào)碼。再說運(yùn)維上,我不僅要設(shè)置上述的基礎(chǔ)功能,還要考慮設(shè)置出測(cè)試環(huán)境、正式環(huán)境,還要考慮服務(wù)的穩(wěn)定性。這就是我為何選擇小程序云·開發(fā)的原因了。因?yàn)?strong>免費(fèi)、高效、穩(wěn)定。云開發(fā)提供了幾大基礎(chǔ)能力支持:
在小程序側(cè)免費(fèi)開通云開發(fā),配額如下:
對(duì)于新手或?qū)嶒?yàn)性項(xiàng)目來說,這個(gè)配合足夠用。如果想升級(jí),小程序還提供了非常完整的升級(jí)方案。具體可以在下面這個(gè)鏈接上進(jìn)行查看。developers.weixin.qq.com/miniprogram… nodejs 為載體的云開發(fā)環(huán)境可以高度自定義。
wx-server-sdk
來調(diào)用小程序開放接口tcb-admin-node
讓你可以在服務(wù)端(如騰訊云云函數(shù)或 CVM 等)使用 Node.js 服務(wù)訪問 TCB 的的服務(wù)。tencentcloud-sdk-nodejs
,調(diào)用騰訊云的諸多服務(wù),如人臉識(shí)別、五官分析等等tencentcloud-sdk-nodejs
的 npm 版尚未支持,我就下載代碼下載,自己改好再用。第一版:個(gè)人服務(wù)器版本,圖片大約為 1.2~2M第四版:云開發(fā)版本,以云存儲(chǔ) fileID 為載體
使用 canvas 的canvasToTempFilePath
進(jìn)行圖片壓縮,格式為 jpg,質(zhì)量為 0.8,在安卓手機(jī)上圖片會(huì)從 1.2-2MB 降為 150KB 以下,該圖也是本地顯示的原圖。使用小程序的compressImage
(質(zhì)量 0.1)來壓縮圖片,在 iPhone 上效果良好,在安卓系統(tǒng)上效果不大,但這里我們也可以使用。即使質(zhì)量很低,足夠圖片審核、五官分析所用的。使用臨時(shí)上傳圖片為載體、以 fileID 為云函數(shù)調(diào)用的標(biāo)志時(shí),云函數(shù)調(diào)用的體積較小,云存儲(chǔ)的上傳下載都非常穩(wěn)定。圖片安全 和五官分析可以同時(shí)請(qǐng)求,但使用 Promise.allSettled()
同時(shí)來請(qǐng)求。這里解決了三個(gè)問題:
TC3-HMAC-SHA256
。那么效果如何呢?總使用時(shí)間大約為 5 秒,其中請(qǐng)求時(shí)間約為 3 秒。
備注:
用時(shí)為云開發(fā)的本地開發(fā)模式測(cè)得,云端調(diào)用速度更快 總使用時(shí)間:從圖片壓縮開始,經(jīng)過調(diào)用云函數(shù),云函數(shù)識(shí)別出五官信息,返回后小程序處理五官信息,渲染口罩效果的用時(shí)。
請(qǐng)求時(shí)間:從小程序調(diào)用云函,云函數(shù)識(shí)別出五官信息、返回到小程序側(cè)的用時(shí)。
第四版:云開發(fā)版本,以云存儲(chǔ) fileID 為中間載體第五版:云開發(fā)版本,以 base64 數(shù)據(jù)直接請(qǐng)求
不使用云存儲(chǔ)作為傳遞載體,而是使用圖片壓縮后的不大于 150KB 大小的 base64 數(shù)據(jù)直接請(qǐng)求,減少了小程序側(cè)圖片上傳、云開發(fā)環(huán)境中的圖片下載兩個(gè)異步操作的步驟。小程序側(cè)也有 ArrayBuffer
數(shù)據(jù),但在本地開發(fā)過程中發(fā)現(xiàn),只要其大小超過 50KB(猜的),云函數(shù)調(diào)用就會(huì)直接報(bào)錯(cuò)。
PS:我這個(gè)小程序的圖片識(shí)別只是暫時(shí)的請(qǐng)求數(shù)據(jù),并未需要將圖片上傳到云存儲(chǔ),讓用戶下次還能看到這個(gè)圖片。
小程序五個(gè)版本的細(xì)節(jié)
第一版:個(gè)人服務(wù)器版本
第二版,云開發(fā),直接上傳 base64
第三版,云開發(fā)基礎(chǔ)上,改用云存儲(chǔ)轉(zhuǎn)發(fā)
第四版:大幅度壓縮圖片,云存儲(chǔ) fileID 為中間載體
第五版本
珍愛生命,從我做起,快點(diǎn)戴上口罩,給大家介紹我開源的 Taro + 騰訊云開發(fā) 小程序「快快戴口罩」它可以智能識(shí)別人臉,給集體照戴上口罩。(* ̄︶ ̄)
采用 Taro
跨端框架,采用騰訊云開發(fā)模式,采用基于騰訊云的五官分析的人臉識(shí)別,實(shí)現(xiàn)了自動(dòng)為頭像戴上口罩的功能。源碼地址:快快戴口罩源碼主要功能
掃碼預(yù)覽微信搜一搜:快快戴口罩
小程序截圖
云開發(fā)(CloudBase)是一款云端一體化的產(chǎn)品方案 ,采用 serverless 架構(gòu),免環(huán)境搭建等運(yùn)維事務(wù) ,支持一云多端,助力快速構(gòu)建小程序、Web應(yīng)用、移動(dòng)應(yīng)用。
聯(lián)系客服