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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

人脸识别案例:【实战】opencv人脸检测+Haar特征分类器

發布時間:2024/7/5 pytorch 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 人脸识别案例:【实战】opencv人脸检测+Haar特征分类器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 基礎

我們使用機器學習的方法完成人臉檢測,首先需要大量的正樣本圖像(面部圖像)和負樣本圖像(不含面部的圖像)來訓練分類器。我們需要從其中提取特征。下圖中的 Haar 特征會被使用,就像我們的卷積核,每一個特征是一 個值,這個值等于黑色矩形中的像素值之后減去白色矩形中的像素值之和。

Haar特征值反映了圖像的灰度變化情況。例如:臉部的一些特征能由矩形特征簡單的描述,眼睛要比臉頰顏色要深,鼻梁兩側比鼻梁顏色要深,嘴巴比周圍顏色要深等。

Haar特征可用于于圖像任意位置,大小也可以任意改變,所以矩形特征值是矩形模版類別、矩形位置和矩形大小這三個因素的函數。故類別、大小和位置的變化,使得很小的檢測窗口含有非常多的矩形特征。

得到圖像的特征后,訓練一個決策樹構建的adaboost級聯決策器來識別是否為人臉。

2.實現

OpenCV中自帶已訓練好的檢測器,包括面部,眼睛,貓臉等,都保存在XML文件中,我們可以通過以下程序找到他們:

import cv2 as cv print(cv.__file__)

找到的文件如下所示:

那我們就利用這些文件來識別人臉,眼睛等。檢測流程如下:

  • 讀取圖片,并轉換成灰度圖

  • 實例化人臉和眼睛檢測的分類器對象

    # 實例化級聯分類器 classifier =cv.CascadeClassifier( "haarcascade_frontalface_default.xml" ) # 加載分類器 classifier.load('haarcascade_frontalface_default.xml')
  • 進行人臉和眼睛的檢測

    rect = classifier.detectMultiScale(gray, scaleFactor, minNeighbors, minSize,maxsize)

    參數:

    • Gray: 要進行檢測的人臉圖像

    • scaleFactor: 前后兩次掃描中,搜索窗口的比例系數

    • minneighbors:目標至少被檢測到minNeighbors次才會被認為是目標

    • minsize和maxsize: 目標的最小尺寸和最大尺寸

  • 將檢測結果繪制出來就可以了。

  • 主程序如下所示:

    import cv2 as cv import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = [u'SimHei'] plt.rcParams['axes.unicode_minus'] = False# 1.以灰度圖的形式讀取圖片 img = cv.imread("img/tly.jpg") gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)# 2. 實例化OpenCV人臉和眼睛識別的分類器 # 2.1 實例化級聯分類器 face_cas = cv.CascadeClassifier( "C:\\ProgramData\\Anaconda3\\envs\\py37\\Lib\\site-packages\\cv2\\data\\haarcascade_frontalface_default.xml" ) # 2.1 加載分類器 face_cas.load('C:\\ProgramData\\Anaconda3\\envs\\py37\\Lib\\site-packages\\cv2\\data\\haarcascade_frontalface_default.xml') # 2.2 實例化級聯分類器 eyes_cas = cv.CascadeClassifier("C:\\ProgramData\\Anaconda3\\envs\\py37\\Lib\\site-packages\\cv2\\data\\haarcascade_eye.xml") # 2.2 加載分類器 eyes_cas.load("C:\\ProgramData\\Anaconda3\\envs\\py37\\Lib\\site-packages\\cv2\\data\\haarcascade_eye.xml")# 3.調用識別人臉 """rect = classifier.detectMultiScale(gray, scaleFactor, minNeighbors, minSize,maxsize) Gray: 要進行檢測的人臉圖像scaleFactor: 前后兩次掃描中,搜索窗口的比例系數minneighbors:目標至少被檢測到minNeighbors次才會被認為是目標minsize和maxsize: 目標的最小尺寸和最大尺寸 """ faceRects = face_cas.detectMultiScale(gray=gray, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32)) for faceRect in faceRects:x, y, w, h = faceRect# 框出人臉cv.rectangle(img, (x, y), (x + h, y + w),(0,255,0), 3)# 4.在識別出的人臉中進行眼睛的檢測roi_color = img[y:y+h, x:x+w]roi_gray = gray[y:y+h, x:x+w]eyes = eyes_cas.detectMultiScale(roi_gray)for (ex,ey,ew,eh) in eyes:cv.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2) # 5. 檢測結果的繪制 plt.figure(figsize=(8,6),dpi=100) plt.imshow(img[:,:,::-1]),plt.title('檢測結果') plt.xticks([]), plt.yticks([]) plt.show()

    結果:



    此處報錯:
    cv2.error: OpenCV(3.4.5) C:\projects\opencv-python\opencv\modules\objdetect\src\cascadedetect.cpp:1698: error: (-215:Assertion failed) !empty() in function ‘cv::CascadeClassifier::detectMultiScale’
    解決方案:

    【在虛擬環境下完美解決】1698: error: (-215:Assertion failed) empty() in function cv::CascadeClassifier_李大狗的讀研日記-CSDN博客https://blog.csdn.net/qq_39237205/article/details/122085915https://blog.csdn.net/qq_39237205/article/details/122085915



    我們也可在視頻中對人臉進行檢測:

    import cv2 as cv import matplotlib.pyplot as plt # 1.讀取視頻 cap = cv.VideoCapture("movie.mp4") # 2.在每一幀數據中進行人臉識別 while(cap.isOpened()):ret, frame = cap.read()if ret==True:gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)# 3.實例化OpenCV人臉識別的分類器 face_cas = cv.CascadeClassifier( "haarcascade_frontalface_default.xml" ) face_cas.load('haarcascade_frontalface_default.xml')# 4.調用識別人臉 faceRects = face_cas.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32)) for faceRect in faceRects: x, y, w, h = faceRect # 框出人臉 cv.rectangle(frame, (x, y), (x + h, y + w),(0,255,0), 3) cv.imshow("frame",frame)if cv.waitKey(1) & 0xFF == ord('q'):break # 5. 釋放資源 cap.release() ? cv.destroyAllWindows()

    總結

    opencv中人臉識別的流程是:

  • 讀取圖片,并轉換成灰度圖

  • 實例化人臉和眼睛檢測的分類器對象

  • # 實例化級聯分類器 classifier =cv.CascadeClassifier( "haarcascade_frontalface_default.xml" ) # 加載分類器 classifier.load('haarcascade_frontalface_default.xml')
  • 進行人臉和眼睛的檢測

  • rect = classifier.detectMultiScale(gray, scaleFactor, minNeighbors, minSize,maxsize)
  • 將檢測結果繪制出來就可以了。

  • 我們也可以在視頻中進行人臉識別

    總結

    以上是生活随笔為你收集整理的人脸识别案例:【实战】opencv人脸检测+Haar特征分类器的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。