opencv實現人臉識別(二) 人臉圖像采集模塊


這一步我們開始搭建第一個模塊,用來檢測到圖像中的人臉位置,並將它拍下來保存在指定路徑

流程圖:

 

代碼實現:

import cv2


def pic(cam):
    # 調用筆記本內置攝像頭,所以參數為0,如果有其他的攝像頭可以調整參數為1,2
    cam = cv2.VideoCapture(0)

    # 使用自帶的人臉識別分類器, 其中 這個.xml文件是 識別人臉的分類器文件
    # 這里我已經把這個文件放在了當前項目目錄下
    face_detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

    # 輸入用戶id
    face_id = input('\n enter user id:')

    print('\n Initializing face capture. Look at the camera and wait ...')

    # count變量記錄圖片張數
    count = 0

    while True:

        # 從攝像頭讀取圖片
        #  cam.read()按幀讀取視頻,sucess,img是cam.read()方法的兩個返回值。
        #  其中sucess是布爾值,如果讀取幀是正確的則返回True,
        #  如果文件讀取到結尾,它的返回值就為False。
        #  img就是每一幀的圖像,是個三維矩陣。
        sucess, img = cam.read()

        # 轉為灰度圖片
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

        # 檢測人臉
        faces = face_detector.detectMultiScale(gray, 1.3, 5)

        for (x, y, w, h) in faces:
            # 4個參數依次是  圖像矩陣, 矩形左上角起始坐標,右下角坐標, 矩形邊框線的顏色
            cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0))
            count += 1

            # 保存圖像
            cv2.imwrite("D:/FaceData/" + str(face_id) + '.' + str(count) + '.jpg', gray[y: y + h, x: x + w])

            cv2.imshow('image', img)

        # 保持畫面的持續。
        k = cv2.waitKey(1)

        if k == 27:   # 通過esc鍵退出攝像
            break

        elif count >= 100:  # 得到100個樣本后退出攝像
            break

    # 關閉攝像頭
    cam.release()
    cv2.destroyAllWindows()

if __name__ == '__main__':
    cam = cv2.VideoCapture(0)
    pic(cam)

代碼中每個函數的作用基本都進行了簡略注釋,

 

到現在,我們就在指定的文件夾中有了一定數量的人臉灰度圖了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM