欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

opencv基于Haar人臉檢測和眼睛檢測

 更新時間:2021年09月05日 17:28:26   作者:過去的時候  
這篇文章主要為大家詳細介紹了opencv基于Haar人臉檢測和眼睛檢測,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文為大家分享了opencv基于Haar人臉檢測和眼睛檢測的具體代碼,供大家參考,具體內(nèi)容如下

在這里,我們將進行人臉檢測。最初,該算法需要大量正圖像(面部圖像)和負圖像(無面部圖像)來訓(xùn)練分類器。然后,我們需要從中提取特征。為此,使用下圖所示的Haar功能。它們就像我們的卷積核。每個特征都是通過從黑色矩形下的像素總和中減去白色矩形下的像素總和而獲得的單個值。

現(xiàn)在,每個內(nèi)核的所有可能大小和位置都用于計算許多功能。(試想一下它需要多少計算?即使是一個24x24的窗口也會產(chǎn)生超過160000個特征)。對于每個特征計算,我們需要找到白色和黑色矩形下的像素總和。為了解決這個問題,他們引入了整體形象。無論您的圖像有多大,它都會將給定像素的計算減少到僅涉及四個像素的操作。很好,不是嗎?它使事情變得超快。

但是在我們計算的所有這些功能中,大多數(shù)都不相關(guān)。例如,考慮下圖。第一行顯示了兩個良好的功能。選擇的第一個特征似乎著眼于眼睛區(qū)域通常比鼻子和臉頰區(qū)域更暗的性質(zhì)。選擇的第二個功能依賴于眼睛比鼻梁更黑的屬性。但是,將相同的窗口應(yīng)用于臉頰或其他任何地方都是無關(guān)緊要的。那么,我們?nèi)绾螐?6萬多個功能中選擇最佳功能?它是由Adaboost實現(xiàn)的。

