溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么在python中使用opencv實現(xiàn)一個人臉識別功能

發(fā)布時間:2021-01-05 14:38:09 來源:億速云 閱讀:236 作者:Leah 欄目:開發(fā)技術(shù)

本篇文章給大家分享的是有關(guān)怎么在python中使用opencv實現(xiàn)一個人臉識別功能,小編覺得挺實用的,因此分享給大家學(xué)習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

識別圖像中的人臉

#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表示線的粗細
  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()

怎么在python中使用opencv實現(xiàn)一個人臉識別功能

注意,此算法只能檢測正臉,并且任何算法都有一定的準確率。如上圖所示,圖像中有一處被錯誤地檢測為人臉。

CascadeClassifier:

是OpenCV中人臉檢測的一個級聯(lián)分類器,既可以使用Haar,也可以使用LBP特征。以Haar特征分類器為基礎(chǔ)的對象檢測技術(shù)是一種非常有效的技術(shù)。它是基于機器學(xué)習且使用大量的正負樣本訓(xùn)練得到分類器。

Haar-like矩形特征:

是用于物體檢測的數(shù)字圖像特征。這類矩形特征模板由兩個或多個全等的黑白矩形相鄰組合而成,而矩形特征值是白色矩形的灰度值的和減去黑色矩形的灰度值的和,矩形特征對一些簡單的圖形結(jié)構(gòu),如線段、邊緣比較敏感。如果把這樣的矩形放在一個非人臉區(qū)域,那么計算出的特征值應(yīng)該和人臉特征值不一樣,所以這些矩形就是為了把人臉特征量化,以區(qū)分人臉和非人臉。

LBP:

是一種特征提取方式,能提取出圖像的局部的紋理特征,最開始的LBP算子是在3X3窗口中,取中心像素的像素值為閥值,與其周圍八個像素點的像素值比較,若像素點的像素值大于閥值,則此像素點被標記為1,否則標記為0。這樣就能得到一個八位二進制的碼,轉(zhuǎn)換為十進制即LBP碼,于是得到了這個窗口的LBP值,用這個值來反映這個窗口內(nèi)的紋理信息。LBPH是在原始LBP上的一個改進,在opencv支持下我們可以直接調(diào)用函數(shù)直接創(chuàng)建一個LBPH人臉識別的模型。比如:cv.face.LBPHFaceRecognizer_create()。

detectMultiScale:

檢測人臉算法,其參數(shù):
– image表示要檢測的輸入圖像
– objects表示檢測到的人臉目標序列
– scaleFactor表示每次圖像尺寸減小的比例
– minNeighbors表示每一個目標至少要被檢測到3次才算是真的目標,因為周圍的像素和不同的窗口大小都可以檢測到人臉
– minSize表示目標的最小尺寸
– maxSize表示目標的最大尺寸

識別視頻中的人臉

將視頻中每一幀圖像取出,進行圖像人臉識別,標記識別到的人臉,顯示每一幀圖像。

#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()

怎么在python中使用opencv實現(xiàn)一個人臉識別功能

識別攝像頭中的人臉

#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實現(xiàn)一個人臉識別功能,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI