【整活】python实现肌肉金轮词云图视频,堪称中了金轮的毒
点击上方“AI算法与图像处理”,选择加"星标"或“置顶”
重磅干货,第一时间送达
一、前言
最近金轮(大司马)因为AI换脸《肌肉金轮》又火遍全网。
今天我利用周末的时间用AI技术整个活,娱乐的同时学点技术,秒啊!
大致要实现的效果是,在肌肉金轮的基础上,附上经典的语录。
二、实现的思路
1、获取素材
2、采用分割算法获取主体的mask
3、在 mask 上生成词云图
4、将词云图与原图融合
5、添加音频文件
三、代码实现
1、获取素材
包括:AI换脸后的视频、经典语录 txt 文件【文末附下载链接】
视频截图:
经典语录截图(这里我手动找了一些,大家可以自行搜索更多):
2、采用抠图算法获取主体的mask
1)首先从视频中获取每一帧图片
import cv2
cap = cv2.VideoCapture(r"output.mp4")
num = 1
while True:
# 逐帧读取视频 按顺序保存到本地文件夹
ret, frame = cap.read()
if ret:
if 1 <= num < 1700:
cv2.imwrite(f"./test_data/test_images/img_{num}.jpg", frame) # 保存一帧帧的图片
print(f'========== 已成功保存第{num}张图片 ==========')
num += 1
else:
break
cap.release() # 释放资源
2)使用BASNet(CVPR 2019)的分割算法,抠图主体
环境配置:
Python 3.6
numpy 1.15.2
scikit-image 0.14.0
PIL 5.2.0
PyTorch 0.4.0
torchvision 0.2.1
glob
这里我使用高版本的pytorch 依然可以用(torch 1.6.0 + torchvision 0.7.0)
克隆项目
git clone https://github.com/NathanUA/BASNet.git
下载必要的权重文件,并放置在路径saved_models/basnet_bsi/
下
并将视频中抽取的图片放置在BASNet 项目的 est_data/test_images
下(建议可以考虑删除 test_iamges 和 test_results 下提供的demo素材)
运行
python basnet_test.py
运行成果后即可在 test_results 文件下看到获取到的mask
3、在 mask 上生成词云图
代码:
# -*- coding: UTF-8 -*-
from wordcloud import WordCloud
import collections
import jieba
import re
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
# 读取数据
with open('jinlun.txt') as f:
data = f.read()
# 文本预处理 去除一些无用的字符 只提取出中文出来
new_data = re.findall('[\u4e00-\u9fa5]+', data, re.S)
new_data = "/".join(new_data)
# 文本分词
seg_list_exact = jieba.cut(new_data, cut_all=True)
result_list = []
with open('stop_words.txt', encoding='utf-8') as f:
con = f.read().split('\n')
stop_words = set()
for i in con:
stop_words.add(i)
for word in seg_list_exact:
# 设置停用词并去除单个词
if word not in stop_words and len(word) > 1:
result_list.append(word)
# 筛选后统计词频
word_counts = collections.Counter(result_list)
path = './wordcloud/'
for num in range(1, 1668):
img = f'./test_data/test_results/img_{num}.png'
# 获取蒙版图片
mask_ = 255 - np.array(Image.open(img))
# 绘制词云
plt.figure(figsize=(8, 5), dpi=200)
my_cloud = WordCloud(
background_color='black', # 设置背景颜色 默认是black
mask=mask_, # 自定义蒙版
mode='RGBA',
max_words=500,
font_path='simhei.ttf', # 设置字体 显示中文
).generate_from_frequencies(word_counts)
# 显示生成的词云图片
plt.imshow(my_cloud)
# 显示设置词云图中无坐标轴
plt.axis('off')
word_cloud_name = path + 'wordcloud_{}.png'.format(num)
my_cloud.to_file(word_cloud_name) # 保存词云图片
print(f'======== 第{num}张词云图生成 ========')
4、将词云图与原图融合, 不好意思已中毒
代码:
import cv2
for i in range(1,1668):
src1_path = "./test_data/test_images/img_{}.jpg".format(i)
src1 = cv2.imread(src1_path)
src2_path = "./wordcloud/wordcloud_{}.png".format(i)
src2 = cv2.imread(src2_path)
dst = cv2.addWeighted(src1, 1, src2, 0.5,0)
dst_img = "./result/{}.png".format(i)
cv2.imwrite(dst_img,dst)
print("img process {} !".format(dst_img))
# 输出视频的保存路径
video_dir = 'result-1.mp4'
# 帧率
fps = 24
# 图片尺寸
test = cv2.imread("./test_data/test_images/img_1.jpg")
x,y,_ = test.shape
img_size = (y, x)
fourcc = cv2.VideoWriter_fourcc('M', 'P', '4', 'V') # opencv3.0 mp4会有警告但可以播放
videoWriter = cv2.VideoWriter(video_dir, fourcc, fps, img_size)
for i in range(1, 1668):
img_path = './result/' + '{}.png'.format(i)
frame = cv2.imread(img_path)
frame = cv2.resize(frame, img_size) # 生成视频 图片尺寸和设定尺寸相同
videoWriter.write(frame) # 写进视频里
print(f'======== 按照视频顺序第{i}张图片合进视频 ========')
videoWriter.release() # 释放资源
5、添加音频文件
import moviepy.editor as mpy
# 读取词云视频
my_clip = mpy.VideoFileClip('result-1.mp4')
# 截取背景音乐
audio_background = mpy.AudioFileClip('output.mp4')
audio_background.write_audiofile('output.mp3')
# 视频中插入音频
final_clip = my_clip.set_audio(audio_background)
# 保存为最终的视频 动听的音乐!漂亮小姐姐词云跳舞视频!
final_clip.write_videofile('final_video.mp4')
结果展示
代码和素材获取,点击上面的小卡片,回复“金轮”即可获取
参考:
https://yetingyun.blog.csdn.net/article/details/112209719
https://github.com/xuebinqin/BASNet
好的,今天的分享就到这里,如果喜欢记得关注我,给我一个三连,感谢
个人微信(如果没有备注不拉群!) 请注明:地区+学校/企业+研究方向+昵称
下载1:何恺明顶会分享
在「AI算法与图像处理」公众号后台回复:何恺明,即可下载。总共有6份PDF,涉及 ResNet、Mask RCNN等经典工作的总结分析
下载2:终身受益的编程指南:Google编程风格指南
在「AI算法与图像处理」公众号后台回复:c++,即可下载。历经十年考验,最权威的编程规范!
下载3 CVPR2021 在「AI算法与图像处理」公众号后台回复:CVPR,即可下载1467篇CVPR 2020论文 和 CVPR 2021 最新论文
点亮 ,告诉大家你也在看