任务

在Windows10系统下,用python,在jupyter notebook 结合cv2、dlib、face_recognition、matplotlib.pyplot等库进行摄像头实时捕获人脸、简单的AI换脸。

目录

Ⅰ仅依赖cv2实现摄像头实时人脸捕获

Ⅱ 依赖于cv2、dlib实现摄像头实时人脸捕获

Ⅲ 用PIL、face_recognition、matplotlib.pyplot等实现简单的AI换脸


Ⅰ仅依赖cv2实现摄像头实时人脸捕获

导入cv2,打开摄像头。

cv2.VideoCapture()参数0表示打开笔记本内置摄像头。

object的参数、用法等可以用dir或导入inspect进行查看。

import cv2
cap=cv2.VideoCapture(0)

定义函数,输入图片,选择cv2中能进行特定筛选的级联分类器(如此出选了正脸),并画出人脸矩形框,返回添加上矩形框的图片。

def detect(img):face_cascade=cv2.CascadeClassifier(r'F:\Python-3.8.2\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml')#face_cascade=cv2.CascadeClassifier("F:\Python-3.8.2\Lib\site-packages\cv2\data\haarcascade_eye.xml")gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)faces=face_cascade.detectMultiScale(gray,1.1,5)#print(len(faces))for (x,y,w,h) in faces:img=cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)return img

cap.read()返回两个值:一个布尔值 true/false,用来判断读取视频是否成功/是否到视频末尾;另一个是图像对象,图像的三维矩阵q

waitKey(delay) :不断刷新图像 , 频率时间为delay , 单位为ms ,返回值为当前键盘按键值的ASCII码,如ESC为27

0x表示16进制,16进制中的F等于2进制中4位:1111,也等于十进制的15,FF转化为2进制即1111 1111

按位与运算符(&). 参加运算的两个数据,按二进制位进行“与”运算,同位中两者皆为1是返回1,否则为0。负数用起二进制补码进行运算。一个负数按照绝对值大小转换成的二进制数,然后最高位补1。

由于键盘按键的ASCII码不一定都是8位2进制数,可能有超过8位的,当其与0xFF进行&运算时,超过8位的那些都成了0,没超过的都返回原值

If语句:当按下键盘中的ESC键时,结束while循环,结束人脸捕获。

cap.release() 停止捕获视频(release注意拼写,不要写成ralease)

cv2.destroyAllWindows() 关闭相应的显示窗口

while True:_,frame=cap.read()frame=detect(frame)cv2.imshow("video",frame)if cv2.waitKey(1000)&0xFF==27:break
cap.release()
cv2.destroyAllWindows()

完整代码:

import cv2
cap=cv2.VideoCapture(0)
def detect(img):face_cascade=cv2.CascadeClassifier(r'F:\Python-3.8.2\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml')#face_cascade=cv2.CascadeClassifier("F:\Python-3.8.2\Lib\site-packages\cv2\data\haarcascade_eye.xml")gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)faces=face_cascade.detectMultiScale(gray,1.1,5)for (x,y,w,h) in faces:img=cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)return img
while True:_,frame=cap.read()frame=detect(frame)cv2.imshow("video",frame)if cv2.waitKey(1000)&0xFF==27:break
cap.release()
cv2.destroyAllWindows()

Ⅱ 依赖于cv2、dlib实现摄像头实时人脸捕获

detector识别人脸,并用矩形框定人脸区域。

predictor指定区域内给人脸关键部位打点。

dlib.get_frontal_face_detector():有参数,括号不能漏掉。

detector(frame,1):frame表示图像,1表示采样次数,返回图像中所有包含人脸的矩形框。

cv2.circle():参数依次是图像、圆心、半径、颜色、厚度。其中厚度:正数表示边框粗细,负数表示绘制实心圆。

import cv2
import dlib
cap=cv2.VideoCapture(0)
predictor=dlib.shape_predictor(r"F:\Python-3.8.2\Lib\site-packages\face_recognition_models\models\shape_predictor_68_face_landmarks.dat")
detector=dlib.get_frontal_face_detector()
while True:_,frame=cap.read()dets=detector(frame,1)if len(dets)!=0:for i in range(len(dets)):shape=predictor(frame,dets[0])for p in shape.parts():cv2.circle(frame,(p.x,p.y),3,(0,0,0),-1)cv2.imshow("video1",frame)if cv2.waitKey(1) & 0xFF==27:break
cap.release()
cv2.destroyAllWindows()

