騰訊雲技術專家盧萌凱手把手教你Demo一個人臉識別程序!

歡迎大家前往騰訊雲+社區,獲取更多騰訊海量技術實踐乾貨哦~

本文來自騰訊雲技術沙龍,本次沙龍主題爲Serverless架構開發與SCF部署實踐

盧萌凱:畢業於東南大學,曾就職於華爲,熟悉雲行業解決方案。目前負責騰訊雲中間件產品及無服務器雲函數的技術架構打造,幫助用戶完成方案設計,對雲端存儲產品的使用難點有獨到見解。

大家好。我是騰訊雲中間件及無服務器雲函數架構師。我今天介紹分四部分:第一,對象存儲COS簡介。第二,比較實用的一部分,SCF與COS結合使用的應用場景。第三,比較有意思,人臉識別Demo。調用AI的接口,用幾行代碼就把人臉識別的Demo就實現了。最後一部分是最佳實踐。其實主要是來看一下在COS使用過程當中有哪些需要注意的地方。

img

我們先來介紹第一部分,就是騰訊雲存儲平臺發展歷程。首先我們可以看到在2006年的時候騰訊雲發佈了第一代分佈式存儲平臺,叫TFS。經過近十年發展到2014年存儲量達到500P,也是在這一年隨着騰訊雲推出,騰訊雲存儲系統開始對外服務。到現在騰訊雲超過EB級存儲,現在對內服務騰訊相冊,QQ以及外部的58同城和大衆點評等。

img

對象存儲是什麼?這頁簡單介紹一下對象存儲概念,如果用雲上的話,就是用雲的概念,騰訊雲對象存儲提供的是面向非結構化數據,支持HTTP和HTTPS協議訪問的分佈式存儲服務,它能容納海量數據並保證用戶對帶寬和容量擴充無感知,這裏可以理解爲基於Serverless架構。同時對象存儲也會對雲上其他的產品做一些深入的結合,比如和CDN結合,用戶傳到CDN音視頻可以選擇CDN進行加速,也可以跟雲上音視頻轉碼服務相結合,上傳到COS音視頻可以做轉碼服務。支持萬象優圖服務,可以對圖片加水印等方面處理。

這裏列了一個COS對象存儲簡易流程,用戶可以通過手機APP、網站或者H5頁面可以方便簡單的訪問。COS會和雲上其他的應用結合,同時用戶也可以選擇和COS本地服務相結合。

img

這裏給了一個COS應用架構,上面是一個傳輸服務,可以選擇CDN加速。比如用戶需要上傳到COS延時高的情況下可以選擇CDN加速;同時可以選擇騰訊雲提供的專線服務,可以保證延時。同時可以使用運營商服務。

應用接入層可以選擇應用服務,像圖片智能識別和處理,音視頻處理等。同時COS可以和雲上一些大數據套件對接。一個簡單的場景,用戶可以用雲上的Kafka直接寫入COS,COS和大數據對接來做用戶行爲的分析。

下面是數據接口,這邊是COS底層的一些接入方法。最底層是分佈式數據存儲,我們可以通過API或者通過HTTP REST來訪問接口。

img

這裏給了一個簡單的應用流程,最左邊可以看到用WEB服務,或者APP終端,通過運營商網絡接入到對象存儲,做一些簡單的上傳和下載動作;同時,騰訊雲上的COS可以做CDN分發,或者做格式轉換,或者對接到雲上的雲主機或者私有的客戶自己的雲服務,做一整條流程的打通。

img

把剛纔的應用案例再細化一下的話,這邊給出了一個用戶在實際使用過程當中的架構圖。首先,最左邊的用戶可以通過調API接口,或者自己調雲上封裝好的sdk,在自己代碼裏去讀寫COS。或者通過控制檯很方便的上傳和下載一些文件。這邊是騰訊雲上COS雲存儲,這裏一共給了三種應用:一個是標準存儲,一個是低頻存儲,還有近線存儲。低頻存儲是用於讀寫數據頻率比較低的場景,比如說是網盤的運用。近線存儲主要用於歸檔數據,它可能是一些冷數據,不經常用,可以用近線存儲,它也可以提供高可靠的數據保存。同時,它的成本也是非常低的。

同時對象存儲可以對接雲上其他的服務,並針對不同的用戶可以設置不同的訪問權限。我這裏放了一個視頻對應用場景做一個總結和發散。

img

img

