最近接到一個需求是這樣子的,
有一個影像處理服務被包成 API,傳入參數主要有兩個:
1.需要被檢測的 image
2.搭配該 image 的 mask
這邊的 image 是一張有三通道的時變訊號,
而 mask 則是固定的單通道訊號,
兩張在原本的系統都是以 Uint8 陣列做儲存。
由於我們在 Server 端做 Memoryless 比較好模組化,
所以把這個 mask 存在 Client 端。
因為這個服務的環境通常走 NB-IoT 回來,
NB-IoT 是一種依傳輸量(單次頻寬*次數)計費的服務。
在次數不變的前提下,
我們只能想辦法設計系統來減少單次頻寬使用量。
原本的系統設計中頻寬是 (HxWxC + HxW) x Uint8
所以單次的頻寬大概會是 HxWx4 Byte
如果我們把藍色通道切出來並犧牲一點顏色精準度呢?
就可以把 mask 的資訊藏在首位傳輸過去, 在 Server 端做解碼回來就好:
這麼做的好處是頻寬從 HxWx4 -> HxWx3 Byte,
節省了 25% 的頻寬。
並且保證最多落差藍色通道 1個 bit 的值,
實務上因為色彩心理學而選用藍色通道,
在後續的辨識服務中幾乎沒有差別。
當然你也可以把 mask 壓縮成幾個 int 傳過去,
(e.g. 逐 row 11111111 -> 255 等) 但為了因應後續圖片尺寸可能會變動的情況,
這樣子的系統設計我認為是最動態、靈活且具有擴充性的。