最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

超詳細(xì)注釋之OpenCV Haar級(jí)聯(lián)檢測(cè)器進(jìn)行面部檢測(cè)

 更新時(shí)間:2021年09月09日 16:53:23   作者:程序媛一枚~  
這篇文章主要介紹了OpenCV Haar級(jí)聯(lián)檢測(cè)器進(jìn)行面部檢測(cè),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

這篇博客將介紹如何使用預(yù)訓(xùn)練好的OpenCV Haar級(jí)聯(lián)人臉、眼睛、嘴部檢測(cè)器,并將它們應(yīng)用于圖片及實(shí)時(shí)視頻流的檢測(cè)。

人臉檢測(cè)結(jié)果是最穩(wěn)定和準(zhǔn)確的。不幸的是,在許多情況下,眼睛檢測(cè)和嘴巴檢測(cè)結(jié)果是不可用的——對(duì)于面部特征/部分提取,強(qiáng)烈建議使用python,dlib,OpenCV提取眼睛,鼻子,嘴唇及下頜,dlib的檢測(cè)要比眼睛Haar級(jí)聯(lián),嘴巴Haar級(jí)聯(lián)本身更穩(wěn)定,甚至更快。

Haar級(jí)聯(lián)算法是OpenCV最流行的目標(biāo)檢測(cè)算法,主要優(yōu)點(diǎn)是速度太快了,盡管許多算法(如HOG+線性SVM、SSDs、更快的R-CNN、YOLO等等)比Haar級(jí)聯(lián)算法更精確。但如果需要純粹的速度,就是無(wú)法打敗OpenCV的Haar cascades。

Haar Cascades尤其是在資源受限的設(shè)備中工作時(shí),當(dāng)無(wú)法使用更昂貴的計(jì)算對(duì)象檢測(cè)器時(shí),效果顯著。Haar級(jí)聯(lián)的缺點(diǎn)是容易出現(xiàn)假陽(yáng)性檢測(cè),應(yīng)用于推理/檢測(cè)時(shí)需要進(jìn)行參數(shù)調(diào)整。

1. 效果圖

Haar級(jí)聯(lián)檢測(cè)的效果如下:

可以看到圖中有固定大小的面在移動(dòng),就可以“訓(xùn)練”分類器來(lái)識(shí)別圖像的給定區(qū)域是否包含人臉。

在這里插入圖片描述

面部、眼睛、嘴部檢測(cè)效果圖如下:

在這里插入圖片描述

有時(shí)候會(huì)有假陽(yáng)性結(jié)果,如下圖:
可以看到檢測(cè)并不是最準(zhǔn)確的,臉部是準(zhǔn)確的,但嘴和眼睛級(jí)聯(lián)發(fā)生好幾個(gè)假陽(yáng)性。當(dāng)眨眼時(shí),有兩種情況發(fā)生:(1)眼睛區(qū)域不再被檢測(cè)到,或者(2)它被錯(cuò)誤地標(biāo)記為嘴巴,在許多幀中往往有多個(gè)嘴巴檢測(cè)結(jié)果。

在這里插入圖片描述

2. 原理

2.1 Haar級(jí)聯(lián)是什么?

Haar級(jí)聯(lián)檢測(cè)5個(gè)特征:邊緣特征、線特征、四角-矩形的特征,計(jì)算特征需要從黑色區(qū)域下的像素總和中減去白色區(qū)域下的像素總和。有趣的是,這些特征在人臉檢測(cè)中具有實(shí)際的重要性:

  • 眼睛區(qū)域往往比臉頰區(qū)域暗。
  • 鼻子區(qū)域比眼睛區(qū)域亮。

給定這五個(gè)矩形區(qū)域及其相應(yīng)的和差,就可以形成能夠?qū)θ四樀母鱾€(gè)部分進(jìn)行分類的特征。

Haar級(jí)聯(lián)的一些好處是,由于使用了積分圖像(也稱為求和面積表),它們?cè)谟?jì)算類似Haar的特征時(shí)非常快。通過(guò)使用AdaBoost算法,它們對(duì)特征選擇也非常有效。最重要的是,它們可以檢測(cè)圖像中的人臉,而不考慮人臉的位置或比例。

2.2 Haar級(jí)聯(lián)的問(wèn)題與局限性

