ハール+のAdaBoostに基づく顔認識

A. 定義された
; 1項た画素結果を計算した後、特定の値、ベクトル、行列、多次元とすることができる
方法を区別する特定の機能の使用2:閾値判定を、
前記決定は、機械学習によって得られます。

II。ハールは、記載された特徴
ここに画像を挿入説明
ハール14使用可能な特徴テンプレートの全特徴
ここに画像を挿入説明
(黒と白の矩形によって定義された青色の背景画像を使用するフィーチャテンプレート表す表す)
:最初の式:(式はじめに黒-請求=白と仮定し、全100個の画像100画素、我々は10個の用いる特徴テンプレート、白色領域の黒領域の画素値の画素値を減算する10または100ピクセル、50個のピクセルの黒色領域、白色領域50個の画素、機能=白-黒前記全域=重量××重量+重いブラック)同じ2つの式を与えるために簡略化することができます

ここに画像を挿入説明
(図上記画像は100×100ピクセルで、上から下にトラバースされると選択された特性は、左から右への10×10ブロックの特性が要求されると、更なるステップを考慮する必要がある、すなわち1項スライドテンプレートと仮定します数ピクセル)

ここに画像を挿入説明
アルゴリズムを説明:1,2,3,4:フィーチャテンプレートは4つの部分に分かれていると仮定します。領域は1を表し、B 1及び領域2を表し、Cは、領域1と3を表し、Dは、2、3及び4領域を表します。我々は4の値を計算する必要がある場合は、次の式にAB-C + D = 1-1-2-1-3 + 1 + 2 + 3 + 4 = 4
このアルゴリズムの欠点:に必要とされる各画素について、計算前ポイントは一度トラバースされています

三. adaboost分类器
ここに画像を挿入説明
adaboost分类器的结构(分三级:强分类器、弱分类器、node节点)。一个adaboost由若干个强分类器组成,一个强分类器由若干个弱分类器组成,一个弱分类器由若干个Node节点组成。三层紧紧相扣。
1.分类器中各结构的介绍
强分类器:
①工作原理:假设该强分类器有三层,x1,x2,x3为计算得到的检测概率,阈值为t1,t2,t3,当x1>t1,x2>t2,x3>t3时,才认为该目标是我们需要的特征,即连续通过三个强分类器认为是目标
②作用:判决目标是否是特征,如判断目标是否是苹果
③一般规定每层中有15—20个强分类器
弱分类器:
①作用:计算强分类器的特征,即强分类器中的x1,x2,x3是由弱分类器计算得到的,eg.x2 = sum(y1,y2,y3)(PS:y是弱分类器的特征,x是强分类器的特征)
Node节点:
①定义:每一个node节点对应一个haar特征,一般规定有3个haar特征
②工作原理:每一个node节点计算接个都会得到一个z1,z2,z3,则Z = sum(z1,z2,z3)
2.adaboost分类器的工作原理
工作原理:将分类到的正样本逐步减弱,负样本逐步增强,层层迭代,多级分类。比如:一个训练集:苹果,苹果,苹果,香蕉,假设苹果是正样本,香蕉是负样本,第一轮分类后,检测概率分别为0.2,0.2,0.2,0.5,则下次再分类后变为0.1,0.1,0.1,0.8
3.分类器训练终止的条件
①设置迭代的次数
②设置检测概率的阈值
4.工作流程
第三层是Node节点,一般设3个Node节点,每个haar特征对应一个Node节点,会得到z1,z2,z3,则第三层的输出Z = sum(z1,z2,z3);来到第二层弱分类器,设置一个阈值T,当Z > T时,会得到y1,y2,y3,则第二层的输出X = sum(y1,y2,y3);来到第一层强分类器,设置一个阈值T1,若X > T1,则判定该特征是我们所需要的目标。
5.adaboost训练的步骤
①初始化数据权值分布,假设训练样本为:苹果、苹果、苹果、香蕉,对应的权值为:0.1、0.1、0.1、0.1
②遍历阈值 p 计算所有的误差概率,设其中最小误差概率minP,对应的权值为t
③计算权重的系数
④权重分布的更新,第一步中的训练样本的权重变成了:0.2、0.2、0.2、0.7
(若不满足训练的终止条件(迭代次数未达到或minP小于设定的阈值),则从步骤2开始,继续执行)

四. 小案例
步骤:
1.下载xml文件(从官网下载)

ここに画像を挿入説明
haarcascade_eyeファイルがアダブースト分類器良好なアイ認識のトレーニングを指し
haarcascade_frontalface_default良いトレーニングのAdaBoost分類器の認識を指し
2.ダウンロード画像JPG
、3ハールコンピューティング機能(このステップが省略され、OpenCVのが処理されて)ください画像の階調処理であり、すべての機能が必要とされているのでハールグレー画像を算出する
。4.検出:二つのパラメータ:目や顔
5.試験結果はトラバーサルを行う、正方形が描画を検出ボックスの
手順:
API:
CascadeClassifier:XMLファイルのダウンロード
detectMultiScale:パラメータ:グレースケール画像のスケーリング係数2. 3.ターゲットの大きさ、すなわち、検出された顔が少ない5つの画素以上であります

import cv2
#1.下载xml文件
face_xml = cv2.CascadeClassifier('E:\\pictures\\haarcascade_frontalface_default.xml')
eye_xml = cv2.CascadeClassifier('E:\\pictures\\haarcascade_eye.xml')
#2.下载人脸图像
img = cv2.imread('E:\\pictures\\8.jpg')
cv2.imshow('src',img)
#3.计算Haar特征
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#4.目标检测
faces = face_xml.detectMultiScale(gray,1.3,5)
#参数说明:1.灰度图片 2.缩放的系数 3.目标的大小,即检测的人脸不低于5个像素
print('face=',len(faces)) #打印当前人脸的个数
#5.画识别到的人脸的方框
for (x,y,w,h) in faces:
    cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) #绘制识别人脸的方框
    roi_face = gray[y:y+h,x:x+w] #感兴趣的人脸范围,灰度的人脸
    roi_color = img[y:y+h,x:x+w] #彩色的人脸
    #下面进行人脸上眼睛的识别
    eyes = eye_xml.detectMultiScale(roi_face) #参数为灰度图像
    print('eyes=',len(eyes)) #打印当前眼睛的个数
    #5.画识别到的眼睛的方框
    for (e_x,e_y,e_w,e_h) in eyes:
        cv2.rectangle(roi_color,(e_x,e_y),(e_x+e_w,e_y+e_h),(0,255,0),2)
cv2.imshow('dst',img)
cv2.waitKey(0)

出力:
ここに画像を挿入説明

公開された25元の記事 ウォンの賞賛0 ビュー442

おすすめ

転載: blog.csdn.net/qq_45445740/article/details/104493790