教你用20行Python代碼實現人臉識別技術


教你用20行Python代碼實現人臉識別技術

人臉識別技術

OpenCV 是最流行的計算機視覺庫,原本用 C 和 C++ 開發,現在也支持 Python。

它使用機器學習算法在圖像中搜索人的面部。對於人臉這麼複雜的東西,並沒有一個簡單的檢測能對是否存在人臉下結論,而需要成千上萬的特徵匹配。算法把人臉識別任務分解成數千個小任務,每個都不難處理。這些任務也被稱為分類器。 在這裡還是提醒下,很多人學Python過程中會遇到各種煩惱問題,沒有人解答容易放棄。為此我建了個python學習資源圈裡面有2020年最新學習資料,如果你正在學python,可以關注我,後臺私信我 ‘p’ 免費獲取!還有老司機解答哦

對於類似於人臉的對象,你或許需要不少於 6000 個分類器,每一個都需要成功匹配(當然,有容錯率),才能檢測出人臉。但這有一個問題:對於人臉識別,算法從左上角開始計算一個個數據塊,不停問“這是張臉嗎”。每個數據塊有超過 6000 個檢測,加起來的計算量會達到數百萬級別,計算機很可能會讓你等得花兒都謝了。

OpenCV 使用 cascades 來避免這種情況。Cascade 是什麼?最佳答案已經在字典裡了:一條瀑布或者連續瀑布。

好比連續瀑布,OpenCV cascade 把人臉檢測問題分解為好幾步。對於每個數據塊,它都進行一個粗略、快速的檢測。若通過,會再進行一個更仔細的檢測,以此不斷類推。該算法有 30 到 50 個這樣的階段,或者說 cascade。

只有通過全部階段,算法才會判斷檢測到人臉。這樣做的好處是:大多數圖形都會在頭幾步就產生否定反饋,算法因而不需要在它上面測試所有 6000 個特徵,大大節省了時間。相對於“正常流程”耗費數個小時,這可以實時實現人臉檢測。

軟件環境:
python3+openCV

代碼:

<code>#encoding:utf-8
import cv2
filename = "/users/Downloads/20181102142518.png"
def detect(filename):
# haarcascade_frontalface_default.xml存儲在package安裝的位置
face_cascade = cv2.CascadeClassifier("/usr/local/lib/python3.6/site-packages/cv2/data/haarcascade_frontalface_default.xml")
img = cv2.imread(filename)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#傳遞參數是scaleFactor和minNeighbors,分別表示人臉檢測過程中每次迭代時圖像的壓縮率以及每個人臉矩形保留近鄰數目的最小值
#檢測結果返回人臉矩形數組
#python學習資料交流分享群:852 250 729
faces = face_cascade.detectMultiScale(gray, 1.3, 5)

for (x, y, w, h) in faces:
img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
cv2.namedWindow("Human Face Result!")
cv2.imshow("Human Face Result!", img)
cv2.imwrite("images/Face.jpg", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
detect(filename)
/<code>

原圖:

教你用20行Python代碼實現人臉識別技術

識別

識別後:

教你用20行Python代碼實現人臉識別技術

識別

以上就是使用Python的20行代碼來實現人臉識別了,最後在這裡還是提醒下,很多人學Python過程中會遇到各種煩惱問題,沒有人解答容易放棄。為此我建了個python學習資源圈裡面有2020年最新學習資料,如果你正在學python,可以關注我,後臺私信我 ‘p’ 免費獲取!還有老司機解答哦


本文的文字及圖片來源於網絡加上自己的想法,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。


分享到:


相關文章: