Skip to main content

Android 爛裝置想跑人臉辨識0 – 到底有多爛?

爛裝置是什麼?

這次的主角是:Qualcomm Snapdragon QM215,搭配 2GB RAM,架構為 ARMv8-A

這顆 SoC 是高通在 2019 年發售的超入門處理器,設計初衷就是給低價 Android 手機或 IoT 設備使用。雖然它支援 64bit 架構、雙鏡頭、功耗低,
但同時也有幾個硬傷:

  • 沒有 NPU,AI 要靠 CPU/GPU 硬扛
  • RAM 上限 3GB,實際只裝了 2GB(為了省錢)
  • 四核心 Cortex-A53,最高只有 1.3GHz

你是公司請來的技術負責人,2024 年收到這顆晶片,要在它上面做臉部辨識。你不能翻桌,也不能罵老闆,因為創業公司改硬體是禁忌,只能想辦法把爛機救活。


應用場景

任務需求不是簡單的開個鏡頭而已,而是:

臉部辨識設備,通過 BCTC 增強級認證(金融等級)

要求包含:

  • 辨識時間 < 1 秒
  • 辨識精度 99.99%
  • 活體安全認證(增強級)

系統環境與初步評估

作業系統:Android 10

雖然 QM215 官方只提供 Android 9 的 BSP,但我們選擇升級到 Android 10,目的是希望減少非預期錯誤。代價是:Android 9~10 的系統服務預設就非常肥,光是開機就吃掉了 1.3GB RAM

鏡頭需求:RGB + TOF 雙鏡頭串流

  • TOF(Time of Flight)是活體辨識的關鍵
  • 我們採用的是 IR 結構光實作
  • 雙鏡頭串流 + Frame buffer 處理,經測試約佔 950MB 記憶體

AI Model 推論架構

完整臉部辨識流程包含:

Face Detect → Face Align → Liveness Detection → Image Quality Check
→ Feature Extraction → Feature Matching

其中 Image Quality Check 又細分為:

  • head_pose_model
  • expression_model
  • blurriness_model
  • occlusion_model
  • cv_over_exposure

這些模組大多用 TensorFlow Lite / NCNN 實作,也有些用影像處理簡化掉,但仍然要吃掉 約 300MB 記憶體


問題馬上浮現

鏡頭 950 MB + AI 模型 300 MB + System 1300 MB = 3180 MB > 2000 MB

RAM 直接炸裂。

CPU 幾乎長期 90% 滿載(A53 x4 核心)

AI 推論 + 影像處理壓力極大。

目前推論 + 鏡頭總處理時間 = 1.5 秒

距離 <1 秒有點距離。


我們的方向

  • 記憶體節省是第一要務
  • 運算速度優化必須同步進行

因為我們有修改 AOSP 的權限,第一步可以從砍掉沒用的 system service 開始。

但在那之前,請記得:

飛機起飛前,先裝好儀表板。

沒有記憶體使用監控、沒有效能監控工具,一切都是瞎忙。