Face Recognition 人脸识别模块方法学习

开发者认为这是世界上最简单的人脸识别库.....初学,别骗我,姑且相信他...主要用于识别和操作人脸。

这个项目中的人脸识别是基于dlib的,此模型在Labeled Faces in the Wild 上有99.38%的准确度。

正在学习人脸老化方面的知识,需要对人脸图片进行预处理,基于此有了此篇学习博文,感谢Face_Recognition的所有贡献者致敬。

目录

1、face_recognition.api.batch_face_locations(images, number_of_times_to_upsample=1, batch_size=128)

2、face_recognition.api.compare_faces(known_face_encodings, face_encoding_to_check, tolerance=0.6)

3、face_recognition.api.face_distance(face_encodings, face_to_compare)

4、face_recognition.api.face_encodings(face_image, known_face_locations=None, num_jitters=1)

5、face_recognition.api.face_landmarks(face_image, face_locations=None, model='large')

6、face_recognition.api.face_locations(img, number_of_times_to_upsample=1, model='hog')

7、face_recognition.api.load_image_file(file, mode='RGB')


1、face_recognition.api.batch_face_locations(imagesnumber_of_times_to_upsample=1batch_size=128)

def batch_face_locations(images, number_of_times_to_upsample=1, batch_size=128):
    """
    Returns an 2d array of bounding boxes of human faces in a image using the cnn face detector
    If you are using a GPU, this can give you much faster results since the GPU
    can process batches of images at once. If you aren't using a GPU, you don't need this function.

    :param img: A list of images (each as a numpy array)
    :param number_of_times_to_upsample: How many times to upsample the image looking for faces. Higher numbers find smaller faces.
    :param batch_size: How many images to include in each GPU processing batch.
    :return: A list of tuples of found face locations in css (top, right, bottom, left) order
    """
    def convert_cnn_detections_to_css(detections):
        return [_trim_css_to_bounds(_rect_to_css(face.rect), images[0].shape) for face in detections]

    raw_detections_batched = _raw_face_locations_batched(images, number_of_times_to_upsample, batch_size)

    return list(map(convert_cnn_detections_to_css, raw_detections_batched))

功能描述: (使用GPU时使用此函数)这个函数使用cnn人脸检测,返回一个描述图片中人脸的边界线的2维数组。

参数:

  • img:图片的list(每个都是一个numpy数组)。
  • number_of_times_to_upsample:对图像进行上采样的倍数,倍数越大,脸部越小。
  • batch_size:每个GPU处理批次中包含多少个图像。

返回值:css顺序(上、右、下、左)的一个人脸位置tuples list。

 

2、face_recognition.api.compare_faces(known_face_encodingsface_encoding_to_checktolerance=0.6)

def compare_faces(known_face_encodings, face_encoding_to_check, tolerance=0.6):
    """
    Compare a list of face encodings against a candidate encoding to see if they match.

    :param known_face_encodings: A list of known face encodings
    :param face_encoding_to_check: A single face encoding to compare against the list
    :param tolerance: How much distance between faces to consider it a match. Lower is more strict. 0.6 is typical best performance.
    :return: A list of True/False values indicating which known_face_encodings match the face encoding to check
    """
    return list(face_distance(known_face_encodings, face_encoding_to_check) <= tolerance)

功能描述:将已知的一些人脸编码与候选的人脸编码进行比对,看他们是否匹配。

参数:

  • known_face_encodings:已知的人脸(们)编码list。
  • facd_encoding_to_check:一个待比对的人脸编码。
  • tolerance:人脸之间匹配的距离。数字越小越严格,0.6具有比较好的表现。

返回值: 一个标志已知的人脸编码与待匹配人脸编码是否匹配的True/False值的list。

 

3、face_recognition.api.face_distance(face_encodingsface_to_compare)

def face_distance(face_encodings, face_to_compare):
    """
    Given a list of face encodings, compare them to a known face encoding and get a euclidean distance
    for each comparison face. The distance tells you how similar the faces are.

    :param faces: List of face encodings to compare
    :param face_to_compare: A face encoding to compare against
    :return: A numpy ndarray with the distance for each face in the same order as the 'faces' array
    """
    if len(face_encodings) == 0:
        return np.empty((0))

    return np.linalg.norm(face_encodings - face_to_compare, axis=1)

功能描述:将两个人脸编码进行比较,得到一个欧氏距离,以此距离来表示两个人脸的相似度。

参数:

  • face_encodings:用来比较的人脸编码list。
  • face_to_compare:待比较的一个人脸的编码。

返回值: 一个关于距离的numpy ndarray(其顺序与face_encodings的顺序相同)。

 

4、face_recognition.api.face_encodings(face_imageknown_face_locations=Nonenum_jitters=1)

def face_encodings(face_image, known_face_locations=None, num_jitters=1):
    """
    Given an image, return the 128-dimension face encoding for each face in the image.

    :param face_image: The image that contains one or more faces
    :param known_face_locations: Optional - the bounding boxes of each face if you already know them.
    :param num_jitters: How many times to re-sample the face when calculating encoding. Higher is more accurate, but slower (i.e. 100 is 100x slower)
    :return: A list of 128-dimensional face encodings (one for each face in the image)
    """
    raw_landmarks = _raw_face_landmarks(face_image, known_face_locations, model="small")
    return [np.array(face_encoder.compute_face_descriptor(face_image, raw_landmark_set, num_jitters)) for raw_landmark_set in raw_landmarks]

