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有比较方便的人脸识别库 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)
直接调用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)
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)
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)