Haar級(jí)聯(lián)檢測(cè)器的問(wèn)題與局限主要有3點(diǎn):

  1. 需要最有效的正面圖像的臉;
  2. 容易出現(xiàn)誤報(bào)——Viola-Jones算法可以在沒(méi)有人臉的情況下輕松報(bào)告圖像中的人臉;
  3. 調(diào)優(yōu)OpenCV檢測(cè)參數(shù)會(huì)非常乏味。有時(shí)可以檢測(cè)出圖像中的所有人臉,有時(shí)會(huì)(1)圖像的區(qū)域被錯(cuò)誤地分類為面部;(2)面部被完全遺漏時(shí)。

2.3 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è)上半身

還提供了其他經(jīng)過(guò)預(yù)訓(xùn)練的Haar級(jí)聯(lián),包括一個(gè)用于俄羅斯牌照,另一個(gè)用于貓臉檢測(cè)。

可以使用cv2.CascadeClassifer從磁盤加載預(yù)先訓(xùn)練好的Haar級(jí)聯(lián)檢測(cè)器:

detector = cv2.CascadeClassifier(path)

可以使用detectMultiScale對(duì)其進(jìn)行預(yù)測(cè):

 results = detector.detectMultiScale(
		   gray, scaleFactor=1.05, minNeighbors=5,
		   minSize=(30, 30), flags=cv2.CASCADE_SCALE_IMAGE)

3. 源碼

3.1 圖像檢測(cè)

# USAGE
# python opencv_haar_cascades_images.py --cascades cascades --image ml.jpg

# 導(dǎo)入必要的包
import argparse
import os  # 不同系統(tǒng)路徑分隔符

import cv2  # opencv綁定
import imutils

# 構(gòu)建命令行參數(shù)及解析
# --cascades 級(jí)聯(lián)檢測(cè)器的路徑
ap = argparse.ArgumentParser()
ap.add_argument("-c", "--cascades", type=str, default="cascades",
                help="path to input directory containing haar cascades")
ap.add_argument("-i", "--image", type=str, default="ml2.jpg",
                help="path to input image")
args = vars(ap.parse_args())

# 初始化字典,并保存Haar級(jí)聯(lián)檢測(cè)器名稱及文件路徑
detectorPaths = {
    "face": "haarcascade_frontalface_default.xml",
    "eyes": "haarcascade_eye.xml",
    "smile": "haarcascade_smile.xml",
}

# 初始化字典以保存多個(gè)Haar級(jí)聯(lián)檢測(cè)器
print("[INFO] loading haar cascades...")
detectors = {}

# 遍歷檢測(cè)器路徑
for (name, path) in detectorPaths.items():
    # 加載Haar級(jí)聯(lián)檢測(cè)器并保存到map
    path = os.path.sep.join([args["cascades"], path])
    detectors[name] = cv2.CascadeClassifier(path)

# 從磁盤讀取圖像,縮放,并轉(zhuǎn)換灰度圖
print(args['image'])
image = cv2.imread(args["image"])
image = imutils.resize(image, width=500)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 使用合適的Haar檢測(cè)器執(zhí)行面部檢測(cè)
faceRects = detectors["face"].detectMultiScale(
    gray, scaleFactor=1.05, minNeighbors=5, minSize=(30, 30),
    flags=cv2.CASCADE_SCALE_IMAGE)

# 遍歷檢測(cè)到的所有面部
for (fX, fY, fW, fH) in faceRects:
    # 提取面部ROI
    faceROI = gray[fY:fY + fH, fX:fX + fW]

    # 在面部ROI應(yīng)用左右眼級(jí)聯(lián)檢測(cè)器
    eyeRects = detectors["eyes"].detectMultiScale(
        faceROI, scaleFactor=1.1, minNeighbors=10,
        minSize=(15, 15), flags=cv2.CASCADE_SCALE_IMAGE)

    # 在面部ROI應(yīng)用嘴部檢測(cè)
    smileRects = detectors["smile"].detectMultiScale(
        faceROI, scaleFactor=1.1, minNeighbors=10,
        minSize=(15, 15), flags=cv2.CASCADE_SCALE_IMAGE)

    # 遍歷眼睛邊界框
    for (eX, eY, eW, eH) in eyeRects:
        # 繪制眼睛邊界框(紅色)
        ptA = (fX + eX, fY + eY)
        ptB = (fX + eX + eW, fY + eY + eH)
        cv2.rectangle(image, ptA, ptB, (0, 0, 255), 2)

    # 遍歷嘴部邊界框
    for (sX, sY, sW, sH) in smileRects:
        # 繪制嘴邊界框(藍(lán)色)
        ptA = (fX + sX, fY + sY)
        ptB = (fX + sX + sW, fY + sY + sH)
        cv2.rectangle(image, ptA, ptB, (255, 0, 0), 2)

    # 繪制面部邊界框(綠色)
    cv2.rectangle(image, (fX, fY), (fX + fW, fY + fH),
                  (0, 255, 0), 2)

