基于Python实现视频的人脸融合功能

方予
方予
发布时间:2026-10-14| 3人浏览过
原创

本文详细介绍如何利用Python实现视频的人脸融合功能。流程涵盖视频逐帧图片提取、基于概率阈值的目标人脸识别与融合处理、音频独立提取以及最终视频合成。通过具体代码示例,展示如何控制融合质量并保留原视频声音,为技术交流提供完整参考。

​

视频图片帧提取

图片提取

为便于技术演示,本文选取演员杨紫的一段演讲视频作为素材。该用例仅用于技术交流展示,不涉及对任何特定个人的指向或评价。

为了实现AI换脸效果,首要步骤是将上述视频逐帧拆解为静态图片。


 def vedio_2_pic(self,file,save_path):
 """
 逐帧取照片
 file:视频的位置
 save_path:保存路径
 """
 # 读取视频
 video = cv2.VideoCapture(file)
 # 获取视频帧率
 fps = video.get(cv2.CAP_PROP_FPS)
 # 获取画面大小
 width = int(video.get(cv2.CAP_PROP_FRAME_WIDTH))
 height = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT))
 size = (width, height)
 frame_num = str(video.get(7))
 ret, frame = video.read()
 num =1
 while True:
  ret, frame = video.read()
  if ret !=True:
  break
  cv2.imwrite(save_path + str(num) + '.jpg', frame)
  num +=1
 video.release()
 return fps, size,frame_num

目标人脸识别与融合处理

脸部融合

在前一环节完成视频图片提取后,假设我们希望杨紫拥有杨幂般的眼睛特征,使其外貌更接近杨幂,此时“目标选定人”即设定为杨幂。

由于视频可能存在镜头切换,对焦对象可能是观众或其他人物,因此在执行脸部融合前,需先判断当前图片中是否包含杨紫。若识别出杨紫的概率大于0.85,则执行脸部融合操作;若概率小于等于0.85,则跳过融合步骤。接下来进行具体的脸部融合处理。

​

核心代码


 for i in range(frame_num):
 image2="""/Users/***/face_ztl/picture/%d.jpg"""%(i)
 content = video_make.img_compare(image1,image2)
 try:
 if content >0.85:
  print('-----%d-----'%(i))
  video_make.merge_face(image2,object_image,merge_rate=100)
 else:
  print(0)
  img = cv2.imread(image2)
  img_path = image2.replace('picture','picture_new')
  cv2.imwrite(img_path, img)
 except:
 pass
 print('第%d张出现了问题'%(i)) 

音频提取与视频合成

提取音频

为确保合成后的视频包含原始声音,需将视频中的音频轨道提取并保存,具体实现代码如下:


def getMusic(self,video_name,save_path):
 """
 获取指定视频的音频
 video_name:视频路径
 save_path:音频保存路径
 举例
 save_path='/Users/***/vedio/1.wav' 
 """
 # 读取视频文件
 video = VideoFileClip(video_name)
 # 返回音频
 audio = video.audio
 audio.write_audiofile(save_path) 

合成视频

至此,我们已获得处理后的音频和融合后的图片序列。最后一步是将二者合成为完整的视频,相关代码如下:


 """
 图片转视频
 save_path:视频保存路径
 """
 # 写入视频
 fourcc = cv2.VideoWriter_fourcc(*'mp4v')
 video = cv2.VideoWriter(save_path, fourcc, fps, size)

 # 排序目的
 for item in range(int(frame_num)):
  path = pic_path +str(item) + '.jpg'
  if os.path.exists(path):
  # 读取原图像
  img = cv2.imread(path)
  # 写入视频
  video.write(img)
 video.release()

总结

以上就是关于基于Python实现视频人脸融合功能的完整介绍。如需了解更多Python实现视频人脸融合的相关内容,建议搜索本站过往文章或继续浏览后续系列教程,感谢大家的支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。