如何用 ModelScope 实现 “AI 换脸” 视频

这篇具有很好参考价值的文章主要介绍了如何用 ModelScope 实现 “AI 换脸” 视频。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

        当下,视频内容火爆,带有争议性或反差大的换脸视频总能吸引人视线。虽然 AI 换脸在市面上已经流行了许久,相关制作工具或移动应用也是数不胜数。但是多数制作工具多数情况下不是会员就是收费,而且替换模板有限。以下在实战的角度,用阿里 ModelScope 的图像人脸融合实现一下 AI 视频换脸。

如何用 ModelScope 实现 “AI 换脸” 视频

流程

       提供一段视频和一张替换的人脸图片,用 opencv-python 将视频根据帧率拆成图片,用 FFmpeg 提取视频里的音频为单独文件 (mp3)。遍历目录下的每一帧的图片,通过 ModelScope 的人脸融合模型,传入新的人脸和帧率图片,得到替换过人脸的帧图片。最后再通过 opencv-python 将替换的人脸图片组合成新视频,FFmpeg 添加提取出的音频文件。

环境

1. Python 3.7.16

2. ModelScope 1.4.2

3. OpenCV-Python 4.7.0

4. FFmpeg 12.2.0

环境安装

1. Python 虚拟环境添加

conda create -n modelscope python=3.7 && conda activate modelscope

2. 安装 ModelScope,使用了国内镜像源

pip install modelscope --upgrade -i https://pypi.tuna.tsinghua.edu.cn/simple

3. 安装 OpenCV

pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple

4. 安装 FFmpeg

因为单是图片用不上,所以安装方法放在下面视频换脸里

图片换脸

1. 素材准备

     我这里分别准备了一个画面里出现正脸,侧脸和两张脸的图片,然后分别用一张图片替换,最后运行代码查看效果。(可能是模型原因,感觉光看图片的换脸好像相差不大,倒有点像只是开了个美颜,也有可能是俩演员有点像,认真看还有有点不同)。

如何用 ModelScope 实现 “AI 换脸” 视频

2. 代码部分

import cv2
from modelscope.outputs import OutputKeys
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks

image_face_fusion = pipeline(Tasks.image_face_fusion, 
                       model='damo/cv_unet-image-face-fusion_damo')
template_path = '181.jpg'
user_path = 'face.jpg'
result = image_face_fusion(dict(template=template_path, user=user_path))

cv2.imwrite('result.png', result[OutputKeys.OUTPUT_IMG])
print('finished!')

如何用 ModelScope 实现 “AI 换脸” 视频

如何用 ModelScope 实现 “AI 换脸” 视频

视频换脸

1.  FFmpeg 安装

如果是 windows10 可以按我下面的选择,shared 是动态版本,不带的是静态版本,所有的功能都集合在一起。

如何用 ModelScope 实现 “AI 换脸” 视频

2. FFmpeg 环境配置

下载后解压会生成一下目录,将 bin 文件放入电脑环境变量中,然后通过 ffmpeg -version 查看是否安装成功。

如何用 ModelScope 实现 “AI 换脸” 视频

3. FFmpeg 用法

3.1. 从视频中抽取音频 (输入视频和输出音频的地址可以是相对路径)

ffmpeg -i videos\11.mp4 -q:a 0 -map a audio\audio.mp3 

 3.2. 将独立音频文件添加到视频里 (接收输入视频,输入音频,输出新视频)

ffmpeg -i videos/ldh.mp4 -i audio/audio.mp3 -c:v copy -c:a aac -strict experimental videos/new_ldh.mp4

4. 开始编码

from pathlib import Path
import cv2
import os

def video2mp3_img(video_path, save_path):
    def video_split(video_path, save_path):

        if not os.path.exists(save_path):
            os.makedirs(save_path)
        cap = cv2.VideoCapture(video_path)
        i = 0
        while True:
            ret, frame = cap.read()
            if ret:
                cv2.imwrite(save_path + '/' + str(i) + '.jpg', frame)
                i += 1
            else:
                break
        cap.release()
    if not os.path.exists(save_path):
        os.makedirs(save_path)
        
    # 视频分割
    video_split(video_path, save_path)
    
    # 视频转音频
    os.system("ffmpeg -i {} -q:a 0 -map a {}/audio.mp3".format(video_path, save_path))

def face_replace(user_path=""):

    from pathlib import Path
    import cv2
    from modelscope.outputs import OutputKeys
    from modelscope.pipelines import pipeline
    from modelscope.utils.constant import Tasks
    import os
    os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'

    def my_function(img_path):
    
        image_face_fusion = pipeline(Tasks.image_face_fusion, model='damo/cv_unet-image-face-fusion_damo')
        template_path = img_path
        filename = os.path.splitext(os.path.basename(img_path))[0]
        
        # 替换面部依赖
        result = image_face_fusion(dict(template=template_path, user=user_path))
        cv2.imwrite(f'video_imgout/{filename}.jpg', result[OutputKeys.OUTPUT_IMG])
            
    threads = []
    BASE_PATH = os.path.dirname(__file__)
    
    for dirpath, dirnames, filenames in os.walk(r"D:\3code\3Python\modelscope\mv_face_change-main"):
        for filename in filenames:
            print(filename)
            if filename.endswith('.jpg'):
                file_path = Path(os.path.join(dirpath, filename))
                print(file_path)
                my_function(str(file_path))

def img2mp4(video_path, save_name):
    BASE_PATH = "D:\3code\3Python\modelscope\mv_face_change-main"
    img = cv2.imread("video_img/0.jpg")
    imgInfo = img.shape
    size = (imgInfo[1], imgInfo[0])
    
    files = []
    for dirpath, dirnames, filenames in os.walk(r"D:\3code\3Python\modelscope\mv_face_change-main\video_imgout"):
        for filename in filenames:
            fileName = Path(os.path.join(dirpath, filename))
            files.append(os.path.join(dirpath, filename))
    
    files = [file.replace('\\', '/') for file in files]
    files.sort(key=lambda x: int(x.split('/')[-1].split('.')[0]))
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')
    videoWrite = cv2.VideoWriter(r"D:\3code\3Python\modelscope\mv_face_change-main\videos\ldh.mp4", fourcc, 25, size)  # 写入对象 1 file name  3: 视频帧率
    for i in files:
        print(i)
        img = cv2.imread(str(i))
        videoWrite.write(img)
    
    # 将video_img中的音频文件添加到视频中
    os.system("ffmpeg -i {} -i {} -c:v copy -c:a aac -strict experimental {}".format("videos/ldh.mp4", "audio/audio.mp3", "videos/newlest_ldh.mp4"))

if __name__ == '__main__':
    BASE = os.path.dirname(__file__)
    video_path = os.path.join(BASE, "videos/demo.mp4")  
    save_path = os.path.join(BASE, "video_img")         

    # 视频  ==> imgs
    video2mp3_img(video_path, save_path)
    
    # 人脸替换
    face_replace(user_path='zsy.jpg')
    
    # imgs ==> 视频
    img2mp4(video_path, save_name='zsy')

5. 报错汇总

当运行上面代码,如果出现 Output file does not contain any stream,那就是分离音频或追加音频到视频的这两个地方报的错误,大部分情况下输出路径不正确或命令参数不对。还有一个错误我没有记录,就是让视频压根没有声音,再执行分离操作时也会报错。这个是我上班时随便拿的视频测试 (因为不能戴耳机,刚好视频就是没声音的),所以使劲测使劲报错,换了视频就好了,关键是错误提示也没说是视频没声音。

6. 效果演示

        由于时间原因,没有用杨过的视频,就用没有声音的视频做了换脸演示。以后还要对换脸图片替换做多线程处理。

如何用 ModelScope 实现 “AI 换脸” 视频

如何用 ModelScope 实现 “AI 换脸” 视频

如何用 ModelScope 实现 “AI 换脸” 视频文章来源地址https://www.toymoban.com/news/detail-476978.html

