基于OpenCV和Python实现人脸识别

一、需求

通过OpenCV和Python,利用摄像头拍摄图片形成数据集,并对数据集进行训练,达到可以通过摄像头识别人脸的效果

二、环境说明

OpenCV的版本为4.0.1.24

Python的版本为3.7.3

Numpty的版本为1.16.2

pip版本为10.0.1

操作系统的版本为Windows 10

三、创建数据集

检查确保摄像头可用,部分代码如下,调用摄像头拍摄100张照片

while True:
    ret, img = cap.read()
    print(ret)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = detector.detectMultiScale(gray, 1.3, 5)
    for (x, y, w, h) in faces:
        cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
        # incrementing sample number
        sampleNum = sampleNum + 1
        # saving the captured face in the dataset folder
        cv2.imwrite("E:\\Python\\Python\\face\\dataset\\User." +
            str(Id) + '.' + str(sampleNum) + ".jpg", gray[y:y + h, x:x + w])  #
        cv2.imshow('frame', img)
    
    # wait for 100 miliseconds
    if cv2.waitKey(100) & 0xFF == ord('q'):
        break
    # break if the sample number is morethan 20
    elif sampleNum > 100:
        break

四、数据集训练

部分代码如下

def get_images_and_labels(path):
    image_paths = [os.path.join(path, f) for f in os.listdir(path)]
    face_samples = []
    ids = []
    #省略部分代码
    image_id = int(os.path.split(image_path)[-1].split(".")[1])
    faces = detector.detectMultiScale(image_np)

自动生成的数据集特征值

基于OpenCV和Python实现人脸识别_第1张图片

 for (x, y, w, h) in faces:
        cv2.rectangle(im, (x - 50, y - 50), (x + w + 50, y + h + 50), (225, 0, 0), 2)
        img_id, conf = recognizer.predict(gray[y:y + h, x:x + w])
        if conf > 50:
            if img_id == 1:
                img_id = 'xuhan'
            elif img_id == 3:
                img_id = 'xiaom'
            elif img_id == '4':
                img_id = 'xiaod'
            elif img_id == '5':
                img_id == 'xiaox'
        else:
            img_id = "Unknown"

五、实验效果展示

基于OpenCV和Python实现人脸识别_第2张图片

图中的xuhan是识别出来的,打码了打码了

你可能感兴趣的:(项目实战)