輕鬆小品,來點 OpenCV 人臉辨識的實作
OpenCV(Open Source Computer Vision)是一個跨平台的電腦視覺庫,包含許多電腦視覺相關演算處理的Open Source Library,而且支援多種開法語言,同時 OpenCV 也可以在手機APP(Android、iOS)上開發
使用 Command line,並運用 pip install 安裝 OpenCV
相關說明文件:pypi opencv-python
pip install opencv-python
在 Google 圖片上,搜尋到這張圖片,就用來這次的體驗,將他放於我們將要執行的 Code 同一層位置,命名為「human.jpg」
import cv2
def detectFace(img):
filename = img.split(".")[0] # 取得檔案名稱(不添加副檔名)
img = cv2.imread(img) # 讀取圖檔
grayImg = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 透過轉換函式轉為灰階影像
color = (0, 255, 0) # 定義框的顏色
# OpenCV 人臉識別分類器
face_classifier = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
detectMultiScale函數,它可以偵測出圖片中所有的人臉,其參數為:
參數 | 說明 |
---|---|
image | 待檢測圖片,一般為灰階影像,以便加快偵測速度 |
scaleFactor | 在前後兩次相繼的掃描中,搜索範圍的比例係數,默認值為 1.1 |
minNeighbors | 構成偵測目標的相鄰矩形的最小個數,默認值為 3 |
minSize & maxSize | 用來限制得到的目標區域範圍 |
# 調用偵測識別人臉函式
faceRects = face_classifier.detectMultiScale(
grayImg, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))
# 大於 0 則檢測到人臉
if len(faceRects):
# 框出每一張人臉
for faceRect in faceRects:
x, y, w, h = faceRect
cv2.rectangle(img, (x, y), (x + h, y + w), color, 2)
# 將結果圖片輸出
cv2.imwrite(filename + "_face.jpg", img)
完整代碼
import cv2
def detectFace(img):
filename = img.split(".")[0] # 取得檔案名稱(不添加副檔名)
img = cv2.imread(img) # 讀取圖檔
grayImg = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 透過轉換函式轉為灰階影像
color = (0, 255, 0) # 定義框的顏色
# OpenCV 人臉識別分類器
face_classifier = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
# 調用偵測識別人臉函式
faceRects = face_classifier.detectMultiScale(
grayImg, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))
# 大於 0 則檢測到人臉
if len(faceRects):
# 框出每一張人臉
for faceRect in faceRects:
x, y, w, h = faceRect
cv2.rectangle(img, (x, y), (x + h, y + w), color, 2)
# 將結果圖片輸出
cv2.imwrite(filename + "_face.jpg", img)
detectFace('human.jpg')
執行後輸出結果:
此篇僅是體驗 OpenCV 人臉辨識的有趣之處,因此不會說得很深入,很多觀念還需要自行查詢學習
此系列文章,已經到一段落,雖然內容不是寫得很好(我有自知之明)
但希望此篇文章的學習紀錄,可以幫助到剛踏入 Python 不對,是這領域時可以順利的上手學習這條不歸路