deepfake ai智能换脸_AI换脸之后,智能去除马赛克视频工具被疯传,测试结果令人意外...

AI换脸之后,智能去除马赛克视频工具被疯传,测试结果令人意外

未来10年,你觉得什么科技最能改变生活?是5G网络、智能驾驶、还是……或许在人工智能AI技术,也是其中的一员,因为人类将AI定位为下一个可以解放双手的生产工具,除了被广泛应用到工业自动化生产,其实AI软件已经开始出现在大家的生活中,比如在去年轰动国内的AI换脸软件ZAO,就曾风靡一时。

82efcec5bdb23a4ea2244e7b92773ce8.png

用过ZAO的人都知道,这是一款号称可以AI将自己的脸与喜欢的明星"P"到一起表演的软件,仅需大家把自己的照片传到ZAO上面,软件就会通过AI的方式让你"参演"电影片段。

其实在ZAO风靡的背后,国外早就流行一款名为Deepfakes,当然两款软件最后的命运都比较类似,同时引发外界对隐私问题的担忧和关注。不过关于AI技术的应用并未因此停止,市场上各种涉及隐私的软件也飞快被开发出来,比如"一键衣物去除"软件DeepNude。

7ec6ac51da866a4eef1a4a3806e8aa1c.png

为什么AI换脸换衣服的软件能够大受欢迎?其实都是因为开发者抓住当今人类喜欢猎奇的心理,同时也对未知事物充满兴趣。

当然也并不是每一款AI软件工具开发出来,都是为了娱乐大众做无聊的事情。科技向善一直是时代的发展方向,更是为了解决人类演化过程中遇到的各种障碍,所以AI技术自然也不是例外。

e44592ab3735079cb9fad083b04b6cb8.png

在视频方面,一款名为TeclGAN也在国外爆红并被疯传,这款软件号称可以通过AI的方式把视频中的"马赛克"处理掉。TeclGAN同样是一款基于AI深度学习的软件 ,主要的特点就是通过识别视频画面中的图像,并以此将学习到的模式不断提升单个元素的分辨率,用人话来说就是,TeclGAN能通过AI学习的方式,把模糊的视频变得更加清晰,不过是现在拍的还是以前拍摄的内容,同时还具有修补图像细节的能力。

dccd56626a43aaf7bcf458a6044ccd2c.png

那么TeclGAN去除马赛克的能力真的有开发人员说的那么强吗?国外有好奇的网友就下来在测试了。通过测试比较来看TeclGAN的去马赛克的性能还是可以的,处理过的视频视觉效果要比没处理得好不少。而出乎人们意料的是,如果把20世纪发布的一些老游戏进行处理 ,也可以提供游戏的分辨率,同时能增加游戏的细节和3D模型的复杂性。以后说不定魂斗罗、红警、坦克世界修复后,都能再度风靡。

除了TeclGAN,杜克大学最近也带来一个新的照片编辑工具PULSE,这同样是一款AI工具软件,可以将低像素的面孔变成逼真的图像。和TeclGAN一样,PULSE也依赖于机器学习能力,可以往低分辨率的图像中添加细节,可以在几秒之内,将16x 16像素的图像转换为1024x1024像素的图像。通俗来说就是,通过对比大量的真实人物数据,构建逼真的高清面部表情。当然这些算法功能不仅仅局限在人物,像医学,天文学,显微镜和卫星图像,PULSE都有用武之地。

907a2163490d5b8f130c2d2c15c93a89.png

人工智能其实还处于很早期的开发阶段,难免会出现各种可疑的问题,以至于许多人都会担忧是否未来AI技术会超越人类的能力,但就设计的初衷来讲它依然是为了解放劳动力的产物。而就这些去马赛克的工具类软件来说,不管是TeclGAN还是PULSE都是希望将更美好的世界呈现给大家,因为只有未来更加美好,AI才变得更加有意义。

对此,你觉得人工智能真的有好坏之分吗?

