天天看點

淘寶拍照基于端雲協同的視訊流實時搜尋實踐

作者:閃念基因

本文介紹了實時視訊流的主體識别場景,未來實時搜将會融合圖搜主鍊路并在XR場景發力,未來的場景我們取名為“元視界”(MetaSight)

淘寶拍照基于端雲協同的視訊流實時搜尋實踐

引言

很多熟悉淘寶的使用者知道,點選首頁搜尋框的相機icon,就可以使用淘寶拍照功能來進行實時拍照搜同款和比價。

淘寶拍照基于端雲協同的視訊流實時搜尋實踐

這背後就是圖檔搜尋技術在電商領域的應用。正如把大象關進冰箱隻需要三步:打開冰箱、把大象放進去、關上冰箱。淘寶拍照的自動識别圖搜功能也可以簡化描述為以下三步:

  1. 用戶端從攝像頭擷取圖像,利用端側算法識别出主體
  2. 上傳圖檔到雲端,雲端根據主體特征進行搜尋,并傳回識别結果
  3. 用戶端拉起結果頁把圖搜結果展示給使用者

以上流程是目前圖搜的主鍊路,使用者感受到了兩個場景:鏡頭頁進行物體識别,結果頁展示圖搜結果。這套模式已經運作了很長時間。而在拍立淘近一年的發展中,我們一直期望面向未來打基礎。我們合并了鏡頭頁,對接了MNN端智能平台,在AR眼鏡普及的前夜,希望可以投入部分兵力到XR的陣營,抓住這個爆點。目前蘋果已經出了MR眼鏡,大機率未來會削弱PC、TV等現有裝置的使用價值。而蘋果推出AR眼鏡的時候,将會迎來一個全新的互動模式。

回歸正題,我們從哪幾方面來切入,既可以保證業務發展,又可以保持對未來的可能就至關重要。在當時最核心的一個改造點就是将幀上傳模式改為視訊流實時主體識别模式,實作我們圖檔搜尋到視訊流搜尋的跨越。

淘寶拍照基于端雲協同的視訊流實時搜尋實踐

發現問題

然而需求往往來自于身邊:線上下特賣會上,大家拿起特價商品但是不知道是否劃算的時候,往往手足無措;隔壁團隊的某位新晉奶爸同學線上下商場遛娃逛童裝店的時候,面對滿牆的商品,一時沖動剁手買下多件童裝,然而回頭用淘寶拍照逐一比價才驚呼遭遇到了價格刺客。實際上不止這些場景,在背景我們也收到了很多使用者回報,典型的比如:“線上下商場和超市逛街的時候,如何能友善快速地和線上進行同款比價”。

視訊流實時搜尋(後文簡稱:實時搜)的業務場景就可以很友善的解決使用者這部分的體驗問題,使用者對準一個商品就可以立馬擷取到商品的簡介資訊,幫助使用者決策。

淘寶拍照基于端雲協同的視訊流實時搜尋實踐

業務價值

  1. 實時搜将現有app圖像搜尋模式做了優化,現有的幀上傳模式改為視訊流實時主體識别模式,實作圖像搜尋到視訊流搜尋的跨越。
  2. 實時搜在鏡頭上通過卡片懸浮提供給使用者更多的附屬資訊的展示,讓使用者可以通過鏡頭感覺到更多的附加資訊。同時通過互動形态減少了使用者看到結果的流程,實時性更強。
  3. 實時搜解決使用者在商場的場景下,輔助使用者增加購物決策力的能力。
  4. 實時搜的互動狀态可以帶給使用者更好的體驗,也可以給使用者更多的資訊提示。
  5. 實時搜輔助未來線上線下虛實結合,打造全新XR購物體系。
淘寶拍照基于端雲協同的視訊流實時搜尋實踐

鍊路分析

對于實時視訊流的問題,很多人的第一反應是:視訊不就是多幀圖檔一起播放嘛,那直接對視訊流進行抽幀圖搜就可以了。然而經過測試,我們發現了以下問題:

  1. 簡單抽幀會忽略幀之間的關系,造成主體重複。例如有一個物體在A、B兩個間隔時間比較短的幀出現,A是近景,B是遠景,簡單抽幀會識别出兩個不同主體,給使用者帶來認知混亂的同時,無法做卡片錨定、跟随。
  2. 簡單抽幀進行圖搜計算會向服務端進行多次網絡請求,網絡請求的頻率和抽幀頻率成正比,将給服務端造成很大的壓力。

這個場景看似簡單,實際上将原有的單幀圖像搜尋跨越到實時視訊流搜尋場景,背後有幾個問題需要考慮:

  1. 如何解決前後幀中主體的關聯關系,即一個在前後幀均出現的主體隻展示一張卡片?
  2. 端側模型大小一般小于10M,如何解決端側算法資源瓶頸?
  3. 在源源不斷的視訊流輸入中,如何兼顧到性能和使用者體驗?
淘寶拍照基于端雲協同的視訊流實時搜尋實踐

方案簡介

對于以上3個問題,仔細分析後,我們有以下思路:

問題1:算法需要對視訊内容(即前後幀關系)進行了解,對于相鄰幀的同一個物體賦予唯一ID。

問題2:使用端雲協同的方式解決資源瓶頸,并提升算法的準确性。

問題3:通過批量處理的方式,解決網絡頻繁請求問題;通過跨端動态化方案Weex 2.0解決商品卡片性能問題,并保證雙端體驗一緻性。

