face_recognition是一个可玩度很高的人脸识别开源框架,不仅安装方便,运行起来也很轻松。
官网:https://github.com/ageitgey/face_recognition.git
以下我将按标题分享以下我的畅玩经历:
机器视觉必备,这个不过多赘述。
anaconda在官网即可下载:https://www.anaconda.com/download/
分别自带python2.7和3.6版本。在此我用的是2.7版本
在某些博客会提及python3.6下Dlib无障碍编译,貌似是python35 36的版本不匹配原因。我尝试了下,不论27 36都无障碍编译成功了。因此我认为Dlib编译出问题与否很大可能跟你机器的python配置纯不纯有关系。
前提需要boost和cmake环境,如果有配置过caffe就不用重复了。
github:https://github.com/davisking/dlib
下载如图
解压后在cmd中运行
python setup.py install
cuda编译需要很长时间,大概30分钟,要耐心等待。
在cmd直接pip install!
pip install face_recognition
提示安装完成后就可以开玩啦!
opencv是可选选项,安装后能够提高可玩性
点我直接下载opencv3.4.1
安装完成后,将opencv下的.\build\python\2.7\x64的cv2.pyd文件放置到.\Anaconda2\Lib\site-packages文件夹下
注:此处仅有python2.7的提供,其余版本参考百度
其余配置参考https://blog.csdn.net/weixin_39393712/article/details/79583274
先上代码:
# coding:utf-8
import face_recognition
#输入已知图片biden.jpg
known_image = face_recognition.load_image_file("biden.jpg")
#输入待识别的图片unknown.jpg
unknown_image = face_recognition.load_image_file("unknown.jpg")
biden_encoding = face_recognition.face_encodings(known_image)[0]
unknown_encoding = face_recognition.face_encodings(unknown_image)[0]
results = face_recognition.compare_faces([biden_encoding], unknown_encoding)
#输出的results是一串Boolean值
print results
若想要识别其余的人,自己动手编写python文件就好了,如此轻松,岂不美哉?
其余还有挺多功能的,可在官网查看
https://face-recognition.readthedocs.io/en/latest/face_recognition.html
看不懂?没关系,下面我来一一介绍
1、人脸定位——locations
face_locations(img, number_of_times_to_upsample=1, model="hog")
利用CNN深度学习模型或方向梯度直方图(Histogram of Oriented Gradient, HOG)进行人脸提取。返回值是一个数组(top, right, bottom, left)表示人脸所在边框的四条边的位置。
成员变量:
此外,人脸定位的方法还有:
_raw_face_locations(img, number_of_times_to_upsample=1, model="hog")
_raw_face_locations_batched(images, number_of_times_to_upsample=1, batch_size=128)
batch_face_locations(images, number_of_times_to_upsample=1, batch_size=128)
读者有兴趣可自行尝试,不一一赘述。
2、人脸解码——encodings
人脸识别的前菜。输入一张图片后,生成一个128维的特征向量,这是 人脸识别的依据。
face_encodings(face_image, known_face_locations=None, num_jitters=1)
成员变量:
3、人脸比对——compare
人脸识别的核心,设置一个阈值,若两张人脸的特征向量的距离,在阈值范围之内,则认为其是同一个人,最后返回一个Boolean值的list。
compare_faces(known_face_encodings, face_encoding_to_check, tolerance=0.6)
成员变量:
4、人脸特征向量距离——distance
跟上面的方法同样原理,不过输出由对错改为数字。
face_distance(face_encodings, face_to_compare)
成员变量:
5、人脸特征提取——landmark
face_landmarks(face_image, face_locations=None, model="large")
成员变量:
6、化妆(简直是恶搞)——think ‘Meitu’
这不是个API,但挺好玩的,就放上来。
think ‘Meitu’是作者自己说的,哈哈,看来天朝的美颜远销海外,连人脸识别专家都忍不住来过一把瘾。不过要是给妹子弄这个,不跪键盘,就是跪榴莲
上代码:
from PIL import Image, ImageDraw
import face_recognition
# Load the jpg file into a numpy array
image = face_recognition.load_image_file("biden.jpg")
# Find all facial features in all the faces in the image
face_landmarks_list = face_recognition.face_landmarks(image)
for face_landmarks in face_landmarks_list:
pil_image = Image.fromarray(image)
d = ImageDraw.Draw(pil_image, 'RGBA')
# Make the eyebrows into a nightmare
d.polygon(face_landmarks['left_eyebrow'], fill=(68, 54, 39, 128))
d.polygon(face_landmarks['right_eyebrow'], fill=(68, 54, 39, 128))
d.line(face_landmarks['left_eyebrow'], fill=(68, 54, 39, 150), width=5)
d.line(face_landmarks['right_eyebrow'], fill=(68, 54, 39, 150), width=5)
# Gloss the lips
d.polygon(face_landmarks['top_lip'], fill=(150, 0, 0, 128))
d.polygon(face_landmarks['bottom_lip'], fill=(150, 0, 0, 128))
d.line(face_landmarks['top_lip'], fill=(150, 0, 0, 64), width=8)
d.line(face_landmarks['bottom_lip'], fill=(150, 0, 0, 64), width=8)
# Sparkle the eyes
d.polygon(face_landmarks['left_eye'], fill=(255, 255, 255, 30))
d.polygon(face_landmarks['right_eye'], fill=(255, 255, 255, 30))
# Apply some eyeliner
d.line(face_landmarks['left_eye'] + [face_landmarks['left_eye'][0]], fill=(0, 0, 0, 110), width=6)
d.line(face_landmarks['right_eye'] + [face_landmarks['right_eye'][0]], fill=(0, 0, 0, 110), width=6)
pil_image.show()
文章就到这里,本人只是机器视觉的小白,路还有很长,欢迎大家指教!