日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

Pyhton,OpenCV对象检测之——Haar级联人脸及眼睛检测

發(fā)布時(shí)間:2023/11/27 生活经验 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Pyhton,OpenCV对象检测之——Haar级联人脸及眼睛检测 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Pyhton,OpenCV對(duì)象檢測(cè)之——Haar級(jí)聯(lián)人臉及眼睛檢測(cè)

    • 1. 效果圖
    • 2. 原理
      • 2.1 Haar人臉檢測(cè)原理
      • 2.2 Haar級(jí)聯(lián)預(yù)訓(xùn)練的模型
    • 3. 源碼
      • 3.1 圖像面部及眼睛檢測(cè)
      • 3.2 視頻幀面部及眼睛檢測(cè)
    • 參考

這篇博客將介紹如何使用預(yù)訓(xùn)練的模型——基于Haar特征的級(jí)聯(lián)檢測(cè)器進(jìn)行人臉及眼睛檢測(cè)。

使用基于 Haar 特征的級(jí)聯(lián)分類器的對(duì)象檢測(cè)是一種有效的對(duì)象檢測(cè)方法。它是一種基于機(jī)器學(xué)習(xí)的方法,其中級(jí)聯(lián)函數(shù)是從大量正面和負(fù)面圖像中訓(xùn)練出來的,然后使用它來檢測(cè)圖像中的對(duì)象。

1. 效果圖

單人面部及眼睛檢測(cè)效果圖如下:

多人面部及眼睛檢測(cè)效果圖如下:

2. 原理

2.1 Haar人臉檢測(cè)原理

使用人臉檢測(cè)。最初該算法需要大量的正面圖像(人臉圖像)和負(fù)面圖像(沒有人臉的圖像)來訓(xùn)練分類器。然后從中提取特征。對(duì)于每個(gè)特征,它會(huì)找到將人臉分類為正面和負(fù)面的最佳閾值。但很明顯會(huì)有錯(cuò)誤或錯(cuò)誤分類。

每一次選擇錯(cuò)誤率最小的特征,這意味著它們是對(duì)人臉和非人臉圖像進(jìn)行最佳分類的特征。

人臉即便是 24*24 的圖像,也有近160000個(gè)特征,Haar級(jí)聯(lián)分類器將特征降到了6000個(gè)。并且引入了分類級(jí)聯(lián)器的概念。不是在一個(gè)窗口上應(yīng)用所有 6000 個(gè)特征,而是將特征分組到分類器的不同階段并逐一應(yīng)用。 (通常前幾個(gè)階段將包含非常少的功能)。如果窗口在第一階段失敗,則丟棄它。如果通過,則應(yīng)用第二階段的功能并繼續(xù)該過程。通過所有階段的窗口是面部區(qū)域。

Haar 檢測(cè)器有 6000 多個(gè)特征,分為 38 個(gè)階段,前五個(gè)階段有 1、10、25、25 和 50 個(gè)特征。 平均而言,每個(gè)子窗口會(huì)評(píng)估 6000 多個(gè)特征中的 10 個(gè)特征。

2.2 Haar級(jí)聯(lián)預(yù)訓(xùn)練的模型

OpenCV庫(kù)維護(hù)一個(gè)預(yù)先訓(xùn)練好的Haar級(jí)聯(lián)庫(kù)。包括:

  • haarcascade_frontalface_default.xml:檢測(cè)面部
  • haarcascade_eye.xml:檢測(cè)左眼和右眼
  • haarcascade_smile.xml:檢測(cè)面部是否存在嘴部
  • haarcascade_eye_tree_eyeglasses.xml:檢測(cè)是否帶墨鏡🕶
  • haarcascade_frontalcatface.xml:檢測(cè)貓臉
  • haarcascade_frontalcatface_extended.xml:檢測(cè)貓臉延伸
  • haarcascade_frontalface_alt.xml:檢測(cè)貓臉屬性
  • haarcascade_frontalface_alt_tree.xml
  • haarcascade_frontalface_alt2.xml
  • haarcascade_fullbody.xml:檢測(cè)全身
  • haarcascade_lefteye_2splits.xml:檢測(cè)左眼
  • haarcascade_licence_plate_rus_16stages.xml:檢測(cè)證件
  • haarcascade_lowerbody.xml:檢測(cè)下半身
  • haarcascade_profileface.xml
  • haarcascade_righteye_2splits.xml:檢測(cè)右眼
  • haarcascade_russian_plate_number.xml:檢測(cè)俄羅斯字母車牌號(hào)
  • haarcascade_upperbody.xml:檢測(cè)上半身

