Android眼球追蹤

前言

眼球追蹤技術已發展一段時間並且應用場景廣泛,而近期元宇宙爆炸性的成長讓眼球追蹤技術再次成為眾人的焦點,其原因在於要如何讓使用者能更加沉浸在虛擬世界裡眼神交流非常重要,因此要達到在虛擬世界裡呈現眼神或注視方向眼球追蹤技術是必不可少。眼球追蹤除了應用在元宇宙外廣告看板也是重點之一,透過蒐集消費者在關注廣告看板時的區域能讓廣告商更加了解消費者喜好,再利用大數據分析進而投放更符合消費者喜好的廣告。

目的

透過本篇博文教大家如何在Android手機利用OpenCV Cascade Classifier模型架構實現眼球追蹤功能。

Cascade Classifier模型介紹

OpenCV 使用的 Object detection 技術稱為 Cascade Classifier for Object Detection ,是一種屬於 boosted cascade of weak classifiers 的方法,也就是將數個弱分類器串聯起來再得出最佳的分類結果。其實最早整合到 OpenCV 並支援的分類特徵是哈爾特徵(Haar-like features),後來加入了 LBP Local Binary Pattern)以及 HOG Histogram Of Gradient),不過可惜的是 HOG 3.x 後由於某些技術問題被取消了。Boosting 的中心思想在於「三個臭皮匠勝過一個諸葛亮」,主要是將大量的弱分類器(分類效果僅比隨機好一點)逐步訓練成一個較強的分類器,透過對每個弱分類器分類錯誤的部份持續投入學習,最後形成一個超強的分類器。在機器學習中,有很多分類器便應用了 Boosting 的方法,例如 AdaBoostAdaptive Boosting)、Gradient Tree BoostingXGBoost 等, OpenCV 內建的 Cascade Classifier for Object Detection,正是應用了AdaBoost。而Android眼球追蹤是使用Cascade Classifier模型架構。

Cascade Classifier模型訓練

  1. Cascade Classifier模型訓練流程可參考作者:曾成訓(CH.TSENG)撰寫的【影像辨識】訓練貓臉偵測器

App程式架構介紹

程式架構圖(1)

1

detectors

EyeDetector

AI模型判斷眼睛位置

FaceDetector

AI模型判斷臉部位置

PupilDetector

OpenCV抓取瞳孔位置

 

util

CircleRegion

繪製圓形區域功能

SquareRegion

繪製方形區域功能

EyeTrackingProcesser

主要執行眼球追蹤程式碼

Frame

調整輸入畫面功能

FrontalCameraView

配置前鏡頭功能

MainActivity

主程式

 

raw

haarcascade_eye.xml

眼睛AI模型檔案

haarcascade_frontalface_alt2.xml

臉部AI模型檔案

 

App程式碼重點講解

AI模型判斷流程:

 

2

  1. loadClassifiers()函式主要功能為導入Cascade Classifier模型。(3)

 

3

  1. initialize()函式主要功能為將圖片做前處理調整至適當大小以利模型判斷。(4)

 

4

  1. detectMulitScale()函式主要功能為進行模型推論。(5) (6)

 

5

 

6

detectMulitScale()函式參數介紹:

image

待檢測圖片

objects

被檢測物體的矩形框向量組

scaleFactor

表示在前後兩次相繼的掃描中,搜索窗口的比例係數。默認1.1即每次搜索窗口依次擴大10%

minNeighbors

每個目標至少檢測到幾次以上,才可被認定是數據

flags

分類器參數不需設置,使用默認值即可。

minSize

設定搜尋的最小尺寸

maxSize

設定搜尋的最尺寸

 

判斷眼睛觀看方向流程:

 

7



  1. faceDetector.detect()函式主要功能為判斷是否有偵測到臉部。(8)

 

8

 

  1. eyeDetector.detect()函式主要功能為判斷是否有偵測到眼睛。(9)

 

9

 

  1. visualiseTracking()函式主要功能為判斷瞳孔中心點與眼睛中心點,並計算兩者差值是否大於10或小於-10,如果差值大於10代表看向右邊,差值小於-10代表看向左邊。(10)

 

10

 

  1. 圖11內程式碼為判斷左右邊計數器。

 

11

  1. 圖12內程式碼主要內容為將看左右邊資訊顯示於App上。

 

12

App顯示結果

Total time

總執行時間

Look left

看左邊次數

Look right

看右邊次數

runtime

運行時間

FPS

每秒幀數

 

 

13

 

 

14

結語

本篇博文使用的Cascade Classifier模型是屬於輕量化模型,運行速度快但準確度並非最佳。使用者可以依照Cascade Classifier模型訓練步驟增加訓練集或是提高訓練次數來提升模型準確度。

資料來源

  1. 【影像辨識】訓練貓臉偵測器
  2. Github - wiecz0r/AndroidEyeTracking

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論