Python--OpenCV人臉檢測

OpenCV人臉檢測

OpenCV是一個基於BSD許可(開源)發行的跨平臺計算機視覺庫,可以運行在Linux、Windows、Android和Mac OS操作系統上。它輕量級而且高效——由一系列 C 函數和少量 C++ 類構成,同時提供了Python、Ruby、MATLAB等語言的接口,實現了圖像處理和計算機視覺方面的很多通用算法。——百度百科

opencv的功能很強大。在人臉識別方面,它包含了很多分類器,可以識別眼睛、嘴巴、正臉等等,其中在正臉識別上有4個haar特徵訓練的級聯分類器。
(1)haarcascade_frontalface_alt.xml
(2)haarcascade_frontalface_alt2.xml
(3)haarcascade_frontalface_alt_tree.xml
(4)haarcascade_frontalface_default.xml
這四個在不同程度上都有誤檢,大家根據自己的數據集都可以用來測試測試看看那個準確率更高。有人檢測說default準確率最高。我都測試過,對於有些圖片也不一定。下面網盤我分享了(1)和(4)兩個。
代碼實現:

import cv2


# 圖片名
filename =r'C:\Users\lenovo\Desktop\0.jpg'


def detect(filename):

    # cv2級聯分類器CascadeClassifier,xml文件爲訓練數據
    face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')
    # 讀取圖片
    img = cv2.imread(filename)
    # img = cv2.resize(img, (64,64))
    # 轉灰度圖
    # gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # 進行人臉檢測
    # scaleFactor--表示在前後兩次相繼的掃描中,搜索窗口的比例係數。默認爲1.1即每次搜索窗口依次擴大10%;
    # minNeighbors--表示構成檢測目標的相鄰矩形的最小個數(默認爲3個)。
    #         如果組成檢測目標的小矩形的個數和小於 min_neighbors - 1 都會被排除。
    #         如果min_neighbors 爲 0, 則函數不做任何操作就返回所有的被檢候選矩形框,
    #         這種設定值一般用在用戶自定義對檢測結果的組合程序上;
    faces = face_cascade.detectMultiScale(img, 1.1, 3)
    print(faces)
    # 繪製人臉矩形框
    for (x, y, w, h) in faces:
        img = cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
    # 命名顯示窗口
    cv2.namedWindow('people')
    # 顯示圖片
    cv2.imshow('people',img)
    # 保存圖片
    # cv2.imwrite('./1.jpg', img2)
    # 設置顯示時間,0表示一直顯示
    cv2.waitKey(0)


detect(filename)

下面測試一張圖片
使用alt的結果:
在這裏插入圖片描述
default的結果:
在這裏插入圖片描述
兩個級聯器:
鏈接:https://pan.baidu.com/s/1KcdIckj9vfs1sMka87EJRg
提取碼:ju3e
全部代碼my github

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章