Ⅲ 用PIL、face_recognition、matplotlib.pyplot等实现简单的AI换脸

PIL:Python Imaging Library,用于图像处理,但PIL仅支持到Python 2.7,又年久失修,于是一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python 3.x,又加入了许多新特性,因此直接安装使用Pillow。

安装Python时已经把pip3也备好了,可以直接使用pip3安装PIL

cmd调出命令提示符,输入命令行:pip3 install pillow

导入所需各库。

from PIL import Image
import face_recognition
import matplotlib.pyplot as plt

定义函数,用face_recognition识别人脸,并返回人脸位置矩形框。该人脸位置矩形框呈现(上,右,下,左)四元组形式。

后面PIL的裁剪、粘贴时的位置大小,识别的是(左,上,右,下)四元组的格式,因而在识别结束后进行顺序替换,以便后续操作。

detect函数,输入图片,返回人脸矩形框位置。

def detect(filename):image=face_recognition.load_image_file(filename)face_locations=face_recognition.face_locations(image)face_num=len(face_locations)for i in range(0,face_num):a=face_locations[i][0]b=face_locations[i][1]c=face_locations[i][2]d=face_locations[i][3]box=(d,a,b,c)return box

对两张目标图片进行函数调用,获得人脸大小及位置。

Image.open(filename):打开图片

img.convert():参数为“L”转换为灰度图像,“P”转换为8位彩色图像,“RGBA”转换为32位彩色图像

img.crop(box):按大小位置裁剪,box为一个(左,上,右,下)四元组

img.resize(size):重新定义图片大小,size为(横,竖)二元组。

img.paste(filename,box):在img上指定位置粘贴filename图片,box大小与filename完全一致

box1=detect("zel1.jpg")
box2=detect("zel2.jpg")
img1=Image.open("zel1.jpg").convert("L").crop(box1)
img2=Image.open("zel2.jpg").convert("L")
size2=(box2[2]-box2[0],box2[3]-box2[1])
img1new=img1.resize(size2)
img2.paste(img1new,box2)
plt.imshow(img2)
plt.axis("off")
plt.show()

完整代码:

from PIL import Image
import face_recognition
import matplotlib.pyplot as plt
def detect(filename):image=face_recognition.load_image_file(filename)face_locations=face_recognition.face_locations(image)face_num=len(face_locations)for i in range(0,face_num):a=face_locations[i][0]b=face_locations[i][1]c=face_locations[i][2]d=face_locations[i][3]box=(d,a,b,c)return box
box1=detect("zel1.jpg")
box2=detect("zel2.jpg")
img1=Image.open("zel1.jpg").convert("L").crop(box1)
img2=Image.open("zel2.jpg").convert("L")
print(type(img2))
size2=(box2[2]-box2[0],box2[3]-box2[1])
img1new=img1.resize(size2)
img2.paste(img1new,box2)
plt.imshow(img2)
plt.axis("off")
plt.show()

运行结果:原图:zel1:zel2:

