OpenCV/Python3 簡易人臉檢測
推薦使用Jupyter Notebook
- 引入庫檔案
import cv2
import matplotlib.pyplot as plt
import numpy as np
- 定義輔助函數(讀取圖像函數,顯示圖像函數)
"""
# 顯示圖像
# 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
- 主要函數(人臉檢測函數)
"""
# 人臉檢測
# 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)
- 循環傳入測試圖像獲得結果
for i in range(4):
print('test' + str(i) + '.jpeg')
faceDetection('test' + str(i) + '.jpeg')
-
級聯分類器下載下傳位址
連結:https://pan.baidu.com/s/1xQd4Tdu24fZ3MEEEM62f4w 密碼:vnq7
推薦使用Jupyter Notebook