face_recognition是一个功能强大,简单易用的面部识别开源项目,可以从Python或命令行识别和操作人脸。

这篇文章主要参考github中两个比较有意思的开源人脸相关项目

face_recognition

一款入门级的人脸、视频、文字检测以及识别的项目.

这篇博客只是对其中的某些简单实例进行复现和解读,如果想实现更多有意思的项目可以去上面的网址clone运行.

一   绘制人脸轮廓

完整代码如下:

from PIL import Image, ImageDraw
import face_recognition# Load the jpg file into a numpy array
image = face_recognition.load_image_file("images/002.jpg")# Find all facial features in all the faces in the image
face_landmarks_list = face_recognition.face_landmarks(image)print("I found {} face(s) in this photograph.".format(len(face_landmarks_list)))# Create a PIL imagedraw object so we can draw on the picture
pil_image = Image.fromarray(image)
d = ImageDraw.Draw(pil_image)for face_landmarks in face_landmarks_list:print face_landmarks.keys()# Print the location of each facial feature in this imagefor facial_feature in face_landmarks.keys():print("The {} in this face has the following points: {}".format(facial_feature, face_landmarks[facial_feature]))# Let's trace out each facial feature in the image with a line!for facial_feature in face_landmarks.keys():d.line(face_landmarks[facial_feature], fill=(255,0,255), width=2)# Show the picture
pil_image.show()
pil_image.save('images/11.jpg')

运行结果如下:

左边为绘制脸部轮廓之后的效果图,   右边是原图

上述代码可以直接copy运行,主要参考face_recognition提供的官方代码,下面对主要语句进行解读

第一步  加载图像     RGB-->numpy

image = face_recognition.load_image_file("images/002.jpg")

调用face_recognition模块的load_image-file()函数,将图片转为numpy数组,默认mode为RGB也就是彩色图像

 第二步  对图片所有人脸提取脸部特征

# Find all facial features in all the faces in the image
face_landmarks_list = face_recognition.face_landmarks(image)

调用face_recognition模块的face_landmarks()函数返回脸部特征字典 

这里为了对返回值有更清晰的认识,我查看了函数的源码,这里是截图

可以清楚看到在默认mode = ''large''时,函数返回的face feature有'chin', 'left_eyebrow', 'nose_bridge'等,在代码的输出界面可以看的更清楚,左边对应的是字典的key也就是上面列出的feature,对应的value是各自对应的位置信息.

在第二步我们已经得到了人脸的特征list,每一个特征都是一个字典,所以下一步我们遍历这个list,对其中的每一个特征都进行打印输出并且绘线显示.

第三步  遍历循环  绘线

for face_landmarks in face_landmarks_list:print face_landmarks.keys()# Print the location of each facial feature in this imagefor facial_feature in face_landmarks.keys():print("The {} in this face has the following points: {}".format(facial_feature, face_landmarks[facial_feature]))# Let's trace out each facial feature in the image with a line!for facial_feature in face_landmarks.keys():d.line(face_landmarks[facial_feature], fill=(255,0,255), width=2)

第四步  显示并保存图片 

# Show the picture
pil_image.show()
#save the picture
pil_image.save('images/11.jpg')

对于提取图片中的人脸和人脸美妆放在下次博客,以免篇幅过长

reference

face-recognition doc

          face_recognition

一款入门级的人脸、视频、文字检测以及识别的项目.

