国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

OpenCV筆記整理【人臉檢測之Harr級聯(lián)分類器&&dlib庫】

這篇具有很好參考價值的文章主要介紹了OpenCV筆記整理【人臉檢測之Harr級聯(lián)分類器&&dlib庫】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

1. 級聯(lián)分類器: OpenCV提供的級聯(lián)分類器有Harr、HOG、LBP這3種,這些分類器以XML文件保存,這里主要演示Harr檢測人臉(OpenCV提供的分類器不僅限于檢測人臉,還包括下表特征檢測,當(dāng)然OpenCV還支持訓(xùn)練自己的級聯(lián)分類器,這里不做說明。。。)。
opencv分類器有哪些,OpenCV,opencv,筆記,計算機(jī)視覺

2. 函數(shù)介紹:

object = cv2.CascadeClassifier(filename) 加載分類器

  • object:分類器對象。
  • filename:分類器xml路徑+文件名。

object= faceCascade.detectMultiScale(img,scaleFactor,minNeighbors,minSize,maxSize) 檢測對象

  • object:返回值(目標(biāo)對象的x、y、w、h信息)。
  • scaleFactor:縮放比例。
  • minNeighbors:檢測目標(biāo)的相鄰矩形的最小個數(shù)。默認(rèn)為3,表示滿足3個以上的檢測標(biāo)記才會認(rèn)為是人臉。該值越大越準(zhǔn)確,但是會導(dǎo)致一些人臉檢測不到。
  • minSize:目標(biāo)最小尺寸,小于會被忽略。

上代碼:檢測圖片中的人臉

import cv2
# 1 原始圖像處理
image = cv2.imread('model1.jpg')
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

# 2 加載分類器
faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

# 3 人臉檢測
faces = faceCascade.detectMultiScale(
    gray,
    scaleFactor = 1.01,
    minNeighbors = 15,
    minSize = (8,8))
    
# 4 打印輸出的實(shí)現(xiàn)
print("發(fā)現(xiàn){0}張人臉!".format(len(faces)))
print("其位置分別是:")
print(faces)

# 5 遍歷檢測對象
for(x,y,w,h) in faces:
  cv2.rectangle(image,(x,y),(x+w,y+h),(0,255,0),2) # 繪制矩形(x、y、w、h)
  
cv2.imshow("result",image)
cv2.waitKey(0)
cv2.destroyAllWindows()

運(yùn)行:
opencv分類器有哪些,OpenCV,opencv,筆記,計算機(jī)視覺
上代碼:通過攝像頭檢測人臉

import cv2
# 1 加載分類器
faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

# 2 處理攝像頭視頻
# 初始化攝像頭
cap=cv2.VideoCapture(0,cv2.CAP_DSHOW)
# 處理每一幀
while True:
    # 讀取一幀
    ret,image=cap.read()
    image=cv2.flip(image,1)
    # 沒有讀到,直接退出
    if ret is None:
        break
    # 灰度化(彩色BGR-->灰度Gray)    
    gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
    
    # 人臉檢測
    faces = faceCascade.detectMultiScale(gray,
                                         scaleFactor = 1.1,
                                         minNeighbors = 5,
                                         minSize = (5,5))
    # 處理每個人臉
    for(x,y,w,h) in faces:
      cv2.rectangle(image,(x,y),(x+w,y+h),(0,255,0),2) 
      # 提取人臉?biāo)趨^(qū)域,單通道形式
      roi=gray[y:y+h,x:x+w] #image[起點(diǎn),終點(diǎn)]

    # 顯示結(jié)果
    cv2.imshow("dect",image)
    cv2.imshow("roi",cutFace)
    key=cv2.waitKey(25)
    if key==27:
        break
cap.release()
cv2.destroyAllWindows()

運(yùn)行:
opencv分類器有哪些,OpenCV,opencv,筆記,計算機(jī)視覺

3. dlib庫檢測人臉: 免費(fèi)的開源庫,雖然測試速度不及前面的Harr級聯(lián)分類器,但是準(zhǔn)確率非常高。

  • 檢測人臉:
    detector=dlib.get_frontal_face_detector() 構(gòu)造dlib檢測器
    faces=detector(img,n) 檢測人臉
    faces:人臉集合。
    n:上采樣次數(shù),圖像會變大,但是準(zhǔn)確率會提高,這個參數(shù)對速度影響極大。