基于以上思路,我們設計了一套實時視訊流場景解決方案(實時搜),創新點概要如下:

  1. 端側算法會視訊流進行特征提取,對已識别的主體進行緩存,并且配置設定全局唯一的ID,以解決不同幀的相同主體重複的問題。
  2. 将服務端識别的結果回流到端側算法進行修正,以解決端側算法資源不足而識别不準确的問題,進而提升同款率
  3. 對于端側算法識别出的主體,資料層進行緩存,并在特定的時間節點上,批量摳圖上傳到服務端進行搜尋,擷取主體資訊,進而解決服務端的壓力問題。
淘寶拍照基于端雲協同的視訊流實時搜尋實踐

資料實作

淘寶拍照基于端雲協同的視訊流實時搜尋實踐

先介紹下整體的架構圖,從上到下簡單介紹下:

  1. UI層:負責卡片生命周期管理和UI展示等。
  2. 資料層:負責對識别的主體資料進行緩存,并通過批量網絡請求進行算法回流矯正等。
  3. 任務管理:主要對算法運算單元的生命周期進行管理:包括建立、運作、銷毀、指令分發等
  4. 算法單元:主要封裝了對各業務的算法的封裝,并且對算法單元使用了相同的指令封裝、異常處理、算法資訊搜集等
  5. 底座:端側算法是基于淘寶自研的MNN平台,并使用了UT、流量分發、網絡請求等基礎中間件。

以下将對資料層和UI層做重點介紹。

▐資料層

  • 模型預下載下傳

為了解決算法模型下載下傳問題,會在App閑時進行實時搜算法模型預下載下傳,下載下傳完畢後方才展示業務入口。

  • 端雲協同提升算法精度

本方案的算法流程分3步:

  1. 向端側算法輸入實時視訊流,算法檢測出主體,并賦予主體ID。
  2. 用戶端向服務端請求資料,得到更精确資料。
  3. 資料回流給算法,進行算法資料矯正,擷取最終資料。
  • 批量請求解決多次請求服務端問題

在計算機工程實踐中,我們對于類似的問題的大殺器是“緩存+批處理”,這次也不例外,本方案中通過對主體進行摳圖并批量上傳的方式,來減輕服務端壓力。

  • 簡要流程
  1. 輸入視訊流給算法層,一旦識别出主體來,将傳回主體的ID和位置等。
  2. 根據主體位置對視訊幀進行剪切得到主體摳圖,并對主體資訊進行緩存,緩存期間若有相同的主體Id資訊将進行更新。
  3. 通知UI層展示兜底卡片,包括簡單的主體資訊,如品類等。
  4. 定時将緩存的主體圖批量上傳服務端,進行圖搜。
  5. 将圖搜結果回流到算法側,算法根據主體Id對資料進行算法矯正,并傳回業務層主體的具體商品資訊。
  6. 通知UI層展示商品卡片,并對卡片生命周期進行管理。

▐ UI層

  • 卡片生命周期管理
淘寶拍照基于端雲協同的視訊流實時搜尋實踐

由于業務上流程的考慮,一期我們将卡片分為3個階段,未來會有更多的展現形式:

  1. 兜底卡:展示最基本的主體資訊,如品類等,内容由端側算法提供。
  2. 小卡:展示商品價格等資訊,内容由服務端提供。
  3. 大卡:展示商品詳情資訊,内容由服務端提供。

其中,為了確定跨端體驗一緻性和發版效率,除了兜底卡外,其餘均由 Weex 2.0跨端架構來實作。

在卡片生命周期的管理上有三個點:

  1. 卡片資料統一管理、更新,服務端請求批量處理
  2. 卡片位置定時更新,并動畫進行移動,以便實作卡片跟蹤效果
  3. 卡片狀态定時檢查,檢查内容包括卡片是否過期、目前卡片比例等,進行卡片狀态切換
  • 卡片防碰撞

在實作的過程中,我們發現在畫面中有多個主體的情況下,卡片跟蹤會導緻卡片互相遮擋的現象出現,這就給後續使用者的使用造成了不好的體驗,為此設計了簡單的卡片防碰撞的機制:

淘寶拍照基于端雲協同的視訊流實時搜尋實踐

如上圖所示,每次卡片進行周期性做位置移動之前,均需要根據目前主體的位置來計算卡片的下一個位置,主要會根據兩個方面來判斷:

  1. 是否和其他卡片重合;
  2. 是否超出螢幕。

最終根據一定的算法邏輯,在每個周期将卡片渲染到最合适的位置。

  • 卡片渲染

為了讓使用者互動體驗更絲滑,互動場景中我們使用了動态化卡片來渲染,目的是讓卡片的渲染更加動态且易于改版。同時UI層和底層Native的邏輯隔離開,代碼也易于維護。

淘寶拍照基于端雲協同的視訊流實時搜尋實踐

總結

實時搜是拍立淘團隊對于實時視訊搜尋在電商領域的一次有意義的探索,設計了一套端雲協同的視訊流實時搜尋方法,并實作了全新的使用者互動體驗方案。

目前實時搜産品還在打磨,未來将會融合主鍊路并在XR場景發力。基于這個方向我們目前已經發表多篇專利,我們給未來基于實時搜的場景取名為“元視界”(MetaSight),第一階段會持續向着“AR+GPT”的方向發展,也是期望一切如我們所預料的那樣發展。這篇文章作為“元視界”場景的技術能力介紹,期望與大家共鳴。

作者:紹楠、素流

來源:微信公衆号:大淘寶技術

出處:https://mp.weixin.qq.com/s/W0pjqEWItQrM7JCOFzJIDQ

繼續閱讀