人臉識別是計算機視覺領域中的一項核心技術,對於整個人工智慧技術的發展也是非常重要,目前已經在多個領域中投入使用,相對較為成熟。很多人認為人臉識別技術高深莫測,難以企及,其實也並非如此神秘,本文將透過OpenCV和Python,利用簡短的程式碼,幫助每一位讀者實現人臉識別。
OpenCV:是一個主要針對實時計算機視覺的程式設計函式庫。本文旨在使用OpenCV和Python/C++從影象中檢測面部。
本文基礎:在機器上安裝Python和C++,瞭解Python和C ++的編碼基礎知識,程式碼編輯器。有了這些,我們就可以開始進行人臉識別了。
為了透過程式碼實現人臉識別,我們將使用OpenCV中基於Haar的cascade分類器,這一種有效的物件檢測方法。它是一種基於機器學習的方法,其中cascade函式是透過許多positive和negative影象得到訓練,然後用於檢測其他影象中的物件。 OpenCV已經包含許多面部、眼睛、微笑等預先訓練的分類器。這些XML模型檔案儲存在opencv / data / haarcascades /的位置。
讓我們先開始在Python上編寫程式碼實現人臉識別然後再展示透過C++實現的教程。
Python
首先,匯入numpy、OpenCV兩個庫:
import numpy as np
import cv2 as cv
然後,載入OpenCV中自帶的基於Haar的cascade分類器來實現人臉識別。haarcascade_frontalface_default.xml 是OpenCV中已經經過訓練的人臉識別模型檔案。
face_cascade = cv.CascadeClassifier("\\cv2\\data\\haarcascade_frontalface_default.xml")
eye_cascade = cv.CascadeClassifier("\\cv2\\data\\haarcascade_eye.xml")
現在,我們需要載入我們想要進行人臉檢測的影象。對於本文,我們將使用如下OpenCV自帶的"lenna"經典影象。
載入我們的圖片,並將其轉化為灰度影象:
img = cv.imread("lenna.jpg")
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
我們已經做好了人臉檢測的準備工作,現在我們透過我們前面載入的cascade分類器的detectMultiScale函式來進行人臉檢測:
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
這裡的1.3表示scaleFactor,5表示minNeighbours。
scaleFactor:在前後兩次相繼的掃描中,搜尋視窗的比例係數。例如1.3指將搜尋視窗依次擴大30%。
minNeighbors:構成檢測目標的相鄰矩形的最小個數。如果組成檢測目標的小矩形的個數和小於minNeighbors都會被排除。
程式碼執行之後面部檢測就完成了,並且在影象中找到的所有人臉資料都儲存在faces這個陣列中。然後,我們還可以在人臉周圍繪製矩形:
for (x,y,w,h) in faces:
cv.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
roi_gray = gray[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w]
我們幾乎已經完成了人臉識別,只需再將得到的帶有人臉標記的影象顯示出來即可。為此我們使用以下程式碼:
cv.imshow("Face_Detect",img)
cv.waitKey(0)
cv.destroyAllWindows()
到此,我們已經學會了透過Python實現人臉識別,現在可以嘗試在OpenCV庫中使用不同的分類器來檢測不同的物件。如果你有足夠多的圖片,甚至還可以製作自己的圖片分類器! 接下來我們將展示如何透過C++來實現人臉識別。
人臉識別是計算機視覺領域中的一項核心技術,對於整個人工智慧技術的發展也是非常重要,目前已經在多個領域中投入使用,相對較為成熟。很多人認為人臉識別技術高深莫測,難以企及,其實也並非如此神秘,本文將透過OpenCV和Python,利用簡短的程式碼,幫助每一位讀者實現人臉識別。
OpenCV:是一個主要針對實時計算機視覺的程式設計函式庫。本文旨在使用OpenCV和Python/C++從影象中檢測面部。
本文基礎:在機器上安裝Python和C++,瞭解Python和C ++的編碼基礎知識,程式碼編輯器。有了這些,我們就可以開始進行人臉識別了。
為了透過程式碼實現人臉識別,我們將使用OpenCV中基於Haar的cascade分類器,這一種有效的物件檢測方法。它是一種基於機器學習的方法,其中cascade函式是透過許多positive和negative影象得到訓練,然後用於檢測其他影象中的物件。 OpenCV已經包含許多面部、眼睛、微笑等預先訓練的分類器。這些XML模型檔案儲存在opencv / data / haarcascades /的位置。
讓我們先開始在Python上編寫程式碼實現人臉識別然後再展示透過C++實現的教程。
Python
首先,匯入numpy、OpenCV兩個庫:
import numpy as np
import cv2 as cv
然後,載入OpenCV中自帶的基於Haar的cascade分類器來實現人臉識別。haarcascade_frontalface_default.xml 是OpenCV中已經經過訓練的人臉識別模型檔案。
face_cascade = cv.CascadeClassifier("\\cv2\\data\\haarcascade_frontalface_default.xml")
eye_cascade = cv.CascadeClassifier("\\cv2\\data\\haarcascade_eye.xml")
現在,我們需要載入我們想要進行人臉檢測的影象。對於本文,我們將使用如下OpenCV自帶的"lenna"經典影象。
載入我們的圖片,並將其轉化為灰度影象:
img = cv.imread("lenna.jpg")
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
我們已經做好了人臉檢測的準備工作,現在我們透過我們前面載入的cascade分類器的detectMultiScale函式來進行人臉檢測:
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
這裡的1.3表示scaleFactor,5表示minNeighbours。
scaleFactor:在前後兩次相繼的掃描中,搜尋視窗的比例係數。例如1.3指將搜尋視窗依次擴大30%。
minNeighbors:構成檢測目標的相鄰矩形的最小個數。如果組成檢測目標的小矩形的個數和小於minNeighbors都會被排除。
程式碼執行之後面部檢測就完成了,並且在影象中找到的所有人臉資料都儲存在faces這個陣列中。然後,我們還可以在人臉周圍繪製矩形:
for (x,y,w,h) in faces:
cv.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
roi_gray = gray[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w]
我們幾乎已經完成了人臉識別,只需再將得到的帶有人臉標記的影象顯示出來即可。為此我們使用以下程式碼:
cv.imshow("Face_Detect",img)
cv.waitKey(0)
cv.destroyAllWindows()
到此,我們已經學會了透過Python實現人臉識別,現在可以嘗試在OpenCV庫中使用不同的分類器來檢測不同的物件。如果你有足夠多的圖片,甚至還可以製作自己的圖片分類器! 接下來我們將展示如何透過C++來實現人臉識別。