face_Recognition--绘制人脸轮廓相关推荐

  1. 人脸识别python face_recognize_【python+face_recognition】人脸识别初始

    [python+face_recognition]人脸识别初始 发布时间:2018-09-01 12:03, 浏览次数:366 , 标签: python face recognition face_r ...

  2. 基于OpenCV实战:绘制图像轮廓(附代码)

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 山区和地形图中海拔高的区域划出的线称为地形轮廓,它们提供了地形的高 ...

  3. #绘制圆心_SolidWorks2018 绘制草图轮廓练习

    欢迎大家来学SolidWorks2018,学习它强大的绘图功能,还有零件图,装配体,工程图.曲面,钣金,模具,焊件都没问题.关注我学习SolidWorks2018经验分享,学习一技之长. 来分析一下这 ...

  4. HALCON示例程序find_pads.hdev通过fit_rectangle2_contour_xld绘制精准轮廓

    HALCON示例程序find_pads.hdev通过fit_rectangle2_contour_xld绘制精准轮廓 示例程序源码(加注释) 关于显示类函数解释 dev_update_pc ('off ...

  5. HTML5: 利用SVG动画动态绘制文字轮廓边框线条

    DEMO: 点击这里看效果 简要教程 这是一款很酷的html5 svg线条动态绘制文字轮廓边框动画特效.SVG路径动画在网页设计中是一项热门的技术,它允许我们绘制各种简单.精美的图标和文字.关于使用S ...

  6. ps修改dds贴图_ZBrush建模师教你zbrush与Photoshop绘制人脸贴图,听仔细了哈

    绘制写实的人脸贴图,是我们在次世代游戏角色制作流程中经常遇到的.我们可以在mudbox或者zbrush中把照片上的人脸映射到模型上面.在这里我主要介绍下zbrush结合Photoshop绘制人脸贴图. ...

  7. opencv 绘制图像轮廓

    图像轮廓概念 轮廓是一系列相连的点组成的曲线,代表了物体的基本外形. 谈起轮廓不免想到边缘,它们确实很像.简单的说,轮廓是连续的,边缘并不全都连续(下图).其实边缘主要是作为图像的特征使用,比如可以用 ...

  8. ubuntu下用Qt实现人脸识别之检测人脸并绘制人脸框(三)

    ubuntu下用Qt实现人脸识别之检测人脸并绘制人脸框(三) 要检测出人脸并且还要识别出这个人是谁,就得用到人脸算法,这个算法如果你足够牛X的话可以自己写出来,当然,如果像我一样是个小菜鸟的话就得领悟 ...

  9. vue-echarts绘制地图轮廓

    记录Echarts + Vue 踩坑 使用Echarts 来 绘制地图轮廓图 第一步 要引入 Echarts 引入Echarts/map/ 下的 地区.js 文件 第二步 在视图中, 放置地图容器 第 ...

最新文章

  1. 那些复杂的技术设计的开始离我们并不遥远
  2. asp.net 创建文件夹时出错:未找到路径“D:\”的一部分。(asp.net 使用 FSO)
  3. bzoj 4602: [Sdoi2016]齿轮
  4. 网站开发绝不像你看到的那么简单!
  5. Exim4的简易部署
  6. python 文件操作 os.readlines()函数用法
  7. Nginx 301跳转踩坑总结
  8. ECMA-335(CLI)标准 读书笔记(第一部:概念和架构 第7章)
  9. oKit项目管理软件试用及感受
  10. SAP Fiori应用里对国际化RTL需求(right-to-left)的支持
  11. JAVA进阶教学之(序列化和反序列化)
  12. js中数据结构数组Array、映射Map、集合Set、对象、JSON
  13. python数字图像处理(6):图像的批量处理
  14. 机器学习笔记(二):矩阵、环境搭建、NumPy | 凌云时刻
  15. D.579 - ClockHands
  16. 水系图一般在哪里找得到_腾远带你了解:虹吸排水系统原理、组成及应用优势...
  17. 有序表,二叉排序树,二叉平衡树平均查找长度比较例题 二叉平衡树的高度
  18. 当yum安装包时显示系统空间不足,求指教
  19. 一直在寻找:我亲爱的朋友。
  20. System.gc()介绍

热门文章

  1. CSDN周赛第36期:赢热门实体图书《算法竞赛》和定制周边
  2. linux新建用户组、用户
  3. 详解java重定向和转发的区别
  4. 绝地求生亚服的账号所有服务器通用吗,绝地求生亚服在哪 怎么进入亚服服务器...
  5. .html文件中,数字外加圈的代码如何写,例如①
  6. 水星路由器设置的详细方法介绍(图文教程)
  7. Java 微信公众号上传永久素材的方法
  8. 登录ChatGPT时提示Sorry, you have been blocked(对不起,您已被阻止)
  9. 《防御阵型》UI分析
  10. 华润大学ldap账号是什么_认证配置 - 接入 LDAP / AD 域账号(Beta) - 《KubeSphere v2.1 使用手册》 - 书栈网 · BookStack...