优化前情形

"敏捷开拓,快速迭代",彷佛这种思维从多年前就埋在了脑筋里 (借口)。
以是前文算是个初版 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)

关于 ModelScope 的视频 AI 换脸 优化筹划

pycharm 部分

由于也有一些没有打仗过 python 的小伙伴留言,这里就再先容一下 IDE 的运行,也为理解决在 cmd 中运行涌现获取当前路径问题。
前面也有文章先容关于 Python 虚拟环境的创建,这里就跳过了,直接演示在 IDE 中配置虚拟环境和运行代码。

1. 查看当前环境下的环境列表。

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

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

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

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