python基于opencv實(shí)現(xiàn)人臉識別
將opencv中haarcascade_frontalface_default.xml文件下載到本地,我們調(diào)用它輔助進(jìn)行人臉識別。
識別圖像中的人臉
#coding:utf-8
import cv2 as cv
# 讀取原始圖像
img = cv.imread('face.png')
# 調(diào)用熟悉的人臉分類器 識別特征類型
# 人臉 - haarcascade_frontalface_default.xml
# 人眼 - haarcascade_eye.xml
# 微笑 - haarcascade_smile.xml
face_detect = cv.CascadeClassifier('haarcascade_frontalface_default.xml')
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
# 檢查人臉 按照1.1倍放到 周圍最小像素為5
face_zone = face_detect.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5)
print ('識別人臉的信息:',face_zone)
# 繪制矩形和圓形檢測人臉
for x, y, w, h in face_zone:
# 繪制矩形人臉區(qū)域 thickness表示線的粗細(xì)
cv.rectangle(img, pt1=(x, y), pt2=(x+w, y+h),color=[0,0,255], thickness=2)
# 繪制圓形人臉區(qū)域 radius表示半徑
cv.circle(img, center=(x+w//2, y+h//2), radius=w//2, color=[0,255,0], thickness=2)
# 設(shè)置圖片可以手動調(diào)節(jié)大小
cv.namedWindow("Easmount-CSDN", 0)
# 顯示圖片
cv.imshow("Easmount-CSDN", img)
# 等待顯示 設(shè)置任意鍵退出程序
cv.waitKey(0)
cv.destroyAllWindows()

注意,此算法只能檢測正臉,并且任何算法都有一定的準(zhǔn)確率。如上圖所示,圖像中有一處被錯誤地檢測為人臉。
CascadeClassifier:
是OpenCV中人臉檢測的一個級聯(lián)分類器,既可以使用Haar,也可以使用LBP特征。以Haar特征分類器為基礎(chǔ)的對象檢測技術(shù)是一種非常有效的技術(shù)。它是基于機(jī)器學(xué)習(xí)且使用大量的正負(fù)樣本訓(xùn)練得到分類器。
Haar-like矩形特征:
是用于物體檢測的數(shù)字圖像特征。這類矩形特征模板由兩個或多個全等的黑白矩形相鄰組合而成,而矩形特征值是白色矩形的灰度值的和減去黑色矩形的灰度值的和,矩形特征對一些簡單的圖形結(jié)構(gòu),如線段、邊緣比較敏感。如果把這樣的矩形放在一個非人臉區(qū)域,那么計(jì)算出的特征值應(yīng)該和人臉特征值不一樣,所以這些矩形就是為了把人臉特征量化,以區(qū)分人臉和非人臉。
LBP:
是一種特征提取方式,能提取出圖像的局部的紋理特征,最開始的LBP算子是在3X3窗口中,取中心像素的像素值為閥值,與其周圍八個像素點(diǎn)的像素值比較,若像素點(diǎn)的像素值大于閥值,則此像素點(diǎn)被標(biāo)記為1,否則標(biāo)記為0。這樣就能得到一個八位二進(jìn)制的碼,轉(zhuǎn)換為十進(jìn)制即LBP碼,于是得到了這個窗口的LBP值,用這個值來反映這個窗口內(nèi)的紋理信息。LBPH是在原始LBP上的一個改進(jìn),在opencv支持下我們可以直接調(diào)用函數(shù)直接創(chuàng)建一個LBPH人臉識別的模型。比如:cv.face.LBPHFaceRecognizer_create()。
detectMultiScale:
檢測人臉?biāo)惴?,其參?shù):
– image表示要檢測的輸入圖像
– objects表示檢測到的人臉目標(biāo)序列
– scaleFactor表示每次圖像尺寸減小的比例
– minNeighbors表示每一個目標(biāo)至少要被檢測到3次才算是真的目標(biāo),因?yàn)橹車南袼睾筒煌拇翱诖笮《伎梢詸z測到人臉
– minSize表示目標(biāo)的最小尺寸
– maxSize表示目標(biāo)的最大尺寸
識別視頻中的人臉
將視頻中每一幀圖像取出,進(jìn)行圖像人臉識別,標(biāo)記識別到的人臉,顯示每一幀圖像。
#coding:utf-8
import cv2 as cv
import numpy as np
# 加載視頻
cap = cv.VideoCapture('wang.mp4')
# 調(diào)用熟悉的人臉分類器 識別特征類型
# 人臉 - haarcascade_frontalface_default.xml
# 人眼 - haarcascade_eye.xm
# 微笑 - haarcascade_smile.xml
face_detect = cv.CascadeClassifier('haarcascade_frontalface_default.xml')
while True:
# 讀取視頻片段
flag, frame = cap.read()
if flag == False:
break
# 灰度處理
gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
# 檢查人臉 按照1.1倍放到 周圍最小像素為5
face_zone = face_detect.detectMultiScale(gray, scaleFactor = 1.5, minNeighbors = 8)
# 繪制矩形和圓形檢測人臉
for x, y, w, h in face_zone:
cv.rectangle(frame, pt1 = (x, y), pt2 = (x+w, y+h), color = [0,0,255], thickness=2)
cv.circle(frame, center = (x + w//2, y + h//2), radius = w//2, color = [0,255,0], thickness = 2)
# 顯示圖片
cv.imshow('video', frame)
# 設(shè)置退出鍵和展示頻率
if ord('q') == cv.waitKey(25):
break
# 釋放資源
cv.destroyAllWindows()
cap.release()

識別攝像頭中的人臉
#coding:utf-8
import cv2 as cv
# 識別電腦攝像頭并打開
cap = cv.VideoCapture(0)
# 調(diào)用熟悉的人臉分類器 識別特征類型
# 人臉 - haarcascade_frontalface_default.xml
# 人眼 - haarcascade_eye.xm
# 微笑 - haarcascade_smile.xml
face_detect = cv.CascadeClassifier('haarcascade_frontalface_default.xml')
while True:
# 讀取視頻片段
flag, frame = cap.read()
if flag == False:
break
# 灰度處理
gray = cv.cvtColor(frame, code=cv.COLOR_BGR2GRAY)
# 檢查人臉 按照1.1倍放到 周圍最小像素為5
face_zone = face_detect.detectMultiScale(gray, scaleFactor = 1.1, minNeighbors = 5)
# 繪制矩形和圓形檢測人臉
for x, y, w, h in face_zone:
cv.rectangle(frame, pt1 = (x, y), pt2 = (x+w, y+h), color = [0,0,255], thickness=2)
cv.circle(frame, center = (x + w//2, y + h//2), radius = w//2, color = [0,255,0], thickness = 2)
# 顯示圖片
cv.imshow('video', frame)
# 設(shè)置退出鍵和展示頻率
if ord('q') == cv.waitKey(40):
break
# 釋放資源
cv.destroyAllWindows()
cap.release()
以上就是python基于opencv實(shí)現(xiàn)人臉識別的詳細(xì)內(nèi)容,更多關(guān)于python opencv 人臉識別的資料請關(guān)注腳本之家其它相關(guān)文章!
- 手把手教你利用opencv實(shí)現(xiàn)人臉識別功能(附源碼+文檔)
- springboot集成opencv實(shí)現(xiàn)人臉識別功能的詳細(xì)步驟
- java+opencv實(shí)現(xiàn)人臉識別功能
- python opencv人臉識別考勤系統(tǒng)的完整源碼
- python實(shí)現(xiàn)圖片,視頻人臉識別(opencv版)
- PyQt5+Caffe+Opencv搭建人臉識別登錄界面
- OpenCV + MFC實(shí)現(xiàn)簡單人臉識別
- opencv實(shí)現(xiàn)簡單人臉識別
- Java OpenCV4.0.0實(shí)現(xiàn)實(shí)時人臉識別
- 基于opencv和pillow實(shí)現(xiàn)人臉識別系統(tǒng)(附demo)
相關(guān)文章
基于MATLAB和Python實(shí)現(xiàn)MFCC特征參數(shù)提取
這篇文章主要介紹了基于MATLAB和Python實(shí)現(xiàn)MFCC特征參數(shù)提取,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
Python代碼顯得Pythonic(區(qū)別于其他語言的寫法)
這篇文章主要介紹了Python代碼顯得Pythonic(區(qū)別于其他語言的寫法),對于字符串連接,相比于簡單的+,更pythonic的做法是盡量使用%操作符或者format函數(shù)格式化字符串,感興趣的小伙伴和小編一起進(jìn)入文章了解更詳細(xì)相關(guān)知識內(nèi)容吧2022-02-02
python中windows鏈接linux執(zhí)行命令并獲取執(zhí)行狀態(tài)的問題小結(jié)
這篇文章主要介紹了python中windows鏈接linux執(zhí)行命令并獲取執(zhí)行狀態(tài),由于工具是pyqt寫的所以牽扯到用python鏈接linux的問題,這里記錄一下一些碰到的問題,需要的朋友可以參考下2022-11-11
Python如何做點(diǎn)擊率數(shù)據(jù)預(yù)測
這篇文章主要介紹了Python做點(diǎn)擊率數(shù)據(jù)預(yù)測,在這個場景中,我們通常需要根據(jù)用戶的歷史行為、物品的特征、上下文信息等因素來預(yù)測用戶點(diǎn)擊某個特定物品(如廣告、推薦商品)的概率,需要的朋友可以參考下2024-06-06
Keras實(shí)現(xiàn)支持masking的Flatten層代碼
這篇文章主要介紹了Keras實(shí)現(xiàn)支持masking的Flatten層代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06
教你使用Python pypinyin庫實(shí)現(xiàn)漢字轉(zhuǎn)拼音
今天,發(fā)現(xiàn)了一個好玩兒的庫,叫做 “pypinyin ”,用于幫助我們實(shí)現(xiàn)漢字轉(zhuǎn)拼音,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05
Python+OpenCV內(nèi)置方法實(shí)現(xiàn)行人檢測
OpenCV附帶一個預(yù)訓(xùn)練的HOG+線性SVM模型,可用于在圖像和視頻流中執(zhí)行行人檢測。本文我們將使用Opencv自帶的模型實(shí)現(xiàn)對視頻流中的行人檢測。感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2021-12-12
基于PyQt4和PySide實(shí)現(xiàn)輸入對話框效果
這篇文章主要為大家詳細(xì)介紹了基于PyQt4和PySide實(shí)現(xiàn)輸入對話框效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-02-02
Python寫一個簡單上課點(diǎn)名系統(tǒng)(附源碼)
這篇文章主要介紹了Python寫一個簡單上課點(diǎn)名系統(tǒng),文章圍繞Python得性概念資料寫一個簡的得上課點(diǎn)名系統(tǒng),并附上詳細(xì)的代碼即過程總結(jié),需要的朋友可以參考一下,希望對你有所幫助2021-11-11

