滬江 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
跨端框架,採用騰訊雲開發模式,採用基於騰訊雲的五官分析的人臉識別,實現了自動爲頭像戴上口罩的功能。源碼地址:快快戴口罩源碼主要功能
掃碼預覽微信搜一搜:快快戴口罩
小程序截圖