|
头条号:人工智能研究所微信号:启示AI科技视频号:启示科技
前期我们介绍过VToonify模型,一种基于StyleGAN的人脸动漫转换模型,本期我们介绍另外一个转换人脸的模型DCT-Net。

什么是 DCT-Net
首先,输入图片x生成以矢量 z 为输入的实时 Xs 的样式 GAN 网络 Gs,以及矢量 z以生成样式传输图像 Xt 的网络 Gt 组合。这允许网络在输入矢量 z 时生成实时 Xs 和相应的样式传输图像 Xt。
然后,使用此连接网络在 GAN 框架中学习 U-Net 结构的文本传输网络。通过同步几何扩展中的仿射变换(缩放、旋转、平移等),将纹理传输网络输入 Xs和比较输出 Xt 同步,从而消除了对面对齐和区域的限制。
DCT-Net模型同时提供人脸的动漫,3D,手绘,素描,美术风格的人脸转换,更多此模型的介绍可以参考GitHub

https://github.com/menyifang/DCT-NetDCT-Net人脸风格转换代码实战
DCT-Net模型可以进行人脸图片的风格转换,当然,我们也可以把视频实时帧提取出来,然后进行DCT-Net模型的风格转换,转换完成后,我们再把视频帧合并,达到视频人脸风格转换的功能。
! pip install "modelscope[cv]" -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html
! pip install --upgrade urllib3
from function import *
! mkdir picture/images
from modelscope.outputs import OutputKeys
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
model_dict = {
"anime": "damo/cv_unet_person-image-cartoon_compound-models",
"3d": "damo/cv_unet_person-image-cartoon-3d_compound-models",
"handdrawn": "damo/cv_unet_person-image-cartoon-handdrawn_compound-models",
"sketch": "damo/cv_unet_person-image-cartoon-sketch_compound-models",
"art": "damo/cv_unet_person-image-cartoon-artstyle_compound-models"
}
img_anime = pipeline(Tasks.image_portrait_stylization, model= model_dict["anime"])
img_3d = pipeline(Tasks.image_portrait_stylization, model= model_dict["3d"])
img_handdrawn = pipeline(Tasks.image_portrait_stylization, model= model_dict["handdrawn"])
img_sketch = pipeline(Tasks.image_portrait_stylization, model= model_dict["sketch"])
img_art = pipeline(Tasks.image_portrait_stylization, model= model_dict["art"])

首先我们需要安装modelscope,并定义了DCT-Net模型转换人脸风格的5种类型,分别是
"anime": "damo/cv_unet_person-image-cartoon_compound-models",
"3d": "damo/cv_unet_person-image-cartoon-3d_compound-models",
"handdrawn": "damo/cv_unet_person-image-cartoon-handdrawn_compound-models",
"sketch": "damo/cv_unet_person-image-cartoon-sketch_compound-models",
"art": "damo/cv_unet_person-image-cartoon-artstyle_compound-models"此模型在第一次运行代码时,会自动下载模型的预训练文件。有了以上5种风格转换类型,我们定义5个转换变量,方便后期进行人脸风格的转换

import os
import cv2
from IPython.display import Image,display, clear_output
style = "anime" ["anime", "3d", "handdrawn", "sketch", "art"]
filename = "4.jpg"
img_path = 'picture/'+filename
if style == 'anime': result = img_anime(img_path)
if style == '3d': result = img_3d(img_path)
if style == 'handdrawn': result = img_handdrawn(img_path)
if style == 'sketch': result = img_sketch(img_path)
if style == 'art': result = img_art(img_path)
save_name = 'picture/images/' + os.path.splitext(filename)[0] +'_'+style+'.jpg'
cv2.imwrite(save_name, result[OutputKeys.OUTPUT_IMG])
clear_output()
display(Image(save_name))然后我们便可以加载任意一个人脸图片,这个人脸图片最好是人的正脸。然后选择一个人脸转换类型就可以自动进行人脸风格的转换操作了。转换完成后,我们可以保存下来图片。

DCT-Net人脸风格视频文件转换代码实战
当然除了可以处理图片外,我们可以把视频传递给此模型,再模型进行转换前,需要把视频每帧的图片提取出来。

video = 'sample_video.mp4'
video_file = 'movie/'+video
image_dir='movie/images/'
vc=cv2.VideoCapture(video_file)
i = 0
if vc.isOpened():
rval,frame=vc.read()
cv2.imwrite(image_dir+str(c)+'.jpg',frame)
i += 1
cv2.waitKey(2)
cv.release()所有图片保存完成后,我们便可以进行图片的人脸风格转换了

import glob
from tqdm import tqdm
import cv2
style = "anime" # ["anime", "3d", "handdrawn", "sketch", "art"]
reset_folder('movie/images')
files = sorted(glob.glob('movie/images/*.jpg'))
for i, file in enumerate(tqdm(files)):
if style == 'anime': result = img_anime(file)
if style == '3d': result = img_3d(file)
if style == 'handdrawn': result = img_handdrawn(file)
if style == 'sketch': result = img_sketch(file)
if style == 'art': result = img_art(file)
save_name = 'movie/images/' + str(i).zfill(6) + '.jpg'
cv2.imwrite(save_name, result[OutputKeys.OUTPUT_IMG])
fps_r = fps/interval
file_path = 'movie/images/%06d.jpg'
! ffmpeg -y -r $fps_r -i $file_path -vcodec libx264 -pix_fmt yuv420p -loglevel error out.mp4
! ffmpeg -y -i $video_file -loglevel error sound.mp3
! ffmpeg -y -i out.mp4 -i sound.mp3 -loglevel error output.mp4

得到的转换图片,我们需要使用ffmpeg进行所有图片的合并成视频文件,当然若源视频存在音频文件,我们也可以使用ffmpeg进行视频与音频文件的合成。

以上,便是本期介绍的DCT-Net模型了,5种转换类型,你最中意那款,可以使用自己的视频或者图片进行代码实现。
VX搜索小程序:AI人工智能工具,体验不一样的AI工具
 |
|