我這裏寫了一個簡單的Demo,主要做人臉識別,首先我會創建兩個存儲桶,這兩個存儲桶用來上傳用戶的信息,觸發SCF調用,其中一個做用戶特徵的提取。第二個存儲筒上傳第二張用戶的圖像,和第一個比對,查看是否可以查到這個用戶信息。SCF裏直接調AI的接口,大概有四、五行代碼就能實現創建用戶的信息,再加一行代碼就能比對用戶信息。這裏用SCF日誌展示輸出。這個流程圖是這樣的,首先我在COS Bucket1裏上傳一張圖片,看他是否是一個新用戶,不是的話就創建一個特徵,如果是,就把這個人像添加到已創建的用戶特徵。另外一個Bucket叫這個名字,這個也會觸發相同的SCF,用於查看用戶的特徵,如果查到的話這個用戶可以獲取權限;如果查不到就會返回到無權限。

img

img

具體的話在控制檯上我這邊已經寫好了這個函數,我們通過查看函數執行日誌來查看輸出結果。這裏我已經創建好一個bucket,這個用來用戶上傳圖像來提取用戶特徵。我會做一些測試,我已經有一些測試圖片了。我現在在網上隨意下載一個用戶的圖像。我們看到這個圖片上傳成功了,叫範2,我現在到雲函數控制檯查看一下日誌,這邊可以看到時間是16點37分。現在是沒有權限的,再上傳一張圖片,在new face提取一下特徵,還是剛纔那張圖片。已經上傳成功了。由於剛纔是沒有她的用戶特徵,所以這裏會創建一個新用戶。我在上傳另外一張圖片,這兩張圖片是不一樣的,16點38分剛剛上傳成功。現在再回到控制檯這邊查看日誌,現在看到剛纔範這張照片,可以查看到她的特徵了。

我再給大家看一下代碼。我剛纔實現的代碼裏,大部分都是從cos裏下載圖片的代碼和邏輯判斷,實際做人像識別的代碼是直接調AI接口。這裏還會對圖片做大小判斷,如果太大的話會做一次裁剪,因爲太大的話可能上傳到cos時會報超時。下面我還列了一些對AI接口的操作,這裏有很多的接口都封裝到了SDK,直接調用大概也就幾行就可以實現,比如人臉檢索,特徵信息創建,人臉比對兩張照片是否是一個人,還有身份證識別,所以使用起來是很方便的。

img

現在回到PPT,這一部分介紹的是COS和SCF結合的應用架構和應用場景。第一頁是放的雲函數架構平臺,這邊是BaaS架構。用戶可以上傳代碼和做一些配置在雲函數平臺,並選擇COS觸發器,同時也可以選擇上傳或者刪除事件來觸發這個雲函數。文件上傳到雲函數後,可以在雲函數裏做很多操作,比如說我可以做日誌備份,跨區域的文件複製,寫雲數據庫,做一些圖片處理或者語音識別等。或者我可以用SCF對接IoT平臺,把數據推到IoT終端。大部分的雲服務都可以和雲函數平臺做一個結合。

這樣用的好處是COS這邊可以提供高併發的場景。雲函數這邊也可以支持高併發。用戶只用聚焦自身代碼的實現,使服務可以快速上線,且當用戶的調用量很大的時候,這個架構也能很好的應對,有效的應對波峯和波谷。

img

把才的場景軸象化、簡單化後,可以看到左邊是COS存儲桶,我可以做上傳刪除等等,右邊可以和其他的產品或者服務做結合,像自定義日誌分析,和消息隊列做事件通知。

img

這裏舉例用戶頭像製作,用戶上傳圖片到COS,觸發SCF運行,SCF對圖片進行處理後發送到客戶端,並寫入COS,刪除原圖。假定我這邊配置SCF內存128MB,單詞執行時間1秒,平均每天被觸發運行5萬次。COS配置觸發SCF運行,用戶上傳到COS的平均文件大小1MB,每天上傳5萬次,被SCF處理後,圖片大小爲100K。這樣算出來SCF是這三部分的加和,因爲這裏免費額度的原因,所以這邊資源使用費用是零,相當於是免費在使用Serverless。這邊調用次數的費用是0.69元,每天觸發調用5萬次,一個月的費用不到1塊錢。另外一個費用是因爲這邊有外網出流量,每次上傳是多少GB,然後乘以5萬次,再乘30天,每GB0.8元,算出來是144元。如果沒有往客戶端發流量,所有的流量都在平臺內部打轉的話,這個費用也是沒有的,相當用SCF的費用基本上不到兩塊錢。

COS的話這邊也是把免費額度扣除掉之後,每次用戶上傳,存100K的圖片,加上讀寫IO,算出來是一個月14.6。所以這邊加起來一個月不到130塊錢。這是一個實際應用場景裏COS和SCF的價格舉例。

img

這裏我又列舉了一些用戶的實際案例,這邊因爲沒有拿到用戶的授權,所以沒有把用戶的名稱放出來。這個案例是視頻文件轉碼,這邊是用戶視頻文件上傳,調用騰訊雲的視頻解碼服務,再根據不同碼率寫到COS,COS最後會用CDN,對視頻文件做一個加速。這裏所有的觸發都在雲上,你不需要運維,同時這邊的服務也是非常的便宜。