到了这里,关于如何用 ModelScope 实现 “AI 换脸” 视频的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AI人工智能一键图片/视频换脸-Roop

    Roop 换脸技术是一种基于深度学习的人脸图像处理技术。 Roop换脸技术的实现主要分为两个步骤: 人脸检测与对齐 、 特征融合与生成 。 1.人脸检测与对齐在Roop换脸技术中,首先需要对输入的图像进行人脸检测与对齐。这一步骤的目的是确保输入的两张图像中的人脸位置和角

    2024年02月13日
    浏览(56)
  • 用AI免费生成换脸视频,最简两种方式

    事情是这样的,最近和几个朋友探讨未来Ai应用的时候,正好有个是做短剧的,另一个朋友提出了AI换脸短剧出海的想法,最为一个技术控,就想着探究下代码实现生成的方式,是否技术成熟,话不多说,回来直接翻看资料,就是干,整理了以下两种免费而且效果很不错的方式

    2024年04月28日
    浏览(36)
  • 本地版AI视频换脸软件Rope介绍,一张图片就可以变脸的免费换脸软件

    随着人工智能的发展,现在有着越来越多的ai换脸软件,可以一键将影视片段里的角色换成自己的脸,与喜欢的明星同框,那么免费的Ai换脸软件有哪些呢?今天给大家推荐一个叫rope的换脸软件,rope是本地离线安装的换脸软件,无任何功能限制。可以这样说,rope目前是pc端最

    2024年02月08日
    浏览(322)
  • 微信云开发AI短视频一键换脸小程序源码

    微信云开发AI一键视频换脸小程序源码是由极客二改后发布的,小程序增加了广告控制, 插屏广告,激励广告和原生广告,由于采用了微信云开发没有后台, 所以不需要域名和服务器也可以正常搭建使用,所有的配置都可以在app.js文件中进行修改, 目前接口还可以正常使用

    2024年02月08日
    浏览(80)
  • 【AIGC】一款离线版的AI智能换脸工具V2.0分享(支持图片、视频、直播)

    随着人工智能技术的爆发,AI不再局限于大语言模型,在图片处理方面也有非常大的进步,其中AI换脸也是大家一直比较感兴趣的,但这个技术的应用一直有很大的争议。 今天给大家分享一个开源你的 AI换脸工具2.0 ,只需要一张所需脸部的图像,无需数据集,无需训练,你就

    2024年02月11日
    浏览(56)
  • AI换脸软件有哪些?这几个工具能轻松实现换脸

    AI换脸是指利用人工智能技术将一张人脸的特征迁移到另一张人脸上,从而实现人脸转换的过程。这种技术已经被广泛应用于各个领域中,例如视频制作、视频修复、艺术创作和模拟仿真等。但是也有很多小伙伴感觉这个操作很有趣,想要将自己的照片进行AI换脸,体验一下身

    2024年02月05日
    浏览(51)
  • 如何用 AI 自动分析描述视频内容?

    (注:本文为小报童精选文章,已订阅小报童或加入知识星球「玉树芝兰」用户 请勿重复付费 ) 丰富自动数据分析的类型,解决你工作和研究中的效率痛点。 今天我们要探讨的话题是如何运用 AI 自动分析视频内容。其实,我很早以前就对这个需求产生关注。因为在情报学

    2024年02月01日
    浏览(43)
  • 一键AI高清换脸——基于InsightFace、CodeFormer实现高清换脸与验证换脸后效果能否通过人脸比对、人脸识别算法

    1、项目简介 AI换脸是指利用基于深度学习和计算机视觉来替换或合成图像或视频中的人脸。可以将一个人的脸替换为另一个人的脸,或者将一个人的表情合成到另一个人的照片或视频中。算法常常被用在娱乐目上,例如在社交媒体上创建有趣的照片或视频,也有用于电影制作

    2024年02月08日
    浏览(46)
  • AI绘画SD神器插件Inpaint Anything---简单快速实现换装换脸

    大家好,我是程序员晓晓 在AI绘画Stable DIffusion中,有一个 Inpaint Anything算法,可以实现移除、填补、替换一切内容,实现单击图像上的任何物体可以一键擦除替换任何内容、更改任意背景,这可以提高遮罩创建过程的效率和准确性,从而在节省时间和精力的同时获得更高质量

    2024年04月14日
    浏览(56)
  • 汇总当下的AI绘画模型

    AI绘画从今年过年那阵儿兴起,到现在(2023.8)已经半年过去了,涌现了很多风格迥异的模型,我在这里简单汇总一些。 一、写实人物类 1.1 AWPortrait 比较拟真的人物肖像 1.2  XXMix_9realistic 2.5D人物模型,因为画面带有一丝油画的感觉,可以制作古典风格的人物肖像,也是大家见的

    2024年02月13日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包