【整活】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 最新论文

点亮 ,告诉大家你也在看

    

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值