功能描述:对于给定的一张图像,对图像中的每张脸返回128维的人脸编码

参数:

  • face_image:包含一张或者多张人脸的图片。
  • known_face_location:可选参数,如果已知每个人脸的边界框可用
  • num_jitters:在计算编码时对人脸进行重新采样的次数。这个数越高越准确,但是相应速度越慢,如num_jitters=100,这样会慢100倍。

返回值:一个128维人脸编码的list(图像中的每张脸对应一个)

 

5、face_recognition.api.face_landmarks(face_imageface_locations=Nonemodel='large')

def face_landmarks(face_image, face_locations=None, model="large"):
    """
    Given an image, returns a dict of face feature locations (eyes, nose, etc) for each face in the image

    :param face_image: image to search
    :param face_locations: Optionally provide a list of face locations to check.
    :param model: Optional - which model to use. "large" (default) or "small" which only returns 5 points but is faster.
    :return: A list of dicts of face feature locations (eyes, nose, etc)
    """
    landmarks = _raw_face_landmarks(face_image, face_locations, model)
    landmarks_as_tuples = [[(p.x, p.y) for p in landmark.parts()] for landmark in landmarks]

    # For a definition of each point index, see https://cdn-images-1.medium.com/max/1600/1*AbEg31EgkbXSQehuNJBlWg.png
    if model == 'large':
        return [{
            "chin": points[0:17],
            "left_eyebrow": points[17:22],
            "right_eyebrow": points[22:27],
            "nose_bridge": points[27:31],
            "nose_tip": points[31:36],
            "left_eye": points[36:42],
            "right_eye": points[42:48],
            "top_lip": points[48:55] + [points[64]] + [points[63]] + [points[62]] + [points[61]] + [points[60]],
            "bottom_lip": points[54:60] + [points[48]] + [points[60]] + [points[67]] + [points[66]] + [points[65]] + [points[64]]
        } for points in landmarks_as_tuples]
    elif model == 'small':
        return [{
            "nose_tip": [points[4]],
            "left_eye": points[2:4],
            "right_eye": points[0:2],
        } for points in landmarks_as_tuples]
    else:
        raise ValueError("Invalid landmarks model type. Supported models are ['small', 'large'].")

功能描述:给定一张图,对图像中的每张人脸返回人脸特征(眼睛、鼻子等)的位置dict。

参数:

  • face_image:待搜索的图像。
  • face_locations:可选,提供一个人脸位置的list供核查
  • model:可选,使用哪种模式。“large”是默认的,返回68个特征点,“small”返回5个特征点但是速度更快。

返回值:人脸特征(眼睛、鼻子等)的位置dicts list。

 

6、face_recognition.api.face_locations(imgnumber_of_times_to_upsample=1model='hog')

def face_locations(img, number_of_times_to_upsample=1, model="hog"):
    """
    Returns an array of bounding boxes of human faces in a image

    :param img: An image (as a numpy array)
    :param number_of_times_to_upsample: How many times to upsample the image looking for faces. Higher numbers find smaller faces.
    :param model: Which face detection model to use. "hog" is less accurate but faster on CPUs. "cnn" is a more accurate
                  deep-learning model which is GPU/CUDA accelerated (if available). The default is "hog".
    :return: A list of tuples of found face locations in css (top, right, bottom, left) order
    """
    if model == "cnn":
        return [_trim_css_to_bounds(_rect_to_css(face.rect), img.shape) for face in _raw_face_locations(img, number_of_times_to_upsample, "cnn")]
    else:
        return [_trim_css_to_bounds(_rect_to_css(face), img.shape) for face in _raw_face_locations(img, number_of_times_to_upsample, model)]

 功能描述:返回一张图像中的人脸边界框的array。

参数:

  • img:一张图片(作为一个numpy array)。
  • number_of_times_to_upsample:为了寻找人脸对图片进行上采样的次数。要寻找越小的人脸就要设置更高的数值。
  • model:采用哪种人脸检测的模式。“hog”(方向梯度直方图)准确度小一些但是在CPU上的运行速度更快;“cnn”是一个拥有更高准确度的深度学习模式,在GPU/CUDA上速度更快些。默认是“hog”模式。

返回值:一个检测到的人脸的位置(css顺序,上右下左)tuples list。

 

7、face_recognition.api.load_image_file(filemode='RGB')

def load_image_file(file, mode='RGB'):
    """
    Loads an image file (.jpg, .png, etc) into a numpy array

    :param file: image file name or file object to load
    :param mode: format to convert the image to. Only 'RGB' (8-bit RGB, 3 channels) and 'L' (black and white) are supported.
    :return: image contents as numpy array
    """
    im = PIL.Image.open(file)
    if mode:
        im = im.convert(mode)
    return np.array(im)

 功能描述:加载一个图片文件(.jpg,.png等)成为一个numpy array。

参数:

  • file:想要加载的图片文件名字或者文件对象。
  • mode:将图像转化成的格式。只支持“RGB”(8位 RGB,3通道),“L”(黑白)两种。

返回值:numpy array形式的图像

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值