上代碼:

import cv2
import dlib

# dlib初始化
detector=dlib.get_frontal_face_detector()
# 讀取原始圖像
img=cv2.imread("imgs/3.jpg")
# 使用人臉檢測器返回檢測到的人臉框
faces=detector(img,1)

# 遍歷人臉集合
for face in faces:
    # 獲取人臉框的坐標(biāo)
    x1=face.left()
    y1=face.top()
    x2=face.right()
    y2=face.bottom()
    # 繪制人臉框
    cv2.rectangle(img,(x1,y1),(x2,y2),(0,255,0),2)
# 顯示捕獲到的各個人臉框
cv2.imshow("result",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

運(yùn)行:
opencv分類器有哪些,OpenCV,opencv,筆記,計算機(jī)視覺

  • 檢測關(guān)鍵點(diǎn):
    detector=dlib.get_frontal_face_detector() 構(gòu)造dlib檢測器
    faces=detector(img,n) 檢測人臉
    predictor = dlib.shape_predictor(dat) 加載預(yù)測
    dat:模型文件
    predictor:預(yù)測器對象,返回68個臉部關(guān)鍵點(diǎn)。

上代碼:

import numpy as np
import cv2
import dlib
# 讀取圖像
srcImg = cv2.imread("model.jpg")
img=srcImg.copy()
# Step 1:構(gòu)造人臉檢測器(dlib初始化)
detector = dlib.get_frontal_face_detector()
# Step 2:檢測人臉框(使用人臉檢測器返回檢測到的人臉框)
faces = detector(img, 1)
# Step 3:載入模型(加載預(yù)測器)
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")

index=0
# Step 4:獲取每一張臉的關(guān)鍵點(diǎn)(實(shí)現(xiàn)檢測)
for face in faces:
    index+=1
    # 檢測當(dāng)前人臉的關(guān)鍵點(diǎn)
    shape=predictor(img, face)

    # 下面對這句代碼進(jìn)行了分解
    # landmarks = np.matrix([[p.x, p.y] for p in shape.parts()])
    
    # 通過shape.parts()方法遍歷關(guān)鍵點(diǎn)
    for i, p in enumerate(shape.parts()): 
        print('face:'+str(index)+' predictor:'+str(i)+' x:'+str(p.x)+' y:'+str(p.y))
        # 將關(guān)鍵點(diǎn)的x,y放入一個2列68行的矩陣中,需要知道的是,人臉的每個特征對應(yīng)的關(guān)鍵點(diǎn)索引是固定的,比如36-42描述的右眼。
        landmarks = np.matrix([[p.x, p.y]])
        
        # Step 5:繪制每一張臉的關(guān)鍵點(diǎn)(繪制shape中的每個點(diǎn))
        for idx, point in enumerate(landmarks):
            # 當(dāng)前關(guān)鍵的坐標(biāo):[0,1]表示第0行第1個元素
            pos = (point[0, 0], point[0, 1])
            # 針對當(dāng)前關(guān)鍵點(diǎn),繪制一個實(shí)心圓
            cv2.circle(img, pos, 2, color=(0, 255, 0), thickness=-1)
            # 字體
            font = cv2.FONT_HERSHEY_SIMPLEX
            # 利用cv2.putText輸出1-68,索引序號加1,顯示時從1開始。
            cv2.putText(img, str(i + 1), pos, font, 0.4, (255, 255, 255), 1, cv2.LINE_AA)
            
# 繪制結(jié)果

cv2.imshow("img", img)
cv2.imshow("src", srcImg)
cv2.waitKey()
cv2.destroyAllWindows()

opencv分類器有哪些,OpenCV,opencv,筆記,計算機(jī)視覺

  • 勾勒五官輪廓:
    關(guān)鍵點(diǎn)檢測實(shí)現(xiàn)步驟和前面一樣,唯一不同的是:

臉部輪廓、眉毛這種起點(diǎn)和終點(diǎn)分開的區(qū)域,首先找到輪廓所在的關(guān)鍵點(diǎn),然后使用點(diǎn)到點(diǎn)之間繪制直線的方式繪制邊緣。
臉部眼睛、嘴巴這種起點(diǎn)和終點(diǎn)最終匯聚在一起的區(qū)域,首先找到輪廓所在的關(guān)鍵點(diǎn),然后將這一組關(guān)鍵點(diǎn)坐標(biāo)作為輪廓數(shù)組傳入convexHull()函數(shù)進(jìn)行凸包繪制。


凸包:找到圖形最外側(cè)的端點(diǎn),然后將其連接起來。
凸包示例代碼:

import cv2

img = cv2.imread("shape2.png")  # 讀取原始圖像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 轉(zhuǎn)為灰度圖像
ret, binary = cv2.threshold(gray, 127, 225, cv2.THRESH_BINARY)  # 二值化閾值處理
# 檢測圖像中出現(xiàn)的所有輪廓
contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

hull = cv2.convexHull(contours[0])  # 獲取輪廓的凸包
cv2.drawContours(img, [hull], -1, (0, 255, 0), 2)

cv2.imshow("img", img)  # 顯示圖像
cv2.waitKey()  # 按下任何鍵盤按鍵后
cv2.destroyAllWindows()  # 釋放所有窗體

凸包運(yùn)行結(jié)果:
opencv分類器有哪些,OpenCV,opencv,筆記,計算機(jī)視覺

勾勒五官輪廓代碼:

import numpy as np
import dlib
import cv2

# 模型初始化
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")

# 自定義函數(shù)drawLine,將指定的點(diǎn)連接起來
def drawLine(start,end):
    # 獲取點(diǎn)集
    pts = shape[start:end]
    # 遍歷點(diǎn)集,將各個點(diǎn)用直線連接起來
    for l in range(1, len(pts)):
        ptA = tuple(pts[l - 1])
        ptB = tuple(pts[l])
        cv2.line(image, ptA, ptB, (0, 255, 0), 2)

# 自定義函數(shù),將指定的點(diǎn)構(gòu)成一個凸包、繪制其輪廓
def drawConvexHull(start,end):
    # 注意,凸包用來繪制眼睛、嘴
    # 眼睛、嘴也可以用drawLine通過直線繪制
    # 但是,使用凸包繪制輪廓,更方便進(jìn)行顏色填充等設(shè)置
    # 獲取某個特定五官的點(diǎn)集
    Facial = shape[start:end]
    # 針對該五官構(gòu)造凸包
    mouthHull = cv2.convexHull(Facial)
    # 把凸包輪廓繪制出來
    cv2.drawContours(image, [mouthHull], -1, (0, 255, 0), 2)

# 讀取圖像
srcImg=cv2.imread("model2.jpg")
image=srcImg.copy()
# 色彩空間轉(zhuǎn)換彩色(BGR)-->灰度(Gray)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 獲取人臉
faces = detector(gray, 3)
# 對檢測到的rects,逐個遍歷
for face in faces:
    # 針對臉部的關(guān)鍵點(diǎn)進(jìn)行處理,構(gòu)成坐標(biāo)(x,y)形式
    shape = np.matrix([[p.x, p.y] for p in predictor(gray, face).parts()])

    # ============使用函數(shù)drawConexHull繪制嘴、眼睛=========================
    #獲取嘴部的關(guān)鍵點(diǎn)集(在整個臉部索引中,其索引范圍為[48,60],不包含61)
    drawConvexHull(48,59)
    # 嘴內(nèi)部
    drawConvexHull(60,68)
    # 左眼
    drawConvexHull(42,48)
    # 右眼
    drawConvexHull(36,42)

    # ============使用函數(shù)drawLine繪制臉頰、眉毛、鼻子=========================
    # 將shape轉(zhuǎn)換為np.array
    shape=np.array(shape)
    # 繪制臉頰,把臉頰的各個關(guān)鍵點(diǎn)(索引0-16,不含17)用線條連接起來
    drawLine(0,17)
    # 繪制左眉毛,通過將關(guān)鍵點(diǎn)連接實(shí)現(xiàn)(索引18-21)
    drawLine(17,22)
    # 繪制右眉毛(索引23-26)
    drawLine(22,27)
    # 鼻子(索引27-36)
    drawLine(27,36)

cv2.imshow("Frame", image)
cv2.imshow("Src",srcImg)
cv2.waitKey()
cv2.destroyAllWindows()

運(yùn)行:
opencv分類器有哪些,OpenCV,opencv,筆記,計算機(jī)視覺


以上,如有錯誤,歡迎指正批評!文章來源地址http://www.zghlxwxcb.cn/news/detail-815580.html

到了這里,關(guān)于OpenCV筆記整理【人臉檢測之Harr級聯(lián)分類器&&dlib庫】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 人臉檢測進(jìn)階:使用 dlib、OpenCV 和 Python 檢測面部標(biāo)記

    人臉檢測進(jìn)階:使用 dlib、OpenCV 和 Python 檢測面部標(biāo)記

    3、我們將看一些將面部標(biāo)記檢測應(yīng)用于圖像的結(jié)果。 什么是面部標(biāo)記? =================================================================== 人臉標(biāo)記點(diǎn)檢測是形狀預(yù)測問題的一個子集。給定一個輸入圖像(通常是一個指定感興趣對象的ROI),形狀預(yù)測器嘗試沿形狀定位感興趣的關(guān)鍵點(diǎn)。 在

    2024年04月13日
    瀏覽(32)
  • 通過Dlib和opencv實(shí)現(xiàn)人臉識別和活體檢測

    通過Dlib和opencv實(shí)現(xiàn)人臉識別和活體檢測

    目錄 一、準(zhǔn)備工作 1.1 需要的庫 1.2準(zhǔn)備需要的文件和圖片 1.3?測試程序 二、人臉識別開發(fā) 2.1 錄入自己的人臉信息 2.2 提取錄入的人臉特征 2.3 實(shí)時捕獲人臉并進(jìn)行識別 三、活體檢測 3.1 眨眼檢測 3.2 張嘴檢測 3.3 搖頭檢測 下面這些是我突發(fā)奇想想做來玩玩,就在github上下載了

    2023年04月08日
    瀏覽(24)
  • 使用opencv和dlib庫(C++代碼)實(shí)現(xiàn)人臉活體檢測(眨眼、張嘴、搖頭檢測)

    使用opencv和dlib庫(C++代碼)實(shí)現(xiàn)人臉活體檢測(眨眼、張嘴、搖頭檢測)

    本文章使用opencv和dlib庫,使用C++代碼實(shí)現(xiàn)了人臉活體檢測,包括眨眼檢測、張嘴檢測以及搖頭檢測,可以對靜態(tài)圖片和活體進(jìn)行有效區(qū)分。 dlib是一個開源的C++機(jī)器學(xué)習(xí)庫,它提供了一系列用于圖像處理、人臉檢測、人臉識別、物體檢測、圖像標(biāo)注等功能的算法和工具。dli

    2024年04月14日
    瀏覽(113)
  • OpenCV、Dlib 和深度學(xué)習(xí)中的各種人臉檢測方法與性能比較--包含C++ 和 Python 代碼實(shí)現(xiàn)

    文末附基于Python和C++兩種方式實(shí)現(xiàn)的測試代碼下載鏈接 在本教程中,我們將討論 OpenCV、Dlib 和深度學(xué)習(xí)中的各種人臉檢測方法,并對這些方法進(jìn)行定量比較。我們將為以下面部檢測器共享 C++ 和 Python 代碼: OpenCV 中的 Haar 級聯(lián)人臉檢測器 OpenCV 中基于深度學(xué)習(xí)的人臉檢測器。

    2024年02月10日
    瀏覽(21)
  • 【OpenCV】車輛識別 目標(biāo)檢測 級聯(lián)分類器 C++ 案例實(shí)現(xiàn)

    【OpenCV】車輛識別 目標(biāo)檢測 級聯(lián)分類器 C++ 案例實(shí)現(xiàn)

    前言 一、目標(biāo)檢測技術(shù) 二、樣本采集工作原理 三、創(chuàng)建自己的級聯(lián)分類器 Step1:準(zhǔn)備好樣本圖像 Step2:環(huán)境配置(OpenCV win10) Step3:設(shè)置路徑 Step4:實(shí)現(xiàn)樣本數(shù)據(jù)采集? Step5:實(shí)現(xiàn)樣本數(shù)據(jù)訓(xùn)練 Step6:生成級聯(lián)分類器文件? 四、案例實(shí)現(xiàn) Step1:灰度處理 Step2:二次壓縮 Ste

    2024年02月05日
    瀏覽(25)
  • OpenCV級聯(lián)分類器識別車輛實(shí)踐筆記

    OpenCV級聯(lián)分類器識別車輛實(shí)踐筆記

    基于Haar特征的級聯(lián)分類器的目標(biāo)檢測是Paul Viola和Michael Jones在2001年的論文中提出的一種有效的目標(biāo)檢測方法。這是一種基于機(jī)器學(xué)習(xí)的方法,從大量的正面和負(fù)面圖像中訓(xùn)練級聯(lián)函數(shù)。然后用它來檢測其他圖像中的物體。 Haar特征是一種反映圖像的灰度變化的,像素分模塊求

    2024年02月06日
    瀏覽(17)
  • 基于OpenCV的haar分類器實(shí)現(xiàn)人臉檢測分析

    基于OpenCV的haar分類器實(shí)現(xiàn)人臉檢測分析

    今天來分享兩個基于OpenCV實(shí)現(xiàn)的識別人臉的不同應(yīng)用。 1、Haar分類器介紹 ??Haar分類器是一種基于 機(jī)器學(xué)習(xí) 的目標(biāo)檢測算法,它使用Haar特征描述圖像中的目標(biāo)。Haar特征是 基于圖像亮度的局部差異 計算得出的,可以用來描述目標(biāo)的邊緣、角落和線條等特征。 使用Haar分類器

    2024年02月03日
    瀏覽(26)
  • 利用OpenCV Haar分類器檢測人臉(python實(shí)現(xiàn))

    利用OpenCV Haar分類器檢測人臉(python實(shí)現(xiàn))

    人臉檢測(Face Detection)是當(dāng)前目標(biāo)檢測領(lǐng)域中一項非常熱門的研究領(lǐng)域,它是人臉識別與人臉表情分析的核心,本篇文章介紹采用OpenCV中Haar分類器算法對圖片中人臉的檢測,并通過矩形框講人臉與眼睛位置框選與標(biāo)記. Haar級聯(lián)分類器是一種基于特征提取和機(jī)器學(xué)習(xí)的對象檢

    2024年02月05日
    瀏覽(21)
  • 使用OpenCV工具包成功實(shí)現(xiàn)人臉檢測與人臉識別,包括傳統(tǒng)視覺和深度學(xué)習(xí)方法(附完整代碼,吐血整理......)

    使用OpenCV工具包成功實(shí)現(xiàn)人臉檢測與人臉識別,包括傳統(tǒng)視覺和深度學(xué)習(xí)方法(附完整代碼,吐血整理......)

    要實(shí)現(xiàn)人臉識別功能,首先要進(jìn)行人臉檢測,判斷出圖片中人臉的位置,才能進(jìn)行下一步的操作。 參考鏈接: 1、OpenCV人臉檢測 2、【OpenCV-Python】32.OpenCV的人臉檢測和識別——人臉檢測 3、【youcans 的圖像處理學(xué)習(xí)課】23. 人臉檢測:Haar 級聯(lián)檢測器 4、OpenCV實(shí)戰(zhàn)5:LBP級聯(lián)分類器

    2024年02月12日
    瀏覽(25)
  • 計算機(jī)視覺:使用dlib實(shí)現(xiàn)人臉檢測

    計算機(jī)視覺:使用dlib實(shí)現(xiàn)人臉檢測

    Dlib是一個廣泛使用的開源庫,在計算機(jī)視覺和機(jī)器學(xué)習(xí)領(lǐng)域具有重要影響。它是由Davis King在2002年開發(fā),主要用C++語言編寫,但也提供了Python接口。Dlib結(jié)合了高效的算法和易用性,使其成為學(xué)術(shù)界和工業(yè)界的熱門選擇。 多樣的機(jī)器學(xué)習(xí)算法:Dlib包含豐富的機(jī)器學(xué)習(xí)算法,如

    2024年04月28日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包