效果展示

动态效果


静态效果

未完待续。。。

素材

项目讲解、代码和素材

https://blog.csdn.net/wyx100/article/details/80428424

开发环境

win7sp1

python                 3.6.3
dlib                      19.7.0  
tensorflow            1.3.0rc0
keras                     2.1.5 
opencv-python      3.4.1+contrib
pillow                    4.2.1
numpy                   1.14.1+mkl
numpy                   1.12.1

软件下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/

实现步骤

1.读取图片

2.识别人脸

3.人脸区域用狗头图片替换

4.展示效果

通过对人脸大小(宽和高度)、左右、上下摆动、人脸倾斜度、色彩等计算,可以生成算法变换新脸,更优化新脸和背景的融合。

项目代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# video_face_swap.py
import os
import numpy as np
import sys
import time
import cv2
import dlibfrom keras.preprocessing import image as imagekeras
from keras.models import load_model
from PIL import Image, ImageDraw, ImageFontsize = 150
save_dir = os.path.join(os.getcwd(), 'saved_models')
model_name = 'keras_face_trained_model.h5'# 类别编码转换为中文名称返回
def return_name(codelist):names = ['樊胜美', '关雎尔', '邱莹莹']for it in range(0, len(codelist), 1):if int(codelist[it]) == 1.0:return names[it]# 类别编码转换为英文名称返回
def return_name_en(codelist):names = ['fsm', 'gje', 'qyy']for it in range(0, len(codelist), 1):if int(codelist[it]) == 1.0:return names[it]# 换脸
def swap_face(img1,rectangle1):# 加载新脸图片img2 = cv2.imread('dog2.png')# 获取人脸宽度w = (rectangle1.right() - rectangle1.left()) * 1.5w = int(w)# 调整新脸图片大小img2 = cv2.resize(img2, (w, w))# 截取背景图片被替换部分图片top = rectangle1.top()- 20left = rectangle1.left() - 20roi = img1[top:top + w, left:left + w]# 生成新脸掩码img2gray = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)ret, mask = cv2.threshold(img2gray, 254, 255, cv2.THRESH_BINARY)mask_inv = cv2.bitwise_not(mask)# 取roi 中与mask 中不为零的值对应的像素的值,其他值为0# 注意这里必须有mask=mask 或者mask=mask_inv, 其中的mask= 不能忽略img1_bg = cv2.bitwise_and(roi, roi, mask=mask)# 取roi 中与mask_inv 中不为零的值对应的像素的值,其他值为0。# 提取新脸图片中脸部分(背景去掉)img2_fg = cv2.bitwise_and(img2, img2, mask=mask_inv)# 背景和新脸合成dst = cv2.add(img1_bg, img2_fg)img1[top:top + w, left:left + w] = dstreturn img1# 区分和标记视频中截图的人脸
def face_rec():global  image_ouputmodel = load_model(os.path.join(save_dir, model_name))camera = cv2.VideoCapture("2.mp4") # 视频# camera = cv2.VideoCapture(0) # 摄像头while (True):read, img = camera.read()try:# 未截取视频图片结束本次循环if not (type(img) is np.ndarray):continuegray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 图片转为灰度图except:print("Unexpected error:", sys.exc_info()[0])break# 使用detector进行人脸检测# 使用dlib自带的frontal_face_detector作为我们的特征提取器detector = dlib.get_frontal_face_detector()dets = detector(gray_img, 1) # 提取截图中所有人脸facelist = []for i, d in enumerate(dets): # 依次区分截图中的人脸x1 = d.top() if d.top() > 0 else 0y1 = d.bottom() if d.bottom() > 0 else 0x2 = d.left() if d.left() > 0 else 0y2 = d.right() if d.right() > 0 else 0img = cv2.rectangle(img, (x2, x1), (y2, y1), (255, 0, 0), 2) # 人脸画框face = img[x1:y1, x2:y2]face = cv2.resize(face, (size, size))x_input = np.expand_dims(face, axis=0)prey = model.predict(x_input) # 人脸标记预测facelist.append([d,  return_name(prey[0])]) # 存储一张图中多张人脸坐标和标记(姓名)cv2_im = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # cv2和PIL中颜色的hex码的储存顺序不同pil_im = Image.fromarray(cv2_im)# 图片上打印draw = ImageDraw.Draw(pil_im)# 第一个参数为字体文件路径,第二个为字体大小font = ImageFont.truetype("simhei.ttf", 20, encoding="utf-8")try:for i in facelist:# 人脸标记写入图片,第一个参数为打印的坐标,第二个为打印的文本,第三个为字体颜色,第四个为字体draw.text((i[0].left() + int((i[0].right() - i[0].left()) / 2 - len(i[1]) * 10), i[0].top() - 20), i[1],(255, 0, 0), font=font)# PIL图片转换为cv2图片cv2_char_img = cv2.cvtColor(np.array(pil_im), cv2.COLOR_RGB2BGR)# 随机人脸用新脸替换cv2_swap_img = swap_face(cv2_char_img, facelist[0][0])except:print("Unexpected error:", sys.exc_info()[0])continue# 显示标记和换脸后图片cv2.imshow("camera", cv2_swap_img)if cv2.waitKey(1) & 0xff == ord("q"):breakcv2.destroyAllWindows()if __name__ == "__main__":face_rec()