為此,我們將所有功能應(yīng)用于所有訓(xùn)練圖像。對于每個功能,它會找到最佳的閾值,該閾值會將人臉分為正面和負面。顯然,會出現(xiàn)錯誤或分類錯誤。我們選擇錯誤率最低的特征,這意味著它們是對人臉和非人臉圖像進行最準確分類的特征。(此過程并非如此簡單。在開始時,每個圖像的權(quán)重均相等。在每次分類后,錯誤分類的圖像的權(quán)重都會增加。然后執(zhí)行相同的過程。將計算新的錯誤率。還要計算新的權(quán)重。繼續(xù)進行此過程,直到達到所需的精度或錯誤率或找到所需的功能數(shù)量為止。

最終分類器是這些弱分類器的加權(quán)和。之所以稱為弱分類,是因為僅憑它不能對圖像進行分類,而是與其他分類一起形成強分類器。該論文說,甚至200個功能都可以提供95%的準確度檢測。他們的最終設(shè)置具有大約6000個功能。(想象一下,從160000多個功能減少到6000個功能。這是很大的收獲)。

因此,現(xiàn)在您拍攝一張照片。取每個24x24窗口。向其應(yīng)用6000個功能。檢查是否有臉。哇…這不是效率低下又費時嗎?是的。作者對此有一個很好的解決方案。

在圖像中,大多數(shù)圖像是非面部區(qū)域。因此,最好有一種簡單的方法來檢查窗口是否不是面部區(qū)域。如果不是,請一次性丟棄它,不要再次對其進行處理。相反,應(yīng)將重點放在可能有臉的區(qū)域。這樣,我們將花費更多時間檢查可能的面部區(qū)域。

為此,他們引入了級聯(lián)分類器的概念。不是將所有6000個功能部件應(yīng)用到一個窗口中,而是將這些功能部件分組到不同階段的分類器中,并一一應(yīng)用。(通常前幾個階段將包含很少的功能)。如果窗口在第一階段失敗,則將其丟棄。我們不考慮它的其余功能。如果通過,則應(yīng)用功能的第二階段并繼續(xù)該過程。經(jīng)過所有階段的窗口是一個面部區(qū)域。這個計劃怎么樣!

作者的檢測器具有6000多個特征,具有38個階段,在前五個階段具有1、10、25、25和50個特征。(上圖中的兩個功能實際上是從Adaboost獲得的最佳兩個功能)。根據(jù)作者的說法,每個子窗口平均評估了6000多個特征中的10個特征。
首先,創(chuàng)建一個cv :: CascadeClassifier并使用cv :: CascadeClassifier :: load方法加載必要的XML文件。然后,使用cv :: CascadeClassifier :: detectMultiScale方法完成檢測,該方法返回檢測到的臉部或眼睛的邊界矩形

from __future__ import print_function
import cv2 as cv
import argparse
def detectAndDisplay(frame):
    frame_gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)#灰度處理
    frame_gray = cv.equalizeHist(frame_gray)#直方圖均衡化
    #-- Detect faces
    faces = face_cascade.detectMultiScale(frame_gray)
    for (x,y,w,h) in faces:
        center = (x + w//2, y + h//2)#獲取方框中心位置
        frame = cv.ellipse(frame, center, (w//2, h//2), 0, 0, 360, (255, 0, 255), 4)#畫橢圓
        faceROI = frame_gray[y:y+h,x:x+w]#獲取感興趣的區(qū)域,即人臉矩形
        #-- In each face, detect eyes
        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 = cv.circle(frame, eye_center, radius, (255, 0, 0 ), 4)
    cv.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_cascade
face_cascade = cv.CascadeClassifier()
eyes_cascade = cv.CascadeClassifier()
#-- 1. Load the cascades
if not face_cascade.load(cv.samples.findFile(face_cascade_name)):
    print('--(!)Error loading face cascade')
    exit(0)
if not eyes_cascade.load(cv.samples.findFile(eyes_cascade_name)):
    print('--(!)Error loading eyes cascade')
    exit(0)
camera_device = args.camera
#-- 2. Read the video stream
cap = cv.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!')
        break
    detectAndDisplay(frame)
    if cv.waitKey(10) == 27:
        break

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python如何繪制疫情圖

    python如何繪制疫情圖

    這篇文章主要介紹了python如何繪制疫情圖,幫助大家理解和學(xué)習(xí)用python繪制圖像,感興趣的朋友可以了解下
    2020-09-09
  • python冒泡排序算法的實現(xiàn)代碼

    python冒泡排序算法的實現(xiàn)代碼

    這篇文章主要介紹了python冒泡排序算法的實現(xiàn)代碼,大家參考使用
    2013-11-11
  • Pandas數(shù)據(jù)類型之category的用法

    Pandas數(shù)據(jù)類型之category的用法

    Pandas中有一種特殊的數(shù)據(jù)類型叫做category.它表示的是一個類別,一般用在統(tǒng)計分類中,比如性別,血型,分類,級別等等.有點像java中的enum,今天給大家詳細講解一下category的用法,需要的朋友可以參考下
    2021-06-06
  • 最新整理Python中的type和object的示例詳解

    最新整理Python中的type和object的示例詳解

    這篇文章主要介紹了最新整理Python中的type和object的示例詳解,最主要,是理解type和object的區(qū)別與聯(lián)系,本文結(jié)合示例代碼給大家講解的非常詳細,需要的朋友可以參考下
    2022-12-12
  • 詳解pandas中Series()和DataFrame()的區(qū)別與聯(lián)系

    詳解pandas中Series()和DataFrame()的區(qū)別與聯(lián)系

    本文主要介紹了詳解pandas中Series()和DataFrame()的區(qū)別與聯(lián)系,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • Python多進程并發(fā)(multiprocessing)用法實例詳解

    Python多進程并發(fā)(multiprocessing)用法實例詳解

    這篇文章主要介紹了Python多進程并發(fā)(multiprocessing)用法,實例分析了multiprocessing模塊進程操作的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • Python多進程multiprocessing、進程池用法實例分析

    Python多進程multiprocessing、進程池用法實例分析

    這篇文章主要介紹了Python多進程multiprocessing、進程池用法,結(jié)合實例形式分析了Python多進程multiprocessing、進程池相關(guān)概念、原理、用法及操作注意事項,需要的朋友可以參考下
    2020-03-03
  • Python模擬用戶登錄驗證

    Python模擬用戶登錄驗證

    這篇文章主要為大家詳細介紹了Python模擬用戶登錄驗證的相關(guān)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • python文檔字符串(函數(shù)使用說明)使用詳解

    python文檔字符串(函數(shù)使用說明)使用詳解

    這篇文章主要介紹了python文檔字符串(函數(shù)使用說明)使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • Python如何識別 MySQL 中的冗余索引

    Python如何識別 MySQL 中的冗余索引

    冗余索引也是一個非常重要的巡檢目,表中索引過多,會導(dǎo)致表空間占用較大,索引的數(shù)量與表的寫入速度與索引數(shù)成線性關(guān)系(微秒級),如果發(fā)現(xiàn)有冗余索引,建議立即審核刪除,這篇文章主要介紹了Python 識別 MySQL 中的冗余索引,需要的朋友可以參考下
    2022-10-10

最新評論