python opencv人臉識別

2021-10-03 22:04:34 字數 3206 閱讀 9034

從影象中提取出區域性特徵,用lbp這種方式提取出的特徵具有較低的維度。會發現影象的表達不受光照變化的影響。區域性二值模式的基本思想是通過比較畫素和它的鄰域歸納出影象的區域性構成。

以乙個畫素為中心,與其鄰域進行比較。如果中心畫素的灰度值大於它的鄰域,則將其賦值為1,否則為0.由此,每乙個畫素點最終會得到乙個二進位制數,例如11001111。因此,乙個8鄰域的畫素,最終會有2^8種組合,叫做區域性二值模式。

import cv2 as cv

import os

import numpy as np

import sklearn.preprocessing as sp

fd = cv.cascadeclassifier(

'face.xml'

)def

search_faces

(directory)

: directory = os.path.normpath(directory)

ifnot os.path.isdir(directory)

:raise ioerror(

"目錄不存在:"

+ directory)

faces =

for curdir,subdirs,files in os.walk(directory)

:#遍歷目錄

2]#獲得當前目錄名稱

if label not

in faces:

faces[label]=[

] faces[label]

return faces

train_faces = search_faces(

'faces/objects/training'

)codec = sp.labelencoder(

)#標籤編碼器

codec.fit(

list

(train_faces.keys())

)#轉換為編碼字典

train_x,train_y =

,[]for label,filenames in train_faces.items():

for filename in filenames:

image = cv.imread(filename)

gray = cv.cvtcolor(image,cv.color_bgr2gray)

#比minsize(畫素)還小的尺寸,忽略。

faces = fd.detectmultiscale(gray,

1.1,

3,minsize=

(100

,100))

#定位臉部

for l,t,w,h in faces:

)#外切臉部

[label])[

0])train_y = np.array(train_y)

model = cv.face.lbphfacerecognizer_create(

)#區域性二值模式直方圖人臉識別器

model.train(train_x,train_y)

#訓練模型

#以下模型測試/**

test_faces = search_faces(

'faces/objects/testing'

)test_x,test_y,test_img =,,

for label,filenames in test_faces.items():

for filename in filenames:

image = cv.imread(filename)

gray = cv.cvtcolor(image,cv.color_bgr2gray)

#比minsize(畫素)還小的尺寸,忽略。

faces = fd.detectmultiscale(gray,

1.1,

2,minsize=

(100

,100))

#定位臉部

for l,t,w,h in faces:

)#外切臉部

[label])[

0]) a,b =

int(w/2)

,int

(h/2

) cv.ellipse(image,

(l+a,t+b)

,(a,b),0

,0,360,(

255,0,

255),2

)test_y = np.array(test_y)

#輸出**結果

pred_test_y =

for face in test_x:

pred_code = model.predict(face)[0

]escape =

false

while

not escape:

for code,pred_code,image in

zip(test_y,pred_test_y,test_img)

: label,pred_label = codec.inverse_transform(

[code,pred_code]

) text =

'{} {} {}'

.format

(label,

'=='

if code == pred_code else

'!='

,pred_label)

cv.puttext(image,text,(20

,100

),cv.font_hershey_******x,1,

(255

,255

,255),

2)cv.imshow(

'recongnizing...'

,image)

if cv.waitkey(

1000)==

27:escape =

true

break

Python OpenCV人臉檢測

在 opencv根目錄 sources data haarcascades中提供了很多訓練好的分類器,我們使用haarcascade frontalface alt.xml分類器。haar cascade是paul viola和 michael jone在2001年,rapid object det...

python opencv 人臉檢測

pip install upgrade pip pip install opencv python pip install boost pip install cmake pip install dlibimport cv2 detector cv2.cascadeclassifier haarca...

python opencv 實現人臉檢測

可以用opencv 的庫函式來實現人臉檢測 coding utf 8 import numpy as np import cv2 import time import sys,getopt from video import create capture from common import clo...