效果图

调用face_recognition.face_landmarks()方法即可得到人脸特征点, 返回一个字典, 下图是返回的数据, 包括chin(下巴), left_eye(左眼)等.

我画了两种图, 一种是遍历所有的点, 直接给点画图的图(点用实心圆绘制). 第二个是单独画下巴, 连成线, 用的是polylines方法.

我是4.10版本的opencv. 查阅官方py文档, 这是链接

完整代码:

import face_recognition
import numpy as np
import cv2 image = face_recognition.load_image_file("./data/奥巴马.png")
image2 = image.copy()
face_landmarks_list = face_recognition.face_landmarks(image)
# print(face_landmarks_list)
for each in face_landmarks_list:
print(each)
for i in each.keys():
print(i, end=': ')
print(each[i])
for any in each[i]:
image = cv2.circle(image, any, 3, (0,0,255), -1)
cv2.imshow("奥巴马", image) # 单独画下巴
for each in face_landmarks_list:
pts = np.array(each['chin'])
pts = pts.reshape((-1, 1, 2))
cv2.polylines(image2, [pts], False, (0, 255, 255)) # false 参数使其不闭合
cv2.imshow("奥巴马2", image2) cv2.waitKey(0)
cv2.destroyAllWindows()

在线摄像机版本:

import face_recognition
import numpy as np
import cv2 camera = cv2.VideoCapture(0) while True:
ret, image = camera.read()
image = cv2.flip(image, 1)
image2 = image.copy() face_landmarks_list = face_recognition.face_landmarks(image)
# print(face_landmarks_list)
for each in face_landmarks_list:
print(each)
for i in each.keys():
print(i, end=': ')
print(each[i])
for any in each[i]:
image = cv2.circle(image, any, 3, (0,0,255), -1)
cv2.imshow("奥巴马", image) # 单独画下巴
for each in face_landmarks_list:
pts = np.array(each['chin'])
pts = pts.reshap 大专栏  使用face_recognition进行人脸特征检测e((-1, 1, 2))
cv2.polylines(image2, [pts], False, (0, 255, 255)) # false 参数使其不闭合
cv2.imshow("奥巴马2", image2)
if cv2.waitKey(1000 // 12) & 0xff == ord("q"):
break cv2.destroyAllWindows()
camera.release()

附一份在线的人脸搜索代码, 人脸数据保存在相对路径./data/mans

import cv2
import face_recognition
import numpy as np
import os
import re # 人脸数据, 文件, 编码, 名字
files = os.listdir("./data/mans")
face_images = [0]*len(files)
face_encodings = [0]*len(files)
face_names = [0]*len(files) # 获取编码和名称
for i in range(len(files)):
face_images[i] = face_recognition.load_image_file('./data/mans/' + files[i])
face_encodings[i] = face_recognition.face_encodings(face_images[i])
if len(face_encodings[i]) > 0:
face_encodings[i] = face_encodings[i][0]
else:
face_encodings[i] = None
face_names[i] = re.findall(r'(.*)..*', files[i])[0]
print(face_names) # 人脸比较
# results = face_recognition.compare_faces(face_encodings[0], face_encodings[1])
# print(results) # 人脸距离
# face_distances = face_recognition.face_distance(face_encodings[0], face_encodings[1])
# index = np.argmin(face_distances)
# print(index) # camera = cv2.VideoCapture('./data/test.avi') # 从视频文件
camera = cv2.VideoCapture(0) # 从摄像头 while True:
ret, img = camera.read()
img = cv2.flip(img, 1)
# img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 灰度处理
locations = face_recognition.face_locations(img)
for top, right, bottom, left in locations:
cv2.rectangle(img, (left, top), (right, bottom), (255, 0, 0), 2)
sub_img = img[top:bottom, left:right]
sub_img_code = face_recognition.face_encodings(sub_img)
if len(sub_img_code) != 0:
face_distances = face_recognition.face_distance(face_encodings, sub_img_code[0])
print(face_distances)
index = np.argmin(face_distances)
name = face_names[index]
cv2.putText(img, name, (left, top - 20), cv2.FONT_HERSHEY_SIMPLEX, 1, 255, 2)
cv2.imshow('Face', img)
if cv2.waitKey(1000 // 12) & 0xff == ord("q"):
break cv2.destroyAllWindows()
camera.release()

使用face_recognition进行人脸特征检测的更多相关文章

  1. OpenCV教程(41) 人脸特征检测

          在OpenCV中,自带着Harr分类器人脸特征训练的文件,利用这些文件,我们可以很方面的进行人脸,眼睛,鼻子,表情等的检测.      人脸特征文件目录: ../opencv2.46/op ...

  2. 人工智能之基于face_recognition的人脸检测与识别

    不久乘高铁出行,看见高铁火车站已经实现了"刷脸进站",而且效率很高,很感兴趣,今天抽时间研究一下,其实没那么复杂. 我基本上是基于https://github.com/ageitg ...

  3. OpenCV4.1.0实践(2) - Dlib+OpenCV人脸特征检测

    待更! 参考: python dlib opencv 人脸68点特征检测

  4. Ubuntu下使用face_recognition进行人脸识别

    Face Recognition是一个基于Python的人脸识别库,在github上地址如下:https://github.com/ageitgey/face_recognition. 看着挺好玩,本 ...

  5. face_recognition开源人脸识别库:离线识别率高达99.38%

    基于Python的开源人脸识别库:离线识别率高达99.38%——新开源的用了一下感受一下 原创 2017年07月28日 21:25:28 标签: 人脸识别 / 人脸自动定位 / 人脸识别开源库 / f ...

  6. AI人工智能之基于OpenCV+face_recognition实现人脸识别

    因近期公司项目需求,需要从监控视频里识别出人脸信息.OpenCV非常庞大,其中官方提供的人脸模型分类器也可以满足基本的人脸识别,当然我们也可以训练自己的人脸模型数据,但是从精确度和专业程度上讲Open ...

  7. 在win10上安装face_recognition(人脸识别)

    github上有个项目face_recognition,是用于人脸识别的 主要是window上安装这个项目会繁琐些,linux上据项目文档上介绍是妥妥的. 项目地址:  https://github. ...

  8. face_recognition实时人脸识别

    具体安装移步:https://www.cnblogs.com/ckAng/p/10981025.html 更多操作移步:https://github.com/ageitgey/face_recogni ...

  9. Python 人工智能之人脸识别 face_recognition 模块安装

    Python人工智能之人脸识别face_recognition安装 face_recognition 模块使用系统环境搭建 系统环境 Ubuntu / deepin操作系统 Python 3.6 py ...

随机推荐

  1. 第04项目:淘淘商城(SpringMVC+Spring+Mybatis) 的学习实践总结【第二天】

    淘淘商城(SpringMVC+Spring+Mybatis)  是传智播客在2015年9月份录制的,几年过去了.由于视频里课上老师敲的代码和项目笔记有些细节上存在出入,只有根据日志报错信息作出适当的调 ...

  2. Java web之javascript(2020.1.6)

    1.js输出: windows.alert()---警告框 document.write()---写到html文档中 innerHTML---写到HTML元素 console.log()---写到浏览 ...

  3. Promoter complex|转录组水平RNA的复杂度|

    生命组学 Promoter complex Tata box识别位点 Enhancer加入之后增强转录 不确定性与确定性之间的关系,原因中存在这不确定性,但是结果表达又是确定的.因为promoter的 ...

  4. Python的IDE之Pycharm的使用

    Python的IDE之Pycharm的使用 一.为什么用IDE(Python集成开发环境-Pycharm) 到现在为止,我们也是写过代码的人啦,但你有没有发现,每次写代码要新建文件.写完保存时还要选择 ...

  5. Python程序中的进程操作--—--开启多进程

    Python程序中的进程操作-----开启多进程 之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创 ...

  6. 关于UDP通信的参考目录

    1.IP头,TCP头,UDP头,MAC帧头定义 2.深入理解TCP/UDP通信原理 其内部有提到关于wireshark抓包分析工具的使用 3.udp通讯中的connect()和bind()函数 其中有 ...

  7. jest 测试入门(一)

    说实话,作为前端来说,单元测试,并不是一种必须的技能,但是确实一种可以让你加法的技能 之前我一个库添加了单元测试,加完之后感悟颇深,所以写下这篇文章来记录 环境搭建 一般来说,普通的库,如果没有添加 ...

  8. 吴裕雄--天生自然 PYTHON3开发学习:迭代器与生成器

    list=[1,2,3,4] it = iter(list) # 创建迭代器对象 for x in it: print (x, end=" ") import sys # 引入 s ...

  9. apache commons类库的学习

    原文地址http://www.tuicool.com/articles/iyEbquE 1.1. 开篇 在Java的世界,有很多(成千上万)开源的框架,有成功的,也有不那么成功的,有声名显赫的,也有默 ...

  10. Perl:理解正则中“.”可匹配出回车符(“\n”)外任意字符的例子,配合 $^I 关键字

    要把下面文件的内容改了, Program name: graniteAuthor: Gilbert BatesCompany: RockSoftDepartment: R&DPhone: +1 ...