機器學習實踐系列之8 人眼定位

2021-07-27 02:34:11 字數 1784 閱讀 3030

一. 人眼檢測

opencv自帶的人眼檢測,**及教程都已比較普及,這裡不再囉嗦,訓練模板直接 load已經訓練好的檔案:

haarcascade_eye_tree_eyeglasses.xml,直接看**:

/* linolzhang 2014.10

基於opencv的人眼檢測 - cascade

*/#include "opencv2/highgui/highgui.hpp"

#include "opencv2/objdetect/objdetect.hpp"

#pragma comment(lib,"opencv_core2410.lib")

#pragma comment(lib,"opencv_objdetect2410.lib")

#pragma comment(lib,"opencv_highgui2410.lib")

using namespace cv;

int main(int argc, char** argv)

{ mat src;

if(argc != 2)

src = imread("1.png");

else

src = imread(argv[1]);

cascadeclassifier eye_cascade;

eye_cascade.load("haarcascade_eye_tree_eyeglasses.xml");

std::vectoreyes;

eye_cascade.detectmultiscale( src, eyes, 1.1, 2, 0|cv_haar_scale_image, size(30, 30) );

for(int i=0; i檢測效果(基本能夠滿足需求):

二. 中心點定位

在確定人眼區域後,第二個目標就是眼球定位,眼球定位能夠確定眼睛的中心位置,這在眼睛跟蹤上非常有意義,一般來說,vr中基於眼動跟蹤的控制,adas上用於疲勞檢測都需要用到眼睛的中心點資訊。

能夠直觀想到的方法就是 hough變換,這裡有乙個假設,眼睛的正中心是多個同心圓的圓心。

正常情況下,該方案是work的,但實際上,由於眼球的部分遮擋(小眼睛)、光線反射、噪點 等問題會導致識別率下降。

作者提出的方法主要基於下面兩個假設:

1. 梯度方向

眼睛正中心 為梯度方向的匯聚交點;

2. 對稱性

當然,也可以採用區域性二值特徵等紋理描述方式,這在一定情況下有效,對於反射比較重的情況下差異其實不大,因此,灰度特徵一般都能夠衡量。

三. 眨眼檢測

通常的眨眼檢測方法有以下幾種:

1. 基於閾值判斷該閾值通常是時間,一段時間內無法檢測到眼球,認為眼睛處於閉的狀態;

也有演算法基於眼睛特徵點的 寬高比,當低於乙個閾值時,認為眼睛為閉,當然也有人說這種方法不準確,有很多人「眯縫眼」。

2. 根據特徵點運動

由於眼睛狀態的閉合瞬間很難**捉到,因此大部分的眨眼過程都表現為特徵點的瞬間運動,我們稱為眼皮跳,這種情況下的運動通常是有規律的,根據研究人員觀察,上眼皮下移、下眼皮上移,都是有規律可循。

3. 疲勞特徵

疲勞在眨眼情況下的表現是,上眼皮的緩慢下移以及眼睛中心的下移(可能伴隨低頭),當然眨眼檢測只是疲勞的乙個方面的特徵。

機器學習實踐系列之15 OpenCV之MSER

最大穩定極值區域mser maximally stable extremal regions 是一種類似分水嶺的演算法,目前主要用於影象分割和車牌區域檢測。2012年由matas等人提出。mser基本原理是對一幅灰度影象 灰度值為0 255 取閾值進行二值化處理,閾值從0到255依次遞增。在得到的所...

NPL實踐系列 4 傳統機器學習

原理 基於樸素貝葉斯公式,比較出後驗概率的最大值來進行分類,後驗概率的計算是由先驗概率與類條件概率的乘積得出,先驗概率和類條件概率要通過訓練資料集得出,即為樸素貝葉斯分類模型,將其儲存為中間結果,測試文件進行分類時呼叫這個中間結果得出後驗概率。模型和訓練 樸素貝葉斯分類器是一種有監督學習,常見有三種...

機器學習實踐之特徵工程

特徵工程是機器學習任務中非常核心的部分,特徵工程質量的好壞直接影響著模型訓練結果的好壞。常見的特徵工程可以分為特徵抽象 特徵重要性評估 特徵衍生和特徵降維等幾個方面。特徵抽象是指將原始資料抽象成演算法 或模型 可以理解的資料。針對不同的資料型別,主要有如下特徵抽象方法 1 時間戳。主要是針對具有鮮明...