Android實現人臉識別(人臉檢測)初識


title: Android實現人臉識別(人臉檢測)初識
categories:

  • Android
    tags:
  • 人臉識別
  • 人臉檢測
  • 相機處理
    date: 2020-05-21 11:35:51

介紹

本篇文章主要介紹一下移動端Android的人臉識別大致邏輯,後續文章會陸續放出乾貨,首先我們要明確兩個名詞

  1. 人臉檢測,即從一張照片中或者一個相機中,檢測有沒有人臉的出現,
  2. 人臉識別,相對人臉檢測來說可以識別出照片或者視頻中的人臉位置,人臉特徵,即常用的識別例如,門禁人臉識別對比,年齡識別,性別識別,活體檢測,

可以說在現在計算機視覺應用中,人臉識別尤爲關鍵,我們可以想象到常見的美顏相機,就是人臉識別爲基礎,以及人臉特效啥的(某音常見的)

那麼我們Android怎麼實現自己的人臉識別呢

目前有幾個比較成熟的技術,

  1. camera原生api(已過時不推薦)
  2. camera2 + FaceDetector(後面會詳細說)
  3. opencv(筆主採用的4.3.0版本)
  4. ARCore(Google service)

關鍵知識點

若要知道人臉識別,圖像的處理是必不可少的,那麼相機等格式也是需要了解,其中有幾個關鍵點的知識需要有所瞭解

  1. nv21,YUV420這些原始數據格式(大致瞭解會用即可)
  2. Bitmap(bitmap type 格式RGB 565,RGB4444等,大致瞭解即可)
  3. 灰度化,二值化
    圖像的二值化是將圖像上的像素點的灰度值設置爲0或255,也就是將整個圖像呈現出明顯的黑白效果。
    將256個亮度等級的灰度圖像通過適當的閥值選取而獲得仍然可以反映圖像整體和局部特徵的二值化圖像。在數字圖像處理中,二值圖像佔有非常重要的地位,
    首先,圖像的二值化有利於圖像的進一步處理,使圖像變得簡單,而且數據量減小,能凸顯出感興趣的目標的輪廓。其次,要進行二值圖像的處理與分析,首先要把灰度圖像二值化,得到二值化圖像。
     所有灰度大於或等於閥值的像素被判定爲屬於特定物體,其灰度值爲255表示,否則這些像素點被排除在物體區域以外,灰度值爲0,表示背景或者例外的物體區域
    而人臉的特徵,大家都懂,一個鼻子兩個眼,一張嘴2個耳朵,這些都是不同技術共同點,都是靠特徵點去比對,然後檢測人臉
    (感興趣的可以繼續瞭解圖像二值化後,圖像加減法,色彩調節等,迷宮算法,等還挺有意思的)

關於這些知識點,Android老鳥基本都瞭解,那麼對後面的操作就比較簡單了,

-----知道這些那麼針對你的需求可以繼續了

技術對比

如果你需要的是只需要測出人臉,屏幕中出現人臉的個數等,而不需要關注人臉的其餘信息,只需要知道人臉出現在了鏡頭中,ok
那麼你就可以方法二,faceDetector,該技術的特徵模型,是檢測眼睛,雙目間距,眉眼特徵來的,理論來講只需要知道雙眼座標,
就可以知道,你相對鏡頭的角度,人臉的大致位置,眉心中心點,等,(這種方法的好處是,比如說現在疫情,戴口罩,ok,沒問題,你帶口罩我也能認出你來)

如果說你需要做比較詳細的人臉信息,可以採用opencv來比較靈活,圖像處理後,可以配合多種算法,各種成熟的模型,來做人臉識別,說白了就是對圖像處理後,拿到數據,愛用什麼算法算就用什麼算,
愛用什麼模型匹配,用什麼模型匹配,對接起來比較簡單,要精確可以簡單的提升精確度,當然,模型不同原理也不同比較常用就haar lbp等分類器
在這裏插入圖片描述

當然項目的體積也會增加較多
好了,這篇文章先寫這麼多,後續補充,
後面陸續補全,方法二和方法三的具體實現,
至於方法四,後面也會有demo和解讀,,,比較厲害的一個東西

博客Android實現人臉識別(人臉檢測)初識

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章