人臉識別 Haar特徵

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/kun1280437633/article/details/86231845 

# 1 load xml 2 load jpg 3 haar gray 4 detect 5 draw
import cv2
import numpy as np
# load xml 1 file name
face_xml = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_xml = cv2.CascadeClassifier('haarcascade_eye.xml')
# load jpg
img = cv2.imread('face.jpg')
cv2.imshow('src',img)
# haar gray
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# detect faces 1 data 2 scale 3 5
faces = face_xml.detectMultiScale(gray,1.3,5)
print('face=',len(faces))
# draw
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]
    # 1 gray
    eyes = eye_xml.detectMultiScale(roi_face)
    print('eye=',len(eyes))
    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)

#adaboost 訓練
# 1 初始化數據權值分佈
# 蘋果 蘋果 蘋果 香蕉
# 0.1 0.1 0.1 0.1 
# 2 遍歷閾值 p
# minP t 
# 3 G1(x)
# 4 權值分佈 update
# 0.2 0.2 0.2 0.7
## 訓練終止條件:1 for count 2 p
#haar + adaboost face
# 蘋果 蘋果 蘋果 香蕉
# 0.1  0.1 0.1 0.5
# 訓練終止條件:1 for count 2 p
# 1 分類器的結構 2 adaboost 計算過程 3 xml 文件結構
# haar> T1 and haar>T2  2個強分類器15-20 

# 1 分類器的結構
# 3個強分類器 1 x1 t1 2 x2 t2 3 x3 t3
# x1>t1 and x2>t2 and x3>t3  目標-》蘋果
# 作用:判決
# 弱分類器結構
# 作用:計算強分類器特徵x1 x2 x3
# x2 = sum(y1,y2,y3)

# y1 弱分類器特徵
# node
# 3個haar-》 node
# 1node haar1 > nodeT1   z1 = a1
# 1node haar1 < nodeT1   z1 = a2
# Z = sum(z1,z2,z3)>T y1 = AA
# Z = sum(z1,z2,z3)<T y1 = BB

# haar->Node z1 z2 z3 Z=sum(z1,z2,z3)
# Z>T y1 y2 y3
# x = sum(y1,y2,y3) > T1 obj
#haar 1 什麼是haar?特徵 = 像素 運算 -》結果 (具體值 向量 矩陣 多維)
# 2 如何利用特徵 區分目標? 閾值判決 
# 3 得到判決?機器學習 
# 1 特徵 2 判決 3 得到判決

# 公式推導 1  -2
# 特徵 = 整個區域*權重1 + 黑色*權重2 = (黑+白)*1+黑*(-2)=
# = 黑+白-2黑 = 白-黑

# 1 haar模版 上下 左右 image size 模版 size 100*100 10*10 100次 step = 10
# 1 100*100 2 10*10 3 step 10 4 模版1
# 模版 滑動 縮放 10*10 11*11 20級

# 舉例 1080*720 step2 10*10 
# 計算量 = 14模版*20縮放*(1080/2*720/2)*(100點+- ) = 50-100億
# (50-100)*15 = 1000億次

# A 1 B 1 2 C 1 3 D 1 2 3 4
# 4 = A-B-C+D = 1+1+2+3+4 - 1 -2 - 1 -3 = 4 (3+-)

 

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