官方网址:https://github.com/ageitgey/face_recognition
在图片中查找面孔:
import face_recognition
image = face_recognition.load_image_file("your_file.jpg")
face_locations = face_recognition.face_locations(image)
查找和操作图片中的面部特征
import face_recognition
image = face_recognition.load_image_file("your_file.jpg")
face_landmarks_list = face_recognition.face_landmarks(image)
应用数字化妆
import face_recognition
known_image = face_recognition.load_image_file("biden.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)
将此库与其他 Python 库一起使用来进行实时人脸识别:
要求
- Python 3.3+ 或 Python 2.7
- macOS 或 Linux(Windows 不受官方支持,但可能有效)
pip3
最后,使用(或pip2
用于 Python 2)从 pypi 安装此模块:
pip3 install face_recognition
人脸检测
- 在照片中查找面孔
- 在照片中查找人脸(使用深度学习)
- 使用 GPU 在批量图像中查找人脸(使用深度学习)
- 使用网络摄像头模糊实时视频中的所有面孔(需要安装 OpenCV)
面部特征
- 识别照片中的特定面部特征
- 应用(非常丑陋的)数字化妆
面部识别
- 根据已知人物的照片查找和识别照片中的未知面孔
- 识别并在照片中的每个人周围画出方框
- 通过数字人脸距离比较人脸,而不仅仅是真/假匹配
- 使用网络摄像头识别实时视频中的人脸 - 简单/慢速版本(需要安装 OpenCV)
- 使用网络摄像头识别实时视频中的人脸 - 更快版本(需要安装 OpenCV)
- 识别视频文件中的人脸并写出新的视频文件(需要安装 OpenCV)
- 使用摄像头识别 Raspberry Pi 上的人脸
- 运行 Web 服务以通过 HTTP 识别人脸(需要安装 Flask)
- 使用 K 近邻分类器识别人脸
- 每人训练多张图像,然后使用 SVM 识别人脸
我字节写了个demo:
#1、导入库
#2、显示图片
#3、绘制Landmarks关键点
#4、主函数
#注意本想母官方只支持mac和linux系统,windows不支持,还没解决
import face_recognition
import cv2
import matplotlib.pyplot as plt#显示关键点
def show_landmarks(image,landmarks):for landmarks_dict in landmarks:for landmarks_key in landmarks_dict.keys():for point in landmarks_dict[landmarks_key]:cv2.circle(image,point,3,(0,0,255),-1)#返回绘制后的图片return image
def show_img(image,title): #传过来图片和标题plt.title(title)plt.imshow(image)plt.axis("off") #关闭x轴和y轴
def main():#5、读取图片image = cv2.imread("../images/liuyifei.jpg")#6、图片灰度转换gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)#7、调用face_recognition库方法:face_landmarks()获取人脸关键点face_marks = face_recognition.face_landmarks(gray,None,"large")#None不知道几个人脸,让系统自己去找;large是68个点,small是5个点print(face_marks)#8、绘制关键点img_result = show_landmarks(image.copy(),face_marks) #复制一份原始图片#9、创建画布plt.figure(figsize=(9,6))plt.suptitle("Face Landmarks with face_recognition",fontsize=14,fontweight="bold")#10、显示整体效果show_img(img_result, "landmarks")if __name__ == "__main__":main()