关于 ModelScope 的视频 “AI 换脸” 优化方案
前言
前面一文,初步完成了一下 “AI 换脸” 视频处理程序。完成了视频拆帧,拆帧图片人脸融合,已经音频提取和最后的人脸融合图片的整合(也就是将图片和音频组成视频)。但是在人脸融合部分由于是单线程,处理起来非常耗时,所以这里就对那部分进行优化。

优化前情况
"敏捷开发,快速迭代",好像这种思维从多年前就埋在了脑子里 (借口)。所以前文算是个初版 demo,并且在环境中运行只是用 cmd 来完成,没有使用专门 Python 的 IDE。也很有可能是这个原因,在执行代码里,只要是关于获取当前目录的地方都不起效果,这是一点另一点就是上面重点要解决的,提升人脸替换的处理速度,这里要用到多线程。

编码
1. 人脸替换部分
用法就不多讲了,Py 相关的文档有讲,以下只是代码片段,可以用这个替换前面文章代码里的 face_replace 函数。经过测试,相同的张数的图片 (这里只有 403 张),处理时间比前者缩短了半小时。
def face_replace(user_path=""):
import threading
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'
max_workers = 2
semaphore = threading.Semaphore(max_workers)
def my_function(img_path):
with semaphore:
print(f"{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])
print(f"{filename}.png ok")
threads = []
BASE_PATH = os.path.dirname(__file__)
for dirpath, dirnames, filenames in os.walk(BASE_PATH + "/video_img"):
for filename in filenames:
print(filename)
if filename.endswith('.jpg'):
file_path = Path(os.path.join(dirpath, filename))
t = threading.Thread(target=my_function, args=(str(file_path),)).start()
threads.append(t)

pycharm 部分
由于也有一些没有接触过 python 的小伙伴留言,这里就再介绍一下 IDE 的运行,也为了解决在 cmd 中运行出现获取当前路径问题。前面也有文章介绍关于 Python 虚拟环境的创建,这里就跳过了,直接演示在 IDE 中配置虚拟环境和运行代码。
1. 查看当前环境下的环境列表。

2. 打开 IDE 创建项目后进入。

3. 选择 Project,选择已经创建好的虚拟环境。

4. 查看当前项目是否在该环境下

5. 最后就可以直接用于代码了。

关于 ModelScope 的视频 “AI 换脸” 优化方案的更多相关文章
- 揭秘盒马鲜生 Android 短视频秒播优化方案
短视频作为内容重要的承载方式,是吸引用户的重点,短视频的内容与体验直接关系到用户是否愿意长时停留.因此,体验的优化就显得尤为重要.上一篇我们分享了 iOS 短视频秒播优化,这篇我们来聊聊 Androi ...
- AI换脸教程:DeepFaceLab使用教程(1.安装及分解视频)
首先需要选择合适的DeepFaceLab下载(https://www.deepfacelabs.com/list-5-1.html),然后安装相应的显卡驱动,如果已经准备好这些工作,那么恭喜你,终于开 ...
- 从350ms到80ms,揭秘阿里工程师 iOS 短视频优化方案
内容作为 App 产品新的促活点,受到了越来越多的重视与投入,短视频则是增加用户粘性.增加用户停留时长的一把利器.短视频的内容与体验直接关系到用户是否愿意长时停留,盒马也提出全链路内容视频化的规划,以 ...
- AI换脸实战教学(FaceSwap的使用)---------第一步Extration:提取人脸。
市面上有多款AI换脸的方法,笔者这里节选了Github那年很火的开源项目FaceSwap: (很早就实践了,但是忘记记录啦hhh,请勿用于不正当用途哦) 做了一篇详细教学,包括配置,参数设置,换脸效果 ...
- 深圳云栖大会人工智能专场:探索视频+AI,玩转智能视频应用
摘要: 在人工智能时代,AI技术是如何在各行业和领域真正的发挥应用和商业价值,带来产业变革才是关键.在3月28日深圳云栖大会的人工智能专场中,阿里云视频服务技术专家邹娟将带领大家探索熟悉的视频场景中, ...
- 前端项目优化 -Web 开发常用优化方案、Vue & React 项目优化
github github-myBlob 从输入URL到页面加载完成的整个过程 首先做 DNS 查询,如果这一步做了智能 DNS 解析的话,会提供访问速度最快的 IP 地址回来 接下来是 TCP 握手 ...
- 程序员体验AI换脸就不要用ZAO了,详解Github周冠军项目Faceswap的变脸攻略
本文链接:https://blog.csdn.net/BEYONDMA/article/details/100594136 上个月笔者曾在<银行家杂志>发文传统银行如何引领开放 ...
- Thiago2(TPO AI.ROSTO):集成式AI换脸软件(Autodesk Flame)
如标题一样,Thiago2 是一款集成式AI换脸软件(TPO AI.ROSTO),需要与Autodesk Flame结合使用,从demo来看完成度还是很高的,算是一种完全GUI版的DeepFaceLa ...
- AI换脸教程:DeepFaceLab使用教程(2.训练及合成)
如果前期工作已经准备完毕(DeepFaceLab下载(https://www.deepfacelabs.com/list-5-1.html),然后安装相应的显卡驱动,DeepFaceLab使用教程(1 ...
- 视频云肖长杰:视频AI科技助力短视频生态
人工智能技术是当今炙手可热的技术领域,它在制造.家居.零售.交通.安防等行业的应用已经是大势所趋.在本月云栖Techday音视频技术沙龙中,阿里云视频云产品专家肖长杰为我们分享了一些AI技术在视频中应 ...
随机推荐
- 猿人学内部js练习平台习题记录
猿人学内部js练习平台习题记录 根据课程更新 当前先完成第7题和第10题 第7题 骚操作 请求规律检测1 - post 1)通过fiddler抓包,看看请求头和请求体有什么骚操作的地方,如果没有反爬就 ...
- 【CF】掉分总结
比赛总结 前情提要 自从前段时间连续掉分,就心态崩了,还是自己太菜,一直想写个总结,看看这几场比赛都干了啥,以后准备怎么办.鸽了这么久的总结,是该写写了. 这是正文 首先大致提一下情感曲线(菜的真实) ...
- 警惕看不见的重试机制:为什么使用RPC必须考虑幂等性
0 文章概述 在RPC场景中因为重试或者没有实现幂等机制而导致的重复数据问题,必须引起大家重视,有可能会造成例如一次购买创建多笔订单,一条通知信息被发送多次等问题,这是技术人员必须面对和解决的问题. ...
- SD协议-命令响应
1.CRC 发送命令或数据的时候,都需要经过芯片的IO口,SD Host和SD卡是通过PCB的走线连接在一起的,SD Host IO --> PCB线 --> SD Card IO,PCB ...
- k8s实战案例之部署Nginx+Tomcat+NFS实现动静分离
1.基于镜像分层构建及自定义镜像运行Nginx及Java服务并基于NFS实现动静分离 1.1.业务镜像设计规划 根据业务的不同,我们可以导入官方基础镜像,在官方基础镜像的基础上自定义需要用的工具和环境 ...
- 【Python入门教程】批量修改文件名,批量移动文件
Python提供了高效的高级数据结构,还能简单有效地面向对象编程.Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言.本篇文章是&quo ...
- CKS 考试题整理 (14)-启用API Server认证
Context 由 kubeadm 创建的cluster 的kubernetes API 服务器,出于测试目的, 临时配置允许未经身份验证和未经授权的访问,授予匿名用户 cluster-admin 的 ...
- @Retention元注解的使用
@Retention注解标记其他的注解用于指明标记的注解保留策略:先看Java SE 8中@Target是如何声明的: package java.lang.annotation; public enu ...
- 前端学习C语言 - 函数和关键字
函数和关键字 本篇主要介绍:自定义函数.宏函数.字符串处理函数和关键字. 自定义函数 基本用法 实现一个 add() 函数.请看示例: #include <stdio.h> // 自定义函 ...
- uniapp企业微信web-view父子通信问题
项目背景:开发工具为HBuilderX,框架为uniapp,开发移动端的Web应用,在企业微信中使用(自建应用),Web开发的应用,不是小程序. 需求:页面中用到<web-view>组件, ...