# 展示輸出幀
cv2.imshow("image", image)
cv2.waitKey(0)
# 清理工作
cv2.destroyAllWindows()

3.2 實(shí)時(shí)視頻流檢測(cè)

# USAGE
# python opencv_haar_cascades.py --cascades cascades

# 導(dǎo)入必要的包
import argparse
import os  # 不同系統(tǒng)路徑分隔符
import time  # sleep 2秒

import cv2  # opencv綁定
import imutils
from imutils.video import VideoStream  # 訪問(wèn)網(wǎng)絡(luò)攝像頭

# 構(gòu)建命令行參數(shù)及解析
# --cascades 級(jí)聯(lián)檢測(cè)器的路徑
ap = argparse.ArgumentParser()
ap.add_argument("-c", "--cascades", type=str, default="cascades",
                help="path to input directory containing haar cascades")
args = vars(ap.parse_args())

# 初始化字典,并保存Haar級(jí)聯(lián)檢測(cè)器名稱及文件路徑
detectorPaths = {
    "face": "haarcascade_frontalface_default.xml",
    "eyes": "haarcascade_eye.xml",
    "smile": "haarcascade_smile.xml",
}

# 初始化字典以保存多個(gè)Haar級(jí)聯(lián)檢測(cè)器
print("[INFO] loading haar cascades...")
detectors = {}

# 遍歷檢測(cè)器路徑
for (name, path) in detectorPaths.items():
    # 加載Haar級(jí)聯(lián)檢測(cè)器并保存到map
    path = os.path.sep.join([args["cascades"], path])
    detectors[name] = cv2.CascadeClassifier(path)

# 初始化視頻流,允許攝像頭預(yù)熱2s
print("[INFO] starting video stream...")
vs = VideoStream(src=0).start()
time.sleep(2.0)

# 遍歷視頻流的每一幀
while True:
    # 獲取視頻流的每一幀,縮放,并轉(zhuǎn)換灰度圖
    frame = vs.read()
    frame = imutils.resize(frame, width=500)
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # 使用合適的Haar檢測(cè)器執(zhí)行面部檢測(cè)
    faceRects = detectors["face"].detectMultiScale(
        gray, scaleFactor=1.05, minNeighbors=5, minSize=(30, 30),
        flags=cv2.CASCADE_SCALE_IMAGE)

    # 遍歷檢測(cè)到的所有面部
    for (fX, fY, fW, fH) in faceRects:
        # 提取面部ROI
        faceROI = gray[fY:fY + fH, fX:fX + fW]

        # 在面部ROI應(yīng)用左右眼級(jí)聯(lián)檢測(cè)器
        eyeRects = detectors["eyes"].detectMultiScale(
            faceROI, scaleFactor=1.1, minNeighbors=10,
            minSize=(15, 15), flags=cv2.CASCADE_SCALE_IMAGE)

        # 在面部ROI應(yīng)用嘴部檢測(cè)
        smileRects = detectors["smile"].detectMultiScale(
            faceROI, scaleFactor=1.1, minNeighbors=10,
            minSize=(15, 15), flags=cv2.CASCADE_SCALE_IMAGE)

        # 遍歷眼睛邊界框
        for (eX, eY, eW, eH) in eyeRects:
            # 繪制眼睛邊界框(紅色)
            ptA = (fX + eX, fY + eY)
            ptB = (fX + eX + eW, fY + eY + eH)
            cv2.rectangle(frame, ptA, ptB, (0, 0, 255), 2)

        # 遍歷嘴部邊界框
        for (sX, sY, sW, sH) in smileRects:
            # 繪制嘴邊界框(藍(lán)色)
            ptA = (fX + sX, fY + sY)
            ptB = (fX + sX + sW, fY + sY + sH)
            cv2.rectangle(frame, ptA, ptB, (255, 0, 0), 2)

        # 繪制面部邊界框(綠色)
        cv2.rectangle(frame, (fX, fY), (fX + fW, fY + fH),
                      (0, 255, 0), 2)

    # 展示輸出幀
    cv2.imshow("Frame", frame)
    key = cv2.waitKey(1) & 0xFF
    # 按下‘q'鍵,退出循環(huán)
    if key == ord("q"):
        break

