瞧瞧我們對漫畫圖片都做了什麼!?
概述
漫畫是一種以圖片爲主體的內容形式,我們在實現漫畫業務需求時,不可避免地會和圖片打交道。本文總結了番茄小說業務場景中兩個和圖片相關的技術需求,在此拋出遇到的問題與團隊的解決思路,望能拋磚引玉。
一、漫畫內容加密
1. 需求背景
漫畫的內容是由一張張的圖片構成,這些圖片就是我們的資產,爲了防止盜版商 / 灰黑產能輕易地獲取這些資產,我們需要提供一個圖片加密方案,以此來保證這些內容只能在我們允許的分發渠道上展示。
2. 內容加密的思考
加密過程,無非就是明文、加 / 解密算法、密文。在這種情況下,增加對內容的保護程度,本質上就是對密鑰算法的迭代。但本次需求不同點在於,由於我們需要保護的不是某一個特定的文件,而是一大批文件,因此除了密鑰算法本身的迭代外,我們還可以考慮從密鑰的顆粒度着手。
3. 密鑰的顆粒度
針對漫畫章節的特性,我們考慮了三種顆粒度的密鑰方案:
「所有內容統一一個密鑰」
該方案的問題是,只要盜版商 / 灰黑產獲取到一個密鑰,即可解全網的圖片內容。盜版商 / 灰黑產獲取到該密鑰的成本非常低,該方案做了等於沒做。
「每個用戶一個密鑰」
每個用戶一個密鑰,意味着每個用戶獲取的內容是不同的,使得內容不能放在 CDN 上,需要由服務端 API 直接輸出。但問題在於圖片文件比較大,不適合直接放在服務端 API 的響應包裏。且對於圖片這種多媒體數據,更應該更多地利用 CDN 近用戶端的好處。
「每個章節一個密鑰」
由於是內容維度的密鑰,還是可以將內容推至 CDN 來進行訪問,也避免了 “所有內容統一一個密鑰” 的問題。壞人可以獲取到一個密鑰,但比較難獲取到所有內容的密鑰。
從安全性的角度上看,我們認爲,密鑰顆粒度越小,越難被發現分發內容的規律,越難被破解。
4. 如何維護密鑰
上文從安全角度分析,我們確定了要以每個漫畫章節一個密鑰的設計方向。然而,從維護成本看,如果我們直接爲每個漫畫章節都保存一個密鑰,則需要引入額外的章節數量級(千萬級~億級)的密鑰存儲,維護成本相對比較高。
如何既能實現章節維度的密鑰,又能降低維護成本呢?
我們想到了一種基於 “元密鑰” 的實現方式,即:
-
服務端只保存一個密鑰,稱之爲 “元密鑰”,該密鑰保存在密鑰管理服務中;
-
設計一個變換函數,該變換函數保證多次運算結果一致,輸入參數爲元密鑰和章節 id,組合生成 “章節密鑰”;
“元密鑰”方案解決了海量章節數量級的密鑰維護成本問題,我們只需要維護一個 “元密鑰” 和一個“變換函數”,即可源源不斷的生成新的章節密鑰。
5. 整體流程設計
如上,我們確定了我們加密方案的基礎—— “元密鑰”。於是基於 “元密鑰” 方案 ,我們所設計的整體流程如下所示,核心主要是生產與分發兩步。
「生產」
生產步驟主要由內容生產服務完成,其主要功能是將內容提供商或者是作者提供的多媒體源文件,轉換成在客戶端 APP 可讀的文件形式,然後上傳到雲端或其他存儲介質中。在生產過程中,需要生成不加密版本和加密版本,同時保存至對象存儲服務中。加密版本的漫畫圖片使用 “變換函數” 組合元密鑰和章節 id 生成章節密鑰,來對該章節的漫畫內容進行加密。不加密版本是爲了防止極端情況下獲取元密鑰失敗,此時可直接下發不加密版本,減少用戶體驗上的損失。
「分發」
分發步驟主要由內容分發服務完成,其主要功能是查詢客戶端請求的章節內容,打包下發給客戶端 APP 進行展示。漫畫的章節內容,同時包括了漫畫圖片的 URL 鏈接、圖片加密狀態以及章節密鑰。 其中漫畫圖片的 URL 鏈接以及章節加密狀態是從存儲服務中獲取的,而章節密鑰則是在分發時利用 “變換函數” 來進行生成,所以生成時也需要獲取元密鑰,獲取元密鑰失敗時,就會降級到圖片不加密的邏輯,下發非加密圖片。
最後,漫畫章節內容在下發前,還需要對下發的響應包進行加密。客戶端獲取到章節內容時,需要首先對響應包進行解密,得到當前的圖片加密狀態、漫畫圖片 URL 鏈接以及章節密鑰等信息;然後根據漫畫圖片鏈接,獲取漫畫圖片文件;最後根據圖片加密狀態,判斷是否需要對獲取到的漫畫圖片文件進行解密,如需解密,則根據下發的章節密鑰進行解密。
6. 解密失敗感知
上述方案也存在一些侷限,一個比較嚴重的問題在於如果密鑰生成函數計算出錯,會導致加 / 解密的密鑰不匹配,進一步導致圖片內容解密失敗,這會使得圖片無法正常顯示,對於用戶來說這是非常有損的體驗。由於圖片內容加密過程發生在內容生產服務,圖片內容解密過程發生在客戶端,內容分發服務本身無法感知到解密失敗事件,不能前置降級處理,因此實現上必須在客戶端上做好解密失敗的監控,在解密失敗時及時告警,推動後臺排查處理。
二、漫畫封面超分
1. 需求背景
相比於網文,漫畫的書封更加精美,信息量也更多,因此在產品形態上,漫畫也採用了大屏的展現形式。
然而,在漫畫功能上線後,我們發現有部分漫畫的原始書封比較模糊,影響體驗,如下所示:
爲了提升這部分圖片的畫質,我們想到了尋求超分 / 畫質增強組件搭建自動化處理流程,對該類圖片做增強處理,得到高清圖,提升整體觀感。
2. 目標
-
篩查低質圖片
-
大部分漫畫的書封畫質是比較好的,僅有少部分存在圖片模糊的問題,但由於書本量級多,人工篩查的工作量大,因此期望能具備自動篩查的能力,不依賴人工篩選。
-
使用 vqscore 對封面圖片進行打分,通過設定閾值來定位出需要進一步做增強的低質圖片。
-
圖片增強處理
-
增強後的圖片需要有明顯的畫質提升。
-
圖片加載有明顯的用戶感知,更小的圖片意味着更小的帶寬成本,加載得也更快,所以經過超分處理後的圖片在文件大小上不能有太大的增長,需要具備下采樣抗性。
3. 調研
-
篩查低質圖片的方法 - vqscore
-
火山引擎視頻雲團隊提供的一種畫質評估指標,其背景是通過深度學習的方法對圖像 / 視頻得到符合人類主觀的評價分數,分數越高代表畫質越好。
-
圖片超分接入方法 - imageX
-
imageX 是火山引擎視頻雲團隊提供的一站式圖片解決方案,可通過模板配置的方式實現對輸入的圖片進行圖像處理。
-
圖片超分處理方案 - 多媒體實驗室
-
imageX 本身提供了一種通用的超分能力可直接進行畫質增強處理,但是經過嘗試後發現處理後的圖片仍然比較模糊,不符合預期,因此找到了多媒體實驗室的同學進行定製化的超分能力處理方案的開發。
4. 設計思路
-
圖片超分處理方案開發 - by 多媒體實驗室
-
給出一批封面圖片供算法同學進行算法離線驗證。算法同學從以下維度進行離線評測:
-
使用 vqscore 對封面圖片進行打分,通過設定閾值來定位出需要進一步做增強的低質圖片。
-
使用超分模型對低質圖片進行增強處理,驗證增強效果是否符合預期。
-
考慮到某些場景下會對圖片做下采樣處理,還需驗證增強算法對下采樣的抗性。
-
業務方確認增強效果符合預期後,通過 ImageX 來調用增強模塊。
-
圖片超分處理方案效果驗證 - by 內容分發側
-
在漫畫封面的分發場景下,通過實驗的方式,驗證圖片超分處理的業務收益。
-
imageX 新增漫畫場景定製化超分處理模板。
-
對照組仍然保持線上處理,下發原圖。實驗組下發漫畫書封圖片時,配置請求超分模型用的圖片模板。
-
客戶端請求圖片時,由超分模型進行畫質判斷 & 超分處理,返回處理後的圖片。
-
圖片超分處理方案正式接入 - by 內容生產側
-
接入超分處理後,會給圖片加載帶來額外的時延,因此考慮在內容生產服務上傳書封圖片時,直接進行 “篩選低質圖片 -> 圖片超分處理”的過程,減少客戶端加載漫畫圖片的時延。
5. 技術實現
漫畫封面超分處理方案
「方案預設」
-
輸入圖片 --> 4 倍超分。驗證超分對原圖畫質的提升。
-
輸入圖片 --> 4 倍超分 --> 縮放至 240p(長邊 240)。驗證超分對壓縮圖片的畫質提升。
-
根據投稿圖片 vqscore 大小,將其分爲四組:低畫質,中低畫質,中高畫質,高畫質。分別統計各組畫質提升效果,確定觸發閾值。
「數據分析」
-
給出的 1040 個漫畫封面,原始分辨率以 630x840 居多。
-
整體質量較好,少部分存在低質問題。
-
低質原因懷疑是壓縮後經上採樣而引起的模糊、塊效應和鋸齒。
-
輸入圖片 vqscore 低於 62 分而且圖片長邊小於 1080 時,開啓 4 倍超分(v4)。
「驗證方案」
對輸入圖片(ori)做離線增強處理,得到超分圖片(SR2)。爲了驗證下采樣抗性,進一步下采樣至 240p,記爲(SR2_240)。同時作爲對照組,將輸入圖片 ori 下采樣至 240p,記爲 ori_240。
計算以上 4 個節點的 vqscore,從大圖和小圖兩個維度予以驗證:
-
比較 ori 與 SR 2 的分數大小來驗證超分增強有效性。
-
比較 oir_240 與 SR2_240 的分數大小來驗證超分對下采樣的抗性,從消費端的角度來審視超分增強的有效性。
「整體結論」
-
低畫質和中低畫質佔比約 17%,這一部分圖片建議開啓增強。
-
低畫質經增強處理後,大圖 vqscore 提升約 21 分,小圖 vqscore 提升約 9 分,主觀畫質明顯提升。
-
中低畫質經增強處理後,大圖 vqscore 提升約 15 分,小圖 vqscore 提升約 6 分,主觀畫質明顯提升。
-
中高畫質和高畫質經增強處理後,大圖和小圖 vqscore 均有提升,主觀畫質提升不明顯。
-
輸入圖片 vqscore 低於 62 分而且圖片長邊小於 1080 時,開啓 4 倍超分(v4)。
「前後對比」
流程示意 (流程圖只表述關鍵節點)
「測試階段」
測試階段,觸發超分處理的時機放在客戶端請求圖片時。
「正式接入」
正式接入時,觸發超分處理的時機放在內容生產服務上傳圖片時。
三、總結
本文總結了兩個業務場景中遇到並已經解決的實際問題——圖片加密和圖片超分。圖片加密基於我們的真實業務場景進行思考,提出了以章節維度進行加密的方案,同時設計了元密鑰 + 函數概念避免了章節維度帶來的海量密鑰存儲的問題;圖片超分充分結合業務需求和火山引擎視頻雲在圖片畫質評估、圖片處理和接入、超分定製化方案的一攬子能力,針對低、中低畫質的圖片進行增強處理,效果提升顯著。由於篇幅所限,本文僅對解決思路進行了闡述,具體實現上有所省略,但仍希望能給整個行業一點啓發,一同進步!
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/6NF8ocAVONXQ7fjVdAwu0A