week3 摄像头捕获人脸 AI换脸相关推荐

  1. python读取视频流做人脸识别_基于OpenCV和Keras实现人脸识别系列——二、使用OpenCV通过摄像头捕获实时视频并探测人脸、准备人脸数据...

    基于OpenCV和Keras实现人脸识别系列手记: 项目完整代码参见Github仓库. 本篇是上面这一系列手记的第二篇. 在Opencv初接触,图片的基本操作这篇手记中,我介绍了一些图片的基本操作,而 ...

  2. zao AI换脸,说说自己对人脸识别的一些理解

    最近这几天一款叫做zao的app制作的视频火爆了朋友圈,借用朋友圈的一位朋友制作的视频,确实非常厉害. 制作也非常简单,只需要使用带走人脸的照片,替换app中提供的模板就可以生成视频,被称为AI换脸. ...

  3. 实现 AI 换脸的第一步:人脸搜索

    前段时间,AI 换脸这条新闻你关注了吗? 说的是一位博主将 1994 年版<射雕英雄传>里朱茵的脸换成了杨幂的脸.因为该视频涉及到版权问题已被下架,但大家可以看看图片对比来感受一下&quo ...

  4. 著名ai换脸网站_AI如何从著名的死去艺术家那里删除新音乐

    著名ai换脸网站 Love it or hate it, the new Star Wars trilogy made history. Forget about film critics - I'm ...

  5. AI“换脸”打开潘多拉魔盒,如何应对?

    来源:科学网 近日,一款名为"ZAO"的换脸APP引发舆论关注.用户上传照片,就可以把影视剧主角的脸替换成用户自己的脸.在过把"明星瘾"的同时,也让大众关注到& ...

  6. 支付宝回应 AI 换脸风险;新 iPhone 或将于 13 号接受预订;Linux Lite 4.6 发布 | 极客头条...

    快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有 ...

  7. 再也不要相信你的眼睛:步步逼近的AI换脸术

    在座的各位,是不是已经试过人脸解锁手机了?是不是尝试过刷脸购物了?玩过人脸识别的动物表情小游戏了没?如果都有的话,那么想必咱们可以达成一个共识:AI在人脸这件事上已经越来越精通了. 如果说识别只是AI ...

  8. “AI换脸”诈骗背后,如何应对黑灰产使用手段?

    目录 诈骗是如何发生的? AI换脸诈骗的操作防范 AI换脸的风险分析与技术防范 近日,警方通报了一起使用智能AI技术进行电信诈骗的案件.被骗者是福州市某科技公司法人代表郭先生,他通过微信视频接到自己好 ...

  9. 我试了下《复仇者联盟》AI换脸系列,当了英雄的我现在很慌...

    大数据文摘出品 作者:蒋宝尚 <复仇者联盟4:终局之战>上映已经有一段时间了,内地累计票房便已突破20亿.电影精彩之处离不开钢铁侠.雷神.美国队长等各位超级英雄的实力支撑. 每个英雄各具特 ...

最新文章

  1. 人性漫画:打工与创业的残酷区别……
  2. PointPillar:利用伪图像高效实现3D目标检测
  3. 专业的秘密 | 南方医科大学生物信息学专业
  4. Day02,Python条件判断及循环
  5. 手脱UPX v0.89.6 - v1.02
  6. Linux CentOS PhpMyAdmin安装--转载
  7. 回顾 | Apache Flink 1.13 新版本 x 互娱实践分享 Meetup · 北京站精彩回顾 (附 PPT 下载)
  8. 静态时序分析——多周期、半周期和伪路径
  9. 关于python import的sys.path路径问题
  10. tslib-1.4.tar.gz安装和配置
  11. LINQ体验(2)——C# 3.0新语言特性和改进(上篇)
  12. 配置追踪者—Scylla v1(***测试工具)
  13. 英国交通分析指南(Transport analysis guidance)解读及启示
  14. 大一计算机学实验报告,大学大学计算机实验报告
  15. 虚拟机内linux网络连接,vmware中redhat5虚拟机无法连接网络
  16. RBAC模型整合数据权限
  17. API文档与模拟数据接口
  18. java解析project mpp文件_Jira数据导出,Java写mpp文件
  19. web前端不用怕,外卖平台的项目开发流程,大全!!
  20. 魔兽争霸英雄属性全揭秘

热门文章

  1. 对AES 128和256位加密解密性能对比
  2. 00、老徐教你学C语言——C语言学习之道(学习篇)——理论
  3. 业务流程图与数据流图的对比
  4. 聚合供应链,Saas系统,商品供应链
  5. 大型传统企业如何向人工智能转型?
  6. yaourt -S mysql_Yaourt 已死!在 Arch 上使用这些替代品
  7. 2023年证券、基金、银行从业资格证考试计划
  8. 关于STM8的程序下载问题:SWIM Error[30006]报错解决办法汇总
  9. 鸿蒙系统下拉菜单,华为鸿蒙系统官方
  10. Mac下显示网页全屏快捷键