天天看點

OpenCV/Python3 簡易人臉檢測

OpenCV/Python3 簡易人臉檢測

推薦使用Jupyter Notebook

  1. 引入庫檔案
import cv2
import matplotlib.pyplot as plt
import numpy as np
           
  1. 定義輔助函數(讀取圖像函數,顯示圖像函數)
"""
# 顯示圖像
# image   要顯示的圖像 
"""
def showImg(image):
    plt.imshow(image)
    plt.show()

"""
# 讀取圖像并轉換通道
# image 要讀取的圖像的路徑
"""
def readImg(image):
    image = cv2.imread(image)
    image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
    return image
           
  1. 主要函數(人臉檢測函數)
"""
# 人臉檢測
# image 需要檢測的圖像
"""
def faceDetection(image):
    image = readImg(image)
    showImg(image)
    
    # 級聯分類器(文尾下載下傳)
    detector = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")

    '''
    # 探測器
    # 參數說明:
    # image            傳入的圖像
    # scaleFactor=1.1  每次縮小圖像的比例,預設是1.1
    # minNeighbors=3   比對成功所需要的周圍矩形框的數目
                       每一個特征比對到的區域都是一個矩形框,隻有多個矩形框同時存在的時候,才認為是比對成功,預設值是3。  
    # minSize=(10,10)  比對人臉的最小範圍 
    # flags=2
        cv2.CASCADE_DO_CANNY_PRUNING = 1     利用canny邊緣檢測來排除一些邊緣很少或者很多的圖像區域
        cv2.CASCADE_SCALE_IMAGE = 2          正常比例檢測
        cv2.CASCADE_FIND_BIGGEST_OBJECT = 4  隻檢測最大的物體
        cv2.CASCADE_DO_ROUGH_SEARCH = 8      粗略的檢測
    '''
    rects = detector.detectMultiScale(image, scaleFactor=1.1, minNeighbors=3, minSize=(10,10), flags=2)
   
    '''
    # 畫出矩形
    # image              需要畫框的圖像
    # (x,y)              啟始坐标(左上角)
    # (x+width,y+height) 結束坐标(左下角)
    # (0,255,0)          矩形框顔色(綠色)
    # 5                  矩形框寬度
    '''
    for(x,y,width,height) in rects:
        cv2.rectangle(image,(x,y),(x+width,y+height),(0,255,0),5)

    showImg(image)
           
  1. 循環傳入測試圖像獲得結果
for i in range(4):
    print('test' + str(i) + '.jpeg')
    faceDetection('test' + str(i) + '.jpeg')
           
  1. 級聯分類器下載下傳位址

    連結:https://pan.baidu.com/s/1xQd4Tdu24fZ3MEEEM62f4w 密碼:vnq7

推薦使用Jupyter Notebook