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

語言: CN / TW / HK

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

本文來自騰訊雲技術沙龍,本次沙龍主題為Serverless架構開發與SCF部署實踐
盧萌凱:畢業於東南大學,曾就職於華為,熟悉雲行業解決方案。目前負責騰訊雲中介軟體產品及無伺服器雲函式的技術架構打造,幫助使用者完成方案設計,對雲端儲存產品的使用難點有獨到見解。

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

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

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

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

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

應用接入層可以選擇應用服務,像圖片智慧識別和處理,音影片處理等。同時COS可以和雲上一些大資料套件對接。一個簡單的場景,使用者可以用雲上的Kafka直接寫入COS,COS和大資料對接來做使用者行為的分析。

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

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

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

同時物件儲存可以對接雲上其他的服務,並針對不同的使用者可以設定不同的訪問許可權。我這裡放了一個影片對應用場景做一個總結和發散。

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

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

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

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

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

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

這裡舉例使用者頭像製作,使用者上傳圖片到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的價格舉例。

這裡我又列舉了一些使用者的實際案例,這邊因為沒有拿到使用者的授權,所以沒有把使用者的名稱放出來。這個案例是影片檔案轉碼,這邊是使用者影片檔案上傳,呼叫騰訊雲的影片解碼服務,再根據不同位元速率寫到COS,COS最後會用CDN,對影片檔案做一個加速。這裡所有的觸發都在雲上,你不需要運維,同時這邊的服務也是非常的便宜。

這個是CDN自動重新整理,很多使用者會用到COS和CDN,把COS檔案做CDN加速,但是這裡有一個問題,每次檔案更新都需要手動點選重新整理,現在就不用了,上傳到COS的檔案自動觸發SCF,SCF調CDN的API介面,實現自動重新整理。

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

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

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

最後我說一下最佳實踐。其實只要能為使用者實際創造價值,它就是一個最佳實踐。這邊我列舉了幾條,主要是在使用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 送你一份技術課程大禮包!

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