python人脸识别开发

安裝python的Dlib库

Dlib的开发过程中,需要使用到boost库,编译的时候需要使用cmake库,所以在安装Dlib库之前需要先安装这两样,如果没有安装会报错

pip install boost
pip install cmake

再安装Dlib涉及到库scikit-image ,cv 2库

pip install scikit-image
pip install opencv-python

最后安装dlib库

pip install dlib

下边我们来实战一个dlib的例子:

import dlib
from skimage import io


class ExampleDlib(object):

    def dlib_example(self):
        # 1.获取一个脸部检测器,这个检测器包含了脸部检测算法
        detect = dlib.get_frontal_face_detector()
        # 2.生成Dlib的图像窗口
        window = dlib.image_window()
        images = io.imread('图片名字')
        # 利用脸部检测器读取待检测的图像数据,第二个参数1代表读取图片像素并放大1倍以便能够收集到更多的照片细节
        det = detect(images, 1)
        window.set_image(images)
        window.add_overlay(det)
        res = dlib.hit_enter_to_continue()
        return res


if __name__ == '__main__':
    ExampleDlib().dlib_example()

python人脸识别开发_第1张图片

Face Recognition 库简介

python有比较方便的人脸识别库 Face Recognition ,稍微写写代码,封装一下就可以作为服务了
目前训练业务场景,先将员工的照片录入系统,然后随便找一张照片给脸部编码,根据面部特征点计算这个面孔的特征值(特征向量)128个测量值等

下边我们来根据脸部编码生产图像的128个特征值

import face_recognition


class FaceRecognition(object):
    def face_recognition(self, images):
        image = face_recognition.load_image_file(images)
        # 不管图像中有多少个人脸信息,返回值都是一个列表
        face_encodings = face_recognition.face_encodings(image)
        # 遍历所有的人脸信息,根据128个特征值返回一个列表
        for face_encoding in face_encodings:
            print("信息编码长度为:{}\n编码信息为:{}".format(len(face_encoding), face_encoding))


if __name__ == '__main__':
    pic = '图片名字'
    FaceRecognition().face_recognition(pic)

python人脸识别开发_第2张图片
直接调用PIL中的line方法在PIL图片中绘制线条,帮助我们观察特征点

import face_recognition
from PIL import Image, ImageDraw


class FaceRecognition(object):
    def face_recognition(self, images):
        # 1.加载图像文件
        image = face_recognition.load_image_file(images)
        # 2.获取中铺中人脸特征点
        face_landmarks_list = face_recognition.face_landmarks(image)
        # 3.将数组转换成图片
        pil_image = Image.fromarray(image)
        # 4. 生成一张PIL图像
        d = ImageDraw.Draw(pil_image)
        # 5.遍历图片中的所有特征位置
        for face_landmarks in face_landmarks_list:
            facial_features = [
                'chin',
                'left_eyebrow',
                'right_eyebrow',
                'nose_bridge',
                'nose_tip',
                'left_eye',
                'right_eye',
                'bottom_lip'
            ]
            for facial_feature in facial_features:
                # 6.print("{}每个人的面部特征显示在以下位置:{}".format(facial_feature, face_landmarks[facial_feature]))
                # 7.直接调用PIL中的line方法在PIL图片中绘制线条,帮助我们观察特征点
                d.line(face_landmarks[facial_feature], width=5)

        return pil_image.show()


if __name__ == '__main__':
    pic = '图片名字'
    FaceRecognition().face_recognition(pic)

python人脸识别开发_第3张图片
识别图片中的人脸部位,矩阵画出来

import face_recognition
import cv2


class FaceRecognition(object):
    def face_recognition(self, images):
        # 1.通过load_image_file方法加载待识别图片
        image = face_recognition.load_image_file(images)
        # 2.通过face_locations方法得到图像中所有人脸的位置
        face_locations = face_recognition.face_locations(image)
        for face_location in face_locations:
            # 3. 解包操作,得到每张人脸的四个位置信息
            top, right, bottom, left = face_location
            start = (left, top)
            end = (right, bottom)
            # 4.在图片上绘制矩形框,从start坐标开始,end坐标结束,矩形框的颜色为(0,0,255),矩形框的粗细为2
            cv2.rectangle(image, start, end, (0, 0, 255), thickness=2)
        cv2.imshow('window', image)
        res = cv2.waitKey()
        return res


if __name__ == '__main__':
    pic = '图片地址'
    FaceRecognition().face_recognition(pic)

python人脸识别开发_第4张图片
上传一张照片,从合照中找到整个人

import face_recognition


class FaceRecognition(object):
    def face_recognition(self, single_photo, group_photo):
        # 1.加载一张合照
        group_photo = face_recognition.load_image_file(group_photo)
        # 2.加载单人照片
        single_photo = face_recognition.load_image_file(single_photo)
        known_face_encodings = face_recognition.face_encodings(single_photo)
        # 3.# face_encodings返回的是列表类型,我们只需要拿到第一个人脸编码即可
        compare_face_encoding = face_recognition.face_encodings(single_photo)[0]
        # 4.# 注意第二个参数,只能是单个面部特征编码,不能传列表
        matches = face_recognition.compare_faces(known_face_encodings, compare_face_encoding, tolerance=0.39)
        return matches


if __name__ == '__main__':
    image1 = 'imgs/刘亦菲合照.png'
    image2 = 'imgs/刘亦菲.png'
    res = FaceRecognition().face_recognition(image1, image2)
    print(res)

在这里插入图片描述

你可能感兴趣的:(开发,python,计算机视觉,opencv)