完整项目下载

为方便没积分童鞋,请加企鹅,共享文件夹。

包括:代码、数据集合(图片)、已生成model、安装库文件等。

人工智能python+dlib+opencv技术10分钟实现抖音人脸变狗头详细图文教程和完整项目代码相关推荐

  1. python画狗头_人工智能python+dlib+opencv技术10分钟实现抖音人脸变狗头详细图文教程和完整项目代码...

    效果展示 动态效果 静态效果 未完待续... 素材 项目讲解.代码和素材 开发环境 win7sp1 python                 3.6.3 dlib                 ...

  2. 人脸检测和识别(中文标记)完整项目源代码(基于深度学习+python3.6+dlib+PIL+CNN+(tensorflow、keras)10分钟实现 区分欢乐颂中人物详细图文教程和完整项目代码)

    转载请注明:https://blog.csdn.net/wyx100/article/details/80428424 效果展示 未完待续... 环境配置 win7sp1 python         ...

  3. 如何实现抖音狗头,人工智能,附完整项目代码

    详细见 人工智能python+dlib+opencv技术10分钟实现抖音人脸变狗头详细图文教程和完整项目代码 https://blog.csdn.net/wyx100/article/details/ ...

  4. 60分钟搞定mac安装win10系统(详细图文教程)

    请不要鄙视macbook装windows系统,有时候因为工作需要才装的双系统.勿喷~ 这两台电脑配置,都是可以装上win10的 一台2016年的15寸 一台2017年的13寸 正式开始:(准备工作) ...

  5. 音视频开发(23)---音视频直播技术--10分钟搭建好直播平台

    音视频直播技术--10分钟搭建好直播平台 前言 今天给大家讲一下如何搭建最简单的音视频直播平台.在之前的文章中我已经给大家介绍过音视频直播技术架构,没看过的同学可以看一下.了解了直播的技术架构,我们就 ...

  6. Python基于OpenCV的实时疲劳检测[源码&演示视频&部署教程]

    1.图片演示 2.视频演示 [项目分享]Python基于OpenCV的实时疲劳检测[源码&演示视频&部署教程]_哔哩哔哩_bilibili 3.检测方法 1)方法 与用于计算眨眼的传统 ...

  7. VS2019配置opencv详细图文教程和测试代码

    摘要: vs2019新鲜出炉,配置opencv又有哪些不一样呢,这个教程将会一步一步的教你如何配置opencv和跑动opencv一个简单的项目. 测试代码请在原文找到,转发备注原文链接:https:/ ...

  8. opencv有基于c语言的教程吗_VS2019配置opencv详细图文教程和测试代码的实现

    摘要: vs2019新鲜出炉,配置opencv又有哪些不一样呢,这个教程将会一步一步的教你如何配置opencv和跑动opencv一个简单的项目. 环境: 系统:win10系统截至20190523版本 ...

  9. vs2019安装python库_vs2019安装和使用详细图文教程

    vs2019已经在4月2日正式发布,vs2019发布会请看这个链接: vs2019和vs2017一样强大,项目兼容,不用互相删除,而且C/C++,Python,F#,ios,Android,Web,N ...

最新文章

  1. windows 2003 禁止UDP的bat
  2. linux命令 把文件夹拷贝一遍_cp 快捷命令:复制文件到多个目录
  3. 深度学习和目标检测系列教程 9-300:TorchVision和Albumentation性能对比,如何使用Albumentation对图片数据做数据增强
  4. arm linux 中断优先级,ARM中断处理过程
  5. 计算机 电工学简明教程,电工学简明教程复习要点
  6. .net使用正则表达式校验、匹配字符工具类
  7. 线性代数与矩阵论 定理 1.3.9 唯一析因定理
  8. 后台填充_单元格噩梦终于有救?500多行隔行填充,我就两步!
  9. Hyper-V云解决方案-IT产业新变革
  10. 性能高的tftp服务器,tftp服务器软件
  11. Nero Multimedia Suite 10.6.11300
  12. 一个优秀程序员必备的软件背景/桌面壁纸/集原美/鬼刀.....
  13. 字母数字下划线常用正则表达式
  14. matlab怎么做空间计量,六步学会用MATLAB做空间计量回归详细步骤
  15. android 服务英文,Android recovery 模式 中英文对照
  16. SAP 发出商品业务配置
  17. python爬取京东手机数据_Python数据爬虫学习笔记(21)爬取京东商品JSON信息并解析...
  18. Java自己写一个json转换器,对象转json,json转对象
  19. ABAQUS如何输出应力应变曲线(XY曲线)
  20. java ajax教程_AJAX Java

热门文章

  1. 把数组对象[{key1:val1},{key2:val2}] 的key val 分割成独立的数组
  2. c语言 计算子网掩码位数,子网数、主机数与子网掩码的关系
  3. Java-购物车实践与应用
  4. US zip code
  5. Mac自带的录屏功能
  6. 「PAT乙级真题解析」Basic Level 1053 住房空置率 (问题分析+完整步骤+伪代码描述+提交通过代码)
  7. 南电转债上市价格预测
  8. 加州大学圣地亚哥计算机硕士申请,多次催促 成功申请加州大学圣地亚哥分校计算机科学...
  9. js ,DOM节点,制作点名器
  10. Yapieasyapi文档管理平台安装与使用