3. 源碼

3.1 圖像面部及眼睛檢測(cè)

# Haar級(jí)聯(lián)檢測(cè)器對(duì)臉、眼睛👀進(jìn)行檢測(cè)import cv2# 加載預(yù)訓(xùn)練的臉、眼睛檢測(cè)XML模型
face_cascade = cv2.CascadeClassifier('haarcascades/haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascades/haarcascade_eye.xml')# 加載圖像或者視頻幀(灰度圖)
img = cv2.imread('images/rbyy.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 檢測(cè)臉
faces = face_cascade.detectMultiScale(gray, 1.3, 5)# 遍歷每一張臉,并繪制面部ROI為藍(lán)色
for (x, y, w, h) in faces:cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)roi_gray = gray[y:y + h, x:x + w]roi_color = img[y:y + h, x:x + w]# 在面部進(jìn)行眼睛的檢測(cè)eyes = eye_cascade.detectMultiScale(roi_gray)# 繪制眼睛ROI為綠色for (ex, ey, ew, eh) in eyes:cv2.rectangle(roi_color, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2)cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

3.2 視頻幀面部及眼睛檢測(cè)

# 獲取網(wǎng)絡(luò)攝像頭,并捕獲幀,檢測(cè)面部及眼睛👀,并且計(jì)算輪廓的中心及外接圓半徑,在面部繪制紫色圓圈,在眼睛上繪制藍(lán)色圓圈
import argparseimport cv2# 檢測(cè)面部并顯示
def detectAndDisplay(frame):frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)frame_gray = cv2.equalizeHist(frame_gray)# 檢測(cè)面部faces = face_cascade.detectMultiScale(frame_gray)for (x, y, w, h) in faces:center = (x + w // 2, y + h // 2)frame = cv2.ellipse(frame, center, (w // 2, h // 2), 0, 0, 360, (255, 0, 255), 4)faceROI = frame_gray[y:y + h, x:x + w]# 在每一張臉上,檢測(cè)眼睛👀eyes = eyes_cascade.detectMultiScale(faceROI)for (x2, y2, w2, h2) in eyes:eye_center = (x + x2 + w2 // 2, y + y2 + h2 // 2)radius = int(round((w2 + h2) * 0.25))frame = cv2.circle(frame, eye_center, radius, (255, 0, 0), 4)cv2.imshow('Capture - Face detection', frame)parser = argparse.ArgumentParser(description='Code for Cascade Classifier tutorial.')
parser.add_argument('--face_cascade', help='Path to face cascade.',default='haarcascades/haarcascade_frontalface_alt.xml')
parser.add_argument('--eyes_cascade', help='Path to eyes cascade.',default='haarcascades/haarcascade_eye_tree_eyeglasses.xml')
parser.add_argument('--camera', help='Camera divide number.', type=int, default=0)
args = parser.parse_args()face_cascade_name = args.face_cascade
eyes_cascade_name = args.eyes_cascadeface_cascade = cv2.CascadeClassifier()
eyes_cascade = cv2.CascadeClassifier()# 1. 加載級(jí)聯(lián)檢測(cè)器(面部及眼睛👀檢測(cè))
if not face_cascade.load(face_cascade_name):print('--(!)Error loading face cascade')exit(0)
if not eyes_cascade.load(eyes_cascade_name):print('--(!)Error loading eyes cascade')exit(0)camera_device = args.camera# 2.讀取視頻幀
cap = cv2.VideoCapture(camera_device)
if not cap.isOpened:print('--(!)Error opening video capture')exit(0)while True:ret, frame = cap.read()if frame is None:print('--(!) No captured frame -- Break!')breakdetectAndDisplay(frame)# 按下ESC鍵,退出~if cv2.waitKey(10) == 27:break

參考

  • https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_objdetect/py_face_detection/py_face_detection.html#face-detection

總結(jié)

以上是生活随笔為你收集整理的Pyhton,OpenCV对象检测之——Haar级联人脸及眼睛检测的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。