# 清理工作
cv2.destroyAllWindows()
vs.stop()

參考

 https://www.pyimagesearch.com/2021/04/12/opencv-haar-cascades/

到此這篇關(guān)于超詳細(xì)注釋之OpenCV Haar級(jí)聯(lián)檢測(cè)器進(jìn)行面部檢測(cè)的文章就介紹到這了,更多相關(guān)OpenCV Haar內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文搞懂Python的函數(shù)傳參機(jī)制

    一文搞懂Python的函數(shù)傳參機(jī)制

    最近寫了Python函數(shù)的功能,犯了一些錯(cuò)誤。所以本文主要和大家一起梳理下Python函數(shù)的傳參機(jī)制,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-07-07
  • PyCharm中如何直接使用Anaconda已安裝的庫(kù)

    PyCharm中如何直接使用Anaconda已安裝的庫(kù)

    這篇文章主要介紹了PyCharm中如何直接使用Anaconda已安裝的庫(kù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Python實(shí)現(xiàn)獲取sonarqube數(shù)據(jù)

    Python實(shí)現(xiàn)獲取sonarqube數(shù)據(jù)

    sonarqube是一款代碼分析的工具,可以對(duì)通過(guò)soanrScanner掃描后的數(shù)據(jù)傳遞給sonarqube進(jìn)行分析,本文為大家整理了Python獲取sonarqube數(shù)據(jù)的方法,需要的可以參考下
    2023-05-05
  • 如何利用Python分析出微信朋友男女統(tǒng)計(jì)圖

    如何利用Python分析出微信朋友男女統(tǒng)計(jì)圖

    這篇文章主要給大家介紹了關(guān)于如何利用Python分析出微信朋友男女統(tǒng)計(jì)圖的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧
    2019-01-01
  • opencv python 圖片讀取與顯示圖片窗口未響應(yīng)問(wèn)題的解決

    opencv python 圖片讀取與顯示圖片窗口未響應(yīng)問(wèn)題的解決

    這篇文章主要介紹了opencv python 圖片讀取與顯示圖片窗口未響應(yīng)問(wèn)題的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • 利用python GDAL庫(kù)讀寫geotiff格式的遙感影像方法

    利用python GDAL庫(kù)讀寫geotiff格式的遙感影像方法

    今天小編就為大家分享一篇利用python GDAL庫(kù)讀寫geotiff格式的遙感影像方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • Pandas數(shù)據(jù)清洗函數(shù)總結(jié)

    Pandas數(shù)據(jù)清洗函數(shù)總結(jié)

    本文主要介紹了Pandas數(shù)據(jù)清洗函數(shù)總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • python通過(guò)wxPython打開(kāi)一個(gè)音頻文件并播放的方法

    python通過(guò)wxPython打開(kāi)一個(gè)音頻文件并播放的方法

    這篇文章主要介紹了python通過(guò)wxPython打開(kāi)一個(gè)音頻文件并播放的方法,實(shí)例分析了wxPython操作音頻文件的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • python實(shí)現(xiàn)微信機(jī)器人: 登錄微信、消息接收、自動(dòng)回復(fù)功能

    python實(shí)現(xiàn)微信機(jī)器人: 登錄微信、消息接收、自動(dòng)回復(fù)功能

    這篇文章主要介紹了python實(shí)現(xiàn)微信機(jī)器人: 登錄微信、消息接收、自動(dòng)回復(fù)功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • python用opencv 圖像傅里葉變換

    python用opencv 圖像傅里葉變換

    這篇文章主要介紹了python用opencv 圖像傅里葉變換的方法,幫助大家更好的利用python處理圖片,感興趣的朋友可以了解下
    2021-01-01

最新評(píng)論

诸暨市| 安图县| 武宁县| 炉霍县| 华容县| 文安县| 封丘县| 鄂伦春自治旗| 兰考县| 隆安县| 手机| 天等县| 承德县| 鹤壁市| 溆浦县| 西藏| 棋牌| 通辽市| 长海县| 临朐县| 通城县| 米易县| 汨罗市| 黄陵县| 大新县| 乐平市| 巨鹿县| 永年县| 岳池县| 涟源市| 黎城县| 铜川市| 伊川县| 且末县| 澄迈县| 库车县| 阳信县| 宝应县| 云林县| 宁德市| 个旧市|