img

這個是CDN自動刷新,很多用戶會用到COS和CDN,把COS文件做CDN加速,但是這裏有一個問題,每次文件更新都需要手動點擊刷新,現在就不用了,上傳到COS的文件自動觸發SCF,SCF調CDN的API接口,實現自動刷新。

img

這個客戶案例,是做日誌文件分析,客戶的點播平臺每時每刻都在產生大量的日誌,怎樣快速低成本的對這些日誌進行統計分析,篩選出最受歡迎的視頻源,點播峯值時間段等並展示出來成爲客戶面臨的難題。

img

這個案例是一個在線視頻教育的案例,老師和學生會有視頻課程,它們會從視頻課程抓取圖像,然後把這些圖像上傳到COS,然後COS會觸發SCF做一次分析,把這個寫到消息隊列,並通知客戶自身的業務模塊進行分析,從而來判斷老師和學生之間是否有敏感信息產生。

img

這是一個自動災備的案例,客戶是荔枝微課,用戶在APP或者電腦端做文件上傳,文件上傳以後,需要同步到跨區域同跨帳號下的其他Bucket。

img

最後我說一下最佳實踐。其實只要能爲用戶實際創造價值,它就是一個最佳實踐。這邊我列舉了幾條,主要是在使用COS和SCF過程中的注意事項。比如COS觸發SCF的流程,首先COS會把上傳和刪除事件寫到自己的消息隊列,和雲函數SCF消息隊列做一個對接,雲函數消息隊列會觸發雲函數執行每次的事件操作。所以這是異步調用。有同學會問這邊是不是實時的,如果正常情況下,沒有消息堆積的話是毫秒級。如果某一時刻有大量用戶做上傳視頻或者刪除動作的話,可能會產生消息堆積。如果來不及消費,可能在秒級觸發SCF運行。

COS觸發SCF只支持同地域配置。

COS支持前後綴過濾觸發,以及同一Bucket中多種事件類型觸發SCF。

爲了避免COS的事件生產投遞出現錯誤,COS針對每個Bucket的每個事件限制只能綁定一個可觸發的函數。主要爲了避免用戶出現循環的調用,觸發錯誤。

目前單個雲函數支持綁定2個COS觸發器。

最後一個是列舉了COS Bucket的消息格式,會把什麼樣的信息發給SCF。SCF在這個事件裏把消息拉出來。比如用戶的APPID,用戶上傳的文件名,以及用戶Bucket所在的地域,這邊都可以拿到。所以在SCF這邊可以拿到用戶上傳到COS大部分的文件信息。

有同學問到,傳統開發模式和無服務器模式架構的區別,或者說是用傳統開發模式的優勢或者兩者之間的成本對比。這邊可以看到對於傳統架構設計,比如買了雲主機,架構分層,功能劃分,模塊通信等等都需要考慮。用無服務器只需要對函數功能進行劃分,同時把一些具體的功能通過事件觸發的形式去綁定到一起,這邊架構上會減少很多工作量。但是,如果說這個邏輯或者服務計算是非常重的話,其實還是用傳統開發模式可能會更好一點。另外如果雲主機使用效率在 70%以下的話,其實SCF會便宜很多,同時SCF可以省去很多運維和環境搭建的工作。

代碼開發,傳統模式要考慮到容災,業務邏輯的對接。雲函數只需要關心自己的業務代碼,把業務代碼寫好後配置相應的觸發器,這邊就可以運行了。

代碼調試,登陸服務器使用熟悉的工具在本地調試。無服務器目前主要依賴日誌調試。

發佈部署,雲函數這邊可能效率會更高一點,但是差別不是很大。

Q&A

Q:我在更新我的模型文件的時候,會不會對我其他的文件產生影響?

A:像對COS做熱更新的時候,在那個時刻會有影響,但是在過程中沒有影響。

Q:SCF到底是什麼?

A:簡單來說SCF就是一種計算資源。我們有時候會叫它FaaS。FaaS是一個概念,SCF是一款產品。

本文PPT附件請點擊原文下載。

問答
Serverless:如何刪除一個函數?
相關閱讀
多個場景中的AI落地實踐
低於0.01%的極致Crash率是怎麼做到的?
【每日課程推薦】新加坡南洋理工大學博士,帶你深度學習NLP技術

此文已由作者授權騰訊雲+社區發佈,更多原文請點擊

搜索關注公衆號「雲加社區」,第一時間獲取技術乾貨,關注後回覆1024 送你一份技術課程大禮包!

海量技術實踐經驗,盡在雲加社區

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章