为了实现AI换脸,我们可以使用Python和一些深度学习库,例如PyTorch和OpenCV。下面是一个简单的AI换脸的模型,供参考: 首先,我们需要下载一个预训练的人脸识别模型和一个预训练的图像生成模型。这里我们可以使用OpenFace和StyleGAN2。 ```python # 下载预训练的人脸识别模型 !wget https://storage.cmusatyalab.org/openface-models/nn4.small2.v1.t7 # 下载预训练的StyleGAN2模型 !wget https://github.com/NVlabs/stylegan2-ada-pytorch/releases/download/pretrained/ffhq.pkl ``` 接下来,我们可以编写一个函数,使用OpenCV和人脸识别模型来检测图像中的人脸。 ```python import cv2 import dlib import torch import numpy as np # 加载人脸识别模型 face_detector = dlib.get_frontal_face_detector() face_encoder = dlib.face_recognition_model_v1("nn4.small2.v1.t7") def detect_faces(img): # 将图像转换为灰度图像 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 检测人脸 faces = face_detector(gray, 1) # 提取每个人脸的编码 encodings = [] for face in faces: # 获取人脸区域的边界框 (x, y, w, h) = face_utils.rect_to_bb(face) # 提取人脸区域的编码 face_img = img[y:y+h, x:x+w] face_img = cv2.resize(face_img, (96, 96)) face_img = np.transpose(face_img, (2, 0, 1)) face_tensor = torch.from_numpy(face_img).float().unsqueeze(0) encoding = face_encoder(torch.autograd.Variable(face_tensor)) encodings.append(encoding.data.numpy()[0]) return faces, encodings ``` 然后,我们可以编写一个函数,使用预训练的StyleGAN2模型生成一个具有指定编码的图像。 ```python import io import PIL.Image import torch import torchvision import torchvision.transforms.functional as F # 加载StyleGAN2模型 generator = torch.load("ffhq.pkl")["G_ema"].cuda() def generate_image_from_encoding(encoding): # 将编码转换为Tensor encoding = torch.from_numpy(encoding).cuda() # 使用StyleGAN2生成图像 with torch.no_grad(): image = generator([encoding], truncation=0.7, truncation_latent=None)[0] image = (image + 1) / 2.0 image = F.to_pil_image(image.cpu()) # 将图像转换为NumPy数组 buf = io.BytesIO() image.save(buf, format='JPEG') buf.seek(0) img_array = np.asarray(bytearray(buf.read()), dtype=np.uint8) img = cv2.imdecode(img_array, cv2.IMREAD_COLOR) return img ``` 最后,我们可以编写一个函数,将一个人的脸替换为另一个人的脸。 ```python def swap_faces(img1, img2): # 检测第一个图像中的人脸 faces1, encodings1 = detect_faces(img1) # 检测第二个图像中的人脸 faces2, encodings2 = detect_faces(img2) # 如果没有检测到人脸,返回原始图像 if len(faces1) == 0 or len(faces2) == 0: return img1 # 选择第一个图像中的第一个人脸 face1 = faces1[0] encoding1 = encodings1[0] # 选择第二个图像中的第一个人脸 face2 = faces2[0] encoding2 = encodings2[0] # 生成第一个图像中的人脸的新图像 new_img1 = generate_image_from_encoding(encoding2) # 将第二个图像中的人脸替换为第一个图像中的人脸 (x1, y1, w1, h1) = face1_utils.rect_to_bb(face1) (x2, y2, w2, h2) = face_utils.rect_to_bb(face2) new_img2 = img2.copy() new_img2[y2:y2+h2, x2:x2+w2] = cv2.resize(new_img1[y1:y1+h1, x1:x1+w1], (w2, h2)) return new_img2 ``` 使用这个函数,我们可以将一个人的脸替换为另一个人的脸。 ```python # 加载两个图像 img1 = cv2.imread("img1.jpg") img2 = cv2.imread("img2.jpg") # 将第二个图像中的人脸替换为第一个图像中的人脸 new_img = swap_faces(img1, img2) # 显示结果图像 cv2.imshow("Result", new_img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 这是一个简单的AI换脸的模型,可以根据需要进行修改和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值