环境以及执行步骤

  • 相关介绍
    • 环境配置
    • 相关库安装介绍
    • 上代码
    • github地址
    • 动图介绍
    • 改进

相关介绍

你好! 项目起初来源于一本科生的毕业设计,由于我给了一版更加优秀,所以初始版本的例子给予分享。其中可能最难的地方就在于环境配置,其他的要求基本没啥。对了可以随意的添加你想要的图片效果,就在文件夹里替换就行。本次代码也是基于这个大佬的文章

https://www.makeartwithpython.com/blog/deal-with-it-generator-face-recognition/

环境配置

起初Opencv就不是为了Python所使用的,谁让他简单易用而且库多呢,对吧,而且谁让我这两年就学了python呢(此处狗头)。原谅我才疏学浅:

  1. win ,window10+python3.6以上+vs2017+opencv+pycharm;
  2. mac,macos+python3.6以上+opencv+pycharm;

详细库如下所示:

相关库安装介绍

一般玩python的人都知道,这些库就跟做饭加酱油一样,放那种调料,该怎么放它饭好吃一直是各个csdn大佬的贡献,所以我也不多比比,直接上各位大佬的教程。
1、切记安装一定要对应python版本号,建议python3.6以上,下面是安装教程。

https://blog.csdn.net/u012325865/article/details/83961127

2、由于在安装python版本的opencv支持库回遇到版本以及32位64位的问题,需要自己去寻找python版本的.whl下载.下面的地址是各种whl网址

https://www.lfd.uci.edu/~gohlke/pythonlibs/

上面网址详细说明了whl的库文件如何使用。

https://blog.csdn.net/weixin_38168838/article/details/99738371?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-11&spm=1001.2101.3001.4242

3、cmake与dlib安装比较复杂,这两个库是必须要安装的,且需要支持的环境,而且由于windows系统并不集成vs相关库而opencv却又是需要安装vs库,所以建议直接下菜vs2017版本。下面网址会详细描述。

https://www.cnblogs.com/wdzn/p/9675821.html

4、待各种库文件安装完毕需要执行realtime_liu即可进行视频实时换眼镜,这里在弹出框里进行按键操作,d按键代表开始,c按键代表替换眼镜,q按键代表退出程序。

上代码

说得多不如做的做,直接上代码。

#具体啥玩意的你就点击运行就行了。d键是开始,c键是替换照片,q键是结束。这代码一看就会。
import dlib
from PIL import Image, ImageDraw, ImageFont
import randomimport cv2from imutils.video import VideoStream
from imutils import face_utils, translate, rotate, resizeimport numpy as npvs = VideoStream().start()detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')max_width = 500
frame = vs.read()
frame = resize(frame, width=max_width)fps = vs.stream.get(cv2.CAP_PROP_FPS) # need this for animating proper durationanimation_length = fps * 5
current_animation = 0
glasses_on = fps * 3# uncomment for fullscreen, remember 'q' to quit
# cv2.namedWindow('deal generator', cv2.WND_PROP_FULLSCREEN)
#cv2.setWindowProperty('deal generator', cv2.WND_PROP_FULLSCREEN,
#                          cv2.WINDOW_FULLSCREEN)deal = Image.open("./Glasses/0.png")
text = Image.open('text.png')dealing = False
number =0
while True:frame = vs.read()frame = resize(frame, width=max_width)img_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)faces = []rects = detector(img_gray, 0)img = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))# print(rects)for rect in rects:face = {}shades_width = rect.right() - rect.left()# predictor used to detect orientation in place where current face isshape = predictor(img_gray, rect)shape = face_utils.shape_to_np(shape)# grab the outlines of each eye from the input imageleftEye = shape[36:42]rightEye = shape[42:48]# compute the center of mass for each eyeleftEyeCenter = leftEye.mean(axis=0).astype("int")rightEyeCenter = rightEye.mean(axis=0).astype("int")# compute the angle between the eye centroidsdY = leftEyeCenter[1] - rightEyeCenter[1]dX = leftEyeCenter[0] - rightEyeCenter[0]angle = np.rad2deg(np.arctan2(dY, dX)) # print((shades_width, int(shades_width * deal.size[1] / deal.size[0])))# 图片重写current_deal = deal.resize((shades_width, int(shades_width * deal.size[1] / deal.size[0])),resample=Image.LANCZOS)current_deal = current_deal.rotate(angle, expand=True)current_deal = current_deal.transpose(Image.FLIP_TOP_BOTTOM)face['glasses_image'] = current_dealleft_eye_x = leftEye[0,0] - shades_width // 4left_eye_y = leftEye[0,1] - shades_width // 6face['final_pos'] = (left_eye_x, left_eye_y)# I got lazy, didn't want to bother with transparent pngs in opencv# this is probably slower than it should be# 图片动画以及配置if dealing:# print("current_y",int(current_animation / glasses_on * left_eye_y))if current_animation < glasses_on:current_y = int(current_animation / glasses_on * left_eye_y)img.paste(current_deal, (left_eye_x, current_y-20), current_deal)else:img.paste(current_deal, (left_eye_x, left_eye_y-20), current_deal)# img.paste(text, (75, img.height // 2 - 52), text)# 起初动画配置if dealing:current_animation += 1frame = cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)# 按键选择cv2.imshow("deal generator", frame)key = cv2.waitKey(1) & 0xFF#退出程序if key == ord("q"):break# 开始程序if key == ord("d"):dealing = not dealing# 图片切换if key == ord("c"):# 让图片从上面重新开始# current_animation = 0number = str(random.randint(0, 8))print(number)deal = Image.open("./Glasses/"+number+".png")
cv2.destroyAllWindows()
vs.stop()

