計算機視覺基礎系列(python與opencv的操作與運用/tensorflow的基礎介紹)(二十一)---Haar+adaboost分類器實現人臉識別

Haar+adaboost分類器實現人臉識別:

其中運用了很多opencv自帶的包,然後這裏的代碼裏面都有很詳細的註釋,可以看一下,最後的效果不是很好,之後會慢慢改進,也運用了opencv裏面自帶的兩個xml文件,一個是檢測人臉的xml文件,另外一個是檢測眼睛的xml文件,都可以在opencv官網下載的opencv開源包中找到,這裏,我上傳到csdn上,附上鍊接可以下載:點擊此處跳轉,可以下載一下。

整個操作流程是:1.load xml文件 2.夾在圖片 3.haar特徵,灰度處理(所有的haar特徵基於灰度圖的)4.檢測人臉 5.繪製標註

每一步的操作詳細註釋可以看一下

import cv2
import numpy as np
# 1.load xml文件   2.夾在圖片  3.haar特徵,灰度處理(所有的haar特徵基於灰度圖的),4.檢測人臉  5.繪製標註
# 加載引入xml文件
face_xml = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_xml = cv2.CascadeClassifier('haarcascade_eye.xml')
img = cv2.imread('face.png')
cv2.imshow('src', img)
# 計算haar特徵,但是opencv自帶的已經解決,所以只需要轉換成灰度圖即可
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 檢測;cv2中有自帶的檢測方法
faces = face_xml.detectMultiScale(gray, 1.3, 5)
# 檢測圖像中的人臉,第一個參數,灰度圖片的數據,縮放係數,harr特徵需要的比例縮放的操作;目標大小,人臉不能小於5
print('face=', len(faces))
# 繪製人臉,給人臉畫寬高
for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
    roi_face = gray[y:y+h, x:x+w]
    roi_color = img[y:y+h, x:x+w]
    # 也必須是灰度圖
    eyes = eye_xml.detectMultiScale(roi_face)
    print('eye=', len(eyes))
    for (x2, y2, w2, h2) in eyes:
        cv2.rectangle(img, (x2, y2), (x2+w2, y2+h2), (0, 255, 0), 2)
cv2.imshow('dst', img)
cv2.waitKey(0)

輸出的結果爲:

效果有一些偏差,後面可以慢慢優化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章