github地址

这是大佬原始
https://github.com/burningion/automatic-memes.git
这是我的也就是本文的
https://github.com/Proshare/Auto-Glasses.git

动图介绍

本人太丑,我就不上了,就随便整个别人的吧(原始老哥贼帅),我这唯一区别就是可以替换眼镜。

改进

由于本科毕设不能太low,就最好能做到那种眼镜360度跟着头部来进行角度替换,所以这个就过时了。于是出了第二版,这里就不上代码了,等明年这同学搞完我再贴上代码。类似于这种。
http://pan.baidu.com/s/1dDGs7Sl

基于Python+OpenCV的人脸识别实现带墨镜效果相关推荐

  1. python带界面的人脸识别_基于Python的人脸识别实现带墨镜效果

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. DEAL WITH IT是这样一个效果,眼镜从屏幕外飞进来,带在用户的脸上.这种效果的最佳实例是以一种独特 ...

  2. python读取视频流做人脸识别_基于 Python + OpenCV 进行人脸识别,视频追踪代码全注释...

    1 #-*- coding: utf-8 -*- 2 from __future__ importunicode_literals3 #操作文件 4 importos5 #科学计算 6 importn ...

  3. Python人脸识别教程 - 基于Python的开源人脸识别库:离线识别率高达99.38%

    Python人脸识别教程 - 基于Python的开源人脸识别库:离线识别率高达99.38% 仅用 Python 和命令行就可以实现人脸识别的库开源了.该库使用 dlib 顶尖的深度学习人脸识别技术构建 ...

  4. 基于Python的开源人脸识别库:离线识别率高达99.38%

    基于Python的开源人脸识别库:离线识别率高达99.38% 2019年04月18日 18:13:18 AI终结者 阅读数 1233 项目地址:https://github.com/ageitgey/ ...

  5. 【开源分享】基于Python+OpenCV+PyQt5车牌识别(GUI界面)

    亲测无错:基于Python+OpenCV+PyQt5车牌识别(GUI界面)绝对可以用的!!!!! 基于Python+OpenCV+PyQt5车牌识别(GUI界面) 参考文档

  6. python opencv生成tf模型_基于TensorFlow+ Opencv 的人脸识别 和模型训练

    一.准备工作 本次实例的anaconda 环境 (有需要的自己导入anaconda) 链接:https://pan.baidu.com/s/1IVt2ap-NYdg64uHSh-viaA 提取码:g7 ...

  7. 基于python+opencv的人脸检测+

    人脸检测分为两种:一种是基于知识的,一种是基于深度学习的.深度不会学习 人脸识别属于目标检测,主要涉及两个方面: ①先对检测的物体进行概率统计,从而知道待检测对象的一些特征,建立其目标的检测模型 ②用 ...

  8. 万张PubFig人脸数据实现基于python+OpenCV的人脸特征定位程序(1)

    在最近刷今日头条以及其他媒体软件时,经常会发现一些AI换脸的视频,于是我想,可不可以自己实现一个可以进行人脸识别的软件程序.我的具体流程是先配合python网络爬虫先进行万张PubFig人脸公共图片的 ...

  9. python+opencv实现人脸识别|采用现成训练好的模型

    一.图片人脸检测(opencv) 1.安装opencv环境 介绍windows中opencv在python3上的实现,我的系统环境win10+python3.6+opcv3.4.1 首先去网站下载Op ...

最新文章

  1. android 获取手机GSM/CDMA信号信息,并获得基站信息
  2. Xcode6中添加pch文件
  3. C#中将long浮点数格式化为{H:min:s.ms}格式的字符串的方法
  4. javap(反汇编命令)详解
  5. C语言中strdup函数使用方法
  6. Spring Data JPA 从入门到精通~JpaSpecificationExecutor的使用方法
  7. 中fuse_一种用于将mRNA快速转染到活细胞细胞质中的融合试剂
  8. 六、hibernate之HQL
  9. python支持向量机库_为支持向量机库LIBSVM使用python绑定的示例
  10. ubuntu 安装gcc
  11. 局域网打印机一键共享工具_AppStore今日推荐分享 支持局域网设备共享的抓包工具...
  12. 机器学习算法应用场景实例六十则
  13. Windows 资源保护找到了损坏文件,但其中有一些文件无法修复
  14. 2015-10-28 C#4
  15. 百度地图保存图片_如何获得可编辑的专题分析地图底图?
  16. vue+高德地图实现多边形范围内标点
  17. 20.2 Java写文件之OutputStream学习
  18. 一维到十维!!你了解多少?
  19. oracle数据库巡检-全面检查
  20. ORCAD LIBRARY BUILDER17.2使用

热门文章

  1. android dhcp 服务器,安卓通过DHCP协议获取IP地址的过程
  2. python UDP通信数据包解析将结果写入Excel中
  3. 如何使用jQuery创建表格Zebra Stripes效果
  4. C语言 -- #deifne 和 typedef 的使用
  5. 应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
  6. OpenCV图像几何变换专题(缩放、翻转、仿射变换及透视)【python-Open_CV系列(五)】
  7. Qt在Win10下调用系统的软键盘
  8. es与mysql数据同步 (go-mysql-es)
  9. .Net core基于xUnit的单元测试查看测试覆盖率
  10